web-dev-qa-db-fra.com

Formulaire à étapes multiples, plugin personnalisé

J'ai créé un formulaire de contact multi-page fonctionnel intégrant Zoho CRM & Slack.

Ce que je veux faire, c'est lorsqu'un utilisateur accède à notre page de contact, il verra la première moitié du formulaire (step1.php), puis en fonction du travail qu'il souhaite que nous fassions (stratégie de marque, Web, vidéo) step2.php s’ouvrira, puis enfin un message de remerciement sur step3.php.

Pour l'instant, la forme de step1 est la suivante:

<form method="POST" action="<?php echo plugins_url('step2.php',__FILE__)?>">

quel écho est dans le navigateur comme:

http: //localhost/COMPANY/wp-content/plugins/COMPANY-contact/step2.php

Je ne veux pas que cette URL apparaisse, je veux plutôt que l'URL ressemble (ou similaire)

http: // localhost/COMPANY/step2

Enfin, comme cela résonne directement dans le dossier du plugin, cela ne me permet pas d'utiliser get_head/get_footer, je ne peux donc pas appliquer le thème de mon site Web, ce que je veux aussi!

3
Nazar Abubaker

Le processus peut être effectué en publiant le formulaire sur la page en cours, puis en utilisant ces valeurs à partir de l'objet $_POST pour déterminer le formulaire suivant.

Dans l'exemple le plus simple, une entrée masquée nommée "page" peut augmenter sa valeur à chaque étape. Définissez la valeur des entrées masquées supplémentaires avec les données de $_POST si nécessaire dans les étapes/formulaires suivants.

La méthode exemple ci-dessous fait cela. J'ai ajouté un shortcode, [count_page_form], qui peut l'inclure dans un message ou une page pour faciliter les tests. Tout cela irait dans le thème functions.php

( ne pas utiliser en production, évidemment, aucune désinfection ou validation n’est effectuée ici ).

Cela devrait être un exemple suffisant pour que vous puissiez modifier ce que vous avez travaillé.

Exemple:

add_shortcode('count_page_form','count_page_function');

function count_page_function(){
    global $wpdb;
    $current_page  =  $_SERVER['REQUEST_URI'];
    //check for $_POST value for our page_count, make it null if it isn't there since that means we're on page 1
    if ($_POST && $_POST['page']) { 
        $page_count   =   $_POST['page'];
    }
    else { 
        $page_count = null; 
    }
    //now let's start checking the page_count and displaying as needed
    if ( $page_count == NULL ) {
        echo '<form method="post" action="' . $current_page .'">
                <label for="first_name" id="first_name">First Name: </label>
                <input type="text" name="first_name" id="first_name" />

                <input type="hidden" value="1" name="page" />
                <input type="submit" />
            </form>';
            //the hidden input type above gives our $_POST['page'] a value of one upon submission
    }//end page 1
    elseif ( $page_count == 1 ) {
        //grab values from first $_POST, we will add them to hidden input below so new $_POST has them  
        $first_name =   $_POST['first_name'];

        echo '<h2>This is page two</h2>';
        // note below we add the hidden for first_name, and we change the value for page to 2
        echo '<form method="post" action="' . $current_page .'">
            <input type="hidden" name="first_name" id="first_name" value="'. $first_name .'" />
            <label for="second_name" id="second_name">Second Name: </label>
            <input type="text" name="second_name" id="second_name" />
            <input type="hidden" value="2" name="page" />
            <input type="submit" />
        </form>';

    }//end page 2
    elseif ($page_count == 2) {
        $first_name  = $_POST['first_name'];
        $second_name = $_POST['second_name'];

        echo '<h2>The third page!</h2>';
        echo $second_name;
        echo $first_name;
    }//end page 3
}//end count_page_function
3
hwl