Best practice per l'invio di moduli plug-in


16

Ho fatto molte ricerche e non ho trovato esattamente quello che sto cercando, quindi spero di poter essere indirizzato nella giusta direzione.

Sto sviluppando un plug-in Eventi che prenoterà un ticket dal frontend. Questo non è diverso da qualsiasi altra presentazione del modulo, ma ciò di cui mi sto confondendo è come gestirlo da un plugin che è scritto tramite OOP con una classe.

La maggior parte degli articoli che ho trovato dicono di inserire la gestione $ _POST all'interno della pagina del modello. Idealmente, vorrei che questo fosse gestito da una funzione all'interno del plugin.

L'altra cosa di cui non sono sicuro è quando si invia il modulo sul front-end, come viene effettivamente passato alla funzione sul back-end. Spero di estrarre completamente l'elaborazione del modulo da tutti i dettagli del modello.

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

Non sono sicuro di cosa agganciarlo o di dove inviare l'azione del modulo. Grazie per tutto l'aiuto!

-Adamo


Hai un esempio più completo della logica all'interno di process_form (). Sono interessato a sapere quale azione invii per garantire l'invio corretto del modulo.
emeraldjava,

Risposte:


8

Invia l'azione del modulo alla tua home page o a un URL di pagina specifico. Non è possibile gestire $ _POST all'interno del modello perché è necessario reindirizzare dopo averlo elaborato e il reindirizzamento deve essere attivato prima di qualsiasi output 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();
    } 

}

Puoi anche controllare un nonce per assicurarti che i dati siano stati inviati dal posto giusto ...


Mi ero avvicinato molto a quella soluzione ma stavo usando init invece di template_redirect. Non pensavo di usare il reindirizzamento in quel modo, ma lo rende molto più semplice che cercare di capire cosa fosse successo. Sto già verificando il nonce, devo solo mettere in atto tutti i moduli JS e la convalida dei moduli lato server. Grazie per l'aiuto, avevo lottato con questo, ma ora ha senso.
alistek,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.