web-dev-qa-db-ja.com

マルチステップフォーム、カスタムプラグイン

私はZoho CRMとSlackを統合した実用的な複数ページの連絡フォームを作成しました。

私がやりたいことは、ユーザーが連絡先ページに移動したときに、フォームの前半(step1.php)が表示され、次に自分がやりたい仕事に応じて(ブランディング、ウェブ、ビデオ)step2.phpその後、step3.phpに「ありがとう」というメッセージが表示されます。

現時点でstep1のフォームはこれを持っています:

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

これは、ブラウザ内で次のように表示されます。

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

このURLを表示したくないので、代わりにURLを(または同様の)ようにします。

http:// localhost/COMPANY/step2

最後に、それはプラグインのフォルダに直接反映されているので、get_head/get_footerを使うことを許可していないので、私は自分のウェブサイトのテーマを適用することができません。

3
Nazar Abubaker

このプロセスは、現在のページにフォームをポストしてから、$_POSTオブジェクトからのそれらの値を使用して次のフォームを決定することによって実行できます。

最も簡単な例では、 "page"という名前の隠し入力は各ステップでその値を増やすことができます。後の手順やフォームで必要な場合は、$_POSTからのデータで追加の隠し入力の値を設定します。

以下のサンプルメソッドはこれを行います。私はショートコード、[count_page_form]を追加しました。それは投稿やページに含めることができるのでテストが簡単です。これはすべてテーマの functions.php になります。

プロダクションでは使用しないでください、明らかに、ここではサニタイズや検証は行われません )。

あなたが働いているものを修正することはあなたにとって十分な例であるべきです。

例:

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