Meilleures pratiques pour la soumission de formulaires de plug-in


16

J'ai fait beaucoup de recherches et je n'ai pas trouvé tout à fait ce que je recherche, alors j'espère que je pourrai être dirigé dans la bonne direction.

Je développe un plugin Events qui réservera un ticket depuis le frontend. Ce n'est pas différent de n'importe quelle autre soumission de formulaire, mais ce qui me trouble, c'est comment gérer cela à partir d'un plugin écrit via OOP avec une classe.

La plupart des articles que j'ai trouvés disent de mettre la gestion $ _POST dans la page de modèle. Idéalement, j'aimerais que cela soit géré par une fonction dans le plugin.

L'autre chose dont je ne suis pas sûr, c'est quand vous soumettez le formulaire sur le frontend, comment cela est réellement passé à la fonction sur le backend. J'espère faire complètement abstraction du traitement des formulaires à partir des détails du modèle.

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

Je ne sais pas trop quoi accrocher pour attraper cela, ni où envoyer l'action de formulaire aussi. Merci pour votre aide!

-Adam


Avez-vous un exemple plus complet de la logique à l'intérieur de process_form (). Je suis intéressé de savoir quelle action vous appelez pour vous assurer que votre soumission de formulaire est correctement acheminée.
emeraldjava

Réponses:


8

Envoyez l'action de formulaire soit à votre page d'accueil, soit à une URL de page spécifique. Vous ne pouvez pas gérer $ _POST dans le modèle, car vous devez rediriger après votre processus, et la redirection doit être déclenchée avant toute sortie 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();
    } 

}

Vous pouvez également rechercher un nonce pour vous assurer que les données ont été soumises au bon endroit ...


J'étais très proche de cette solution mais j'utilisais init au lieu de template_redirect. Je n'ai pas pensé à utiliser la redirection de cette façon, mais cela la rend beaucoup plus simple que d'essayer de comprendre ce qui s'est passé. Je vérifie déjà le nonce, j'ai juste à mettre en place tous les formulaires JS et validation côté serveur. Merci pour l'aide, j'avais eu du mal avec ça mais ça a du sens maintenant.
alistek
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.