Best Practice für das Einreichen von Plugins

16

Ich habe viel recherchiert und nicht ganz das gefunden, wonach ich suche, und hoffe, dass ich in die richtige Richtung gelenkt werden kann.

Ich entwickle ein Event-Plugin, mit dem ich ein Ticket über das Frontend buchen kann. Dies ist nicht anders als bei jeder anderen Formularübermittlung, aber ich bin verwirrt darüber, wie das mit einem Plugin gehandhabt wird, das über OOP mit einer Klasse geschrieben wurde.

Die meisten Artikel, die ich gefunden habe, sagen, dass die $ _POST-Behandlung in die Vorlagenseite eingefügt werden soll. Idealerweise möchte ich dies durch eine Funktion innerhalb des Plugins erledigen lassen.

Das andere, bei dem ich mir nicht sicher bin, ist, wann Sie das Formular auf dem Frontend einreichen, wie das tatsächlich an die Funktion auf dem Backend übergeben wird. Ich hoffe, die Formularverarbeitung vollständig von allen Vorlagendetails zu abstrahieren.

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

Ich bin nicht sicher, woran ich mich anschließen soll, oder wohin ich die Formularaktion senden soll. Danke für all die Hilfe!

-Adam

alistek
quelle
Haben Sie ein vollständigeres Beispiel für die Logik in der process_form (). Ich möchte wissen, welche Aktion Sie aufrufen, um sicherzustellen, dass Ihre Formularübermittlung ordnungsgemäß weitergeleitet wird.
Smaragdjava

Antworten:

8

Senden Sie die Formularaktion entweder an Ihre Homepage oder an eine bestimmte Seiten-URL. Die Vorlage kann nicht mit $ _POST bearbeitet werden, da Sie sie nach dem Verarbeiten umleiten müssen und die Umleitung vor jeder HTML-Ausgabe ausgelöst werden muss.

// 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();
    } 

}

Sie können auch nach einer Nonce suchen , um sicherzustellen, dass die Daten von der richtigen Stelle übermittelt wurden ...

ein Trickpony
quelle
Ich war dieser Lösung sehr nahe gekommen, habe aber init anstelle von template_redirect verwendet. Ich dachte nicht daran, die Umleitung auf diese Weise zu verwenden, aber das macht es viel einfacher, als herauszufinden, was passiert ist. Ich überprüfe bereits die Nonce, muss nur alle JS-Formular- und serverseitigen Formularüberprüfungen durchführen. Vielen Dank für die Hilfe, ich hatte damit zu kämpfen, aber es macht jetzt Sinn.
Alistek