web-dev-qa-db-fra.com

Méthode de soumission de formulaire de plug-in

J'ai fait beaucoup de recherches et je n'ai pas trouvé ce que je cherchais. J'espère donc pouvoir être dirigé dans la bonne direction.

Je développe un plugin Events qui permettra de réserver un ticket depuis le frontend. Ce n'est pas différent de n'importe quelle autre soumission de formulaire, mais je ne comprends pas trop 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 de $ _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 lorsque vous soumettez le formulaire sur le serveur, comment il est transmis à la fonction sur le serveur. J'espère que le traitement du formulaire sera complètement abstrait de tous les 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 suis pas sûr de ce qu'il faut accrocher pour y remédier, ni de l'endroit où envoyer le formulaire d'action également. Merci pour votre aide!

-Adam

15
alistek

Envoyez l'action de formulaire à votre page d'accueil ou à une URL de page spécifique. Vous ne pouvez pas gérer $ _POST dans le modèle car vous devez rediriger après le traitement et la redirection doit être lancé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 vérifier la présence d'un nonce pour vous assurer que les données ont été soumises au bon endroit ...

8
onetrickpony