Envío de formularios de complemento Prácticas recomendadas

14

He investigado mucho y no he encontrado lo que buscaba, por lo que espero poder orientarme en la dirección correcta.

Estoy desarrollando un complemento de Eventos que reservará un boleto desde la interfaz. Esto no es diferente a cualquier otro envío de Formulario, pero con lo que me estoy confundiendo es cómo manejar eso desde un complemento que se escribe a través de OOP con una clase.

La mayoría de los artículos que encontré dicen poner el manejo de $ _POST dentro de la página de la plantilla. Idealmente, me gustaría que esto fuera manejado por una función dentro del complemento.

La otra cosa de la que no estoy seguro es cuando envía el formulario en el frontend, cómo se pasa a la función en el backend. Espero abstraer completamente el procesamiento del formulario de los detalles de la plantilla.

// events.php
if ( ! class_exists( 'Events' ) ) {

    Class Events {
        function __construct() {
            add_action( 'plugins_loaded', array( &$this, 'includes' ), 1 );
        }

        function includes() {
            require_once( EVENTS_INCLUDES . 'functions.php' );
        }
    }
}

if ( class_exists( 'Events' ) ) {
    $events_load = New Events();
}


// functions.php
function process_form() {
    ...do form processing here...

    ...insert booking...
}

No estoy seguro de a qué enganchar eso lo atraparía, ni a dónde enviar la acción del formulario también. ¡Gracias por toda la ayuda!

-Adam

    
pregunta alistek 28.06.2011 - 02:29

1 respuesta

8

Envíe la acción del formulario a su página de inicio o a una URL de página específica. No puede tener el manejo de $ _POST dentro de la plantilla porque necesita redireccionar después de procesarla, y la redirección debe activarse antes de cualquier salida HTML.

// you should choose the appropriate tag here
// template_redirect is fired just before any html output
// see - http://codex.wordpress.org/Plugin_API/Action_Reference
add_action('template_redirect', 'check_for_event_submissions');

function check_for_event_submissions(){
  if(isset($_POST['event'])) // && (get_query_var('pagename') === 'events) 
    {
       // process your data here, you'll use wp_insert_post() I assume

       wp_redirect($_POST['redirect_url']); // add a hidden input with get_permalink()
       die();
    } 

}

También puede buscar un nonce para asegurarse de que los datos se hayan enviado desde el lugar correcto ...

    
respondido por el onetrickpony 28.06.2011 - 04:29

Lea otras preguntas en las etiquetas