Melhor prática de envio de formulário de plug-in

14

Eu pesquisei muito e não encontrei exatamente o que estou procurando, por isso estou esperando que eu possa ser apontado na direção certa.

Estou desenvolvendo um plug-in de Eventos que reservará um ticket a partir do frontend. Isso não é diferente de qualquer outro envio de Formulário, mas o que estou me confundindo é como lidar com isso com um plugin que é escrito via OOP com uma classe.

A maioria dos artigos que eu encontrei diz para colocar a manipulação $ _POST na página do template. Idealmente, eu gostaria de ter isso tratado por uma função dentro do plugin.

A outra coisa que não tenho certeza é quando você envia o formulário no frontend, como isso realmente é passado para a função no backend. Espero que você abstraia completamente o processamento de formulários de qualquer detalhe de modelo.

// 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...
}

Não tenho certeza sobre o que conectar a isso, ou para onde enviar a ação do formulário também. Obrigado por toda a ajuda!

-Adam

    
por alistek 28.06.2011 / 02:29

1 resposta

8

Envie a ação do formulário para sua página inicial ou para um URL de página específico. Você não pode ter manipulação $ _POST dentro do modelo, porque você precisa redirecionar após o processo, e redirecionar precisa ser acionado antes de qualquer saída 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();
    } 

}

Você também pode procurar um nonce para garantir que os dados foram enviados do lugar certo ...

    
por onetrickpony 28.06.2011 / 04:29