it-swarm.com.de

Multi-Step-Formular, benutzerdefiniertes Plugin

Ich habe ein funktionierendes mehrseitiges Kontaktformular mit Zoho CRM & Slack-Integration erstellt.

Was ich tun möchte, ist, wenn ein Benutzer unsere Kontaktseite besucht, wird die erste Hälfte des Formulars (step1.php) angezeigt. Dies hängt von dem Job ab, den er ausführen möchte (Branding, Web, Video). Step2.php wird sich öffnen, dann zum Schluss eine "Danke" Nachricht auf step3.php.

Im Moment hat das Formular von step1 folgendes:

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

welches echo ist im browser als:

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

Ich möchte nicht, dass diese URL angezeigt wird. Stattdessen möchte ich, dass die URL so (oder ähnlich) aussieht.

http: // localhost/COMPANY/step2

Schließlich kann ich das Thema meiner Website nicht anwenden, da es direkt in den Ordner des Plugins zurückgesendet wird. Das ist auch das, was ich will!

3
Nazar Abubaker

Sie können den Vorgang ausführen, indem Sie das Formular auf der aktuellen Seite veröffentlichen und dann diese Werte aus dem Objekt $_POST verwenden, um das nächste Formular zu ermitteln.

Im einfachsten Beispiel kann eine ausgeblendete Eingabe mit dem Namen "Seite" ihren Wert bei jedem Schritt erhöhen. Legen Sie den Wert für zusätzliche versteckte Eingaben mit den Daten aus $_POST fest, falls dies in späteren Schritten/Formularen erforderlich ist.

Die folgende Beispielmethode führt das aus. Ich habe einen Shortcode, [count_page_form], hinzugefügt, der in einen Beitrag oder eine Seite eingefügt werden kann, damit es einfach zu testen ist. All dies würde in die functions.php des Themas gehen.

( natürlich nicht in der Produktion verwenden, da hier keine Desinfektion oder Validierung durchgeführt wird ).

Es sollte Ihnen als Beispiel genügen, Ihre Arbeit zu ändern.

Beispiel:

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