2017-03-03 26 views
0

Wordpressで同じページにフォームデータを投稿する際に問題があります。 私は[lwCSForm]という名前のショートコードを作成しました。このショートコードは動作し、追加されたページのフォームを吐き出します。問題は、私がページを提出すると、$ _POST ['submit']変数に気付かず、私のコードがデータを処理できなくなることです。Wordpressカスタムショートコードフォームは同じページに投稿できません

  • action="php echo $_SERVER['PHP_SELF']"(私はPHPのタグがここで動作させることはできません)

  • action="php echo $post->post_title"を(私は得ることができない:私は形でこれらのアクションを使用することをテストしている

    PHPタグは)ここに

  • も直接書き込みページ名を動作するように:action="about"

これはページ上のショートを介してフォームを表示する機能である:ショート

The form added with shortcode

なぜ習慣ワードプレスを添加したフォームの

function DisplayCustomSettingsForm_shortcode() { 
global $post; 

if(!is_user_logged_in()){ 
    echo '<div class="lwCSForm-notloggedin"> 
      <p> Please login to view the content! </p> 
      </div>'; 
    return; 
} 

if(isset($_POST['submit'])) 
{ 
    echo "The submit button is pressed and has data"; 
    /* Code to update customers settings, like avatar, email, username */ 

} else { 
$phpself = $post->post_title; // get the current page 

    ?><br /> 
     <!-- LwCSForm Plugin--> 
     <section id="lwCSForm-wrapper"> 
      <form name="lwCSForm" id="lwCSForm" method="post" action="<?php $phpself ?>" autocomplete="on"> 
       Name: <input type="text" name="realname" placeholder="Your Name" > 
       Sitename: <input type="text" name="username" placeholder="Username" > 
       E-mail: <input type="text" name="email" placeholder="E-mail" > 
       Avatar: <input type="text" name="avatar" placeholder="Avatar" > 
       <input type="submit" > 
      </form> 
     </section> 
     <!-- END LwCSForm Plugin--> 
    <br /> <?php 
} 
} 
add_shortcode('lwCSForm', 'DisplayCustomSettingsForm_shortcode'); 

ピクチャーこの情報を処理しますか?もう一度免責事項を記入してください。私はここに印刷するPHPタグを得ることができませんが、彼らはソースにあります。

答えて

1

私は、以下のような関数を書くことができ、データのフォーム検証とプロセスの作成が簡単になることを発見しました。 action=""はWordpressの "the_permalink()"関数を使用しています。これにより、投稿されたデータのすべての検証と処理を、Wordpressの 'INIT'機能に別々にフックするのではなく、同じ機能に書き込むことができます。以下

if(isset($_POST[ 'lwCSFormSubmit' ])) 
{ 

} 

新機能:

function DisplayCustomSettingsForm_shortcode() { 
    global $post; 

    if(!is_user_logged_in()){ 
     echo '<div class="lwCSForm-notloggedin"> 
       <p> Please login to view the content! </p> 
       </div>'; 
     return; 
    } 

    if(isset($_POST['lwCSFormSubmit'])) 
    { 
     echo "The submit button is pressed and has data"; 
     var_dump($_POST); 
    } 
    ?> 
     <!-- LwCSForm Plugin--> 
     <br /> 
       <section id="lwCSForm-wrapper"> 
        <form name="lwCSForm" id="lwCSForm" method="post" action="<?php the_permalink(); ?>" autocomplete="on"> 
         Name: <input type="text" name="realname" placeholder="Your Name" > 

         Sitename: <input type="text" name="username" placeholder="Username" > 

         Email: <input type="text" name="email" placeholder="E-mail" > 

         Avatar: <input type="text" name="avatar" placeholder="Avatar" > 

         <input type="submit" name="lwCSFormSubmit"> 
        </form> 
       </section> 
     <br /> 
     <!-- END LwCSForm Plugin--> 
<?php 
} 
add_shortcode('lwCSForm', 'DisplayCustomSettingsForm_shortcode'); 

ニック・ダンカンの答えは両方とこの作品は、それが使用するためにどのような状況に依存します。

0
は、私が initフックに取り扱いPOSTを移動していると私は、我々は$ _POST配列を経由して、それを識別することができ、フォームの名前を与えている

function DisplayCustomSettingsForm_shortcode() { 
    global $post; 

    if(!is_user_logged_in()){ 
     echo '<div class="lwCSForm-notloggedin"> 
       <p> Please login to view the content! </p> 
       </div>'; 
     return; 
    } 


    ?><br /> 
     <!-- LwCSForm Plugin--> 
     <section id="lwCSForm-wrapper"> 
      <form name="lwCSForm" id="lwCSForm" method="post" action="" autocomplete="on"> 
       Name: <input type="text" name="realname" placeholder="Your Name" > 
       Sitename: <input type="text" name="username" placeholder="Username" > 
       E-mail: <input type="text" name="email" placeholder="E-mail" > 
       Avatar: <input type="text" name="avatar" placeholder="Avatar" > 
       <input name='WCSPostSubmitButton' type="submit" > 
      </form> 
     </section> 
     <!-- END LwCSForm Plugin--> 
    <br /> <?php 

} 
add_shortcode('lwCSForm', 'DisplayCustomSettingsForm_shortcode'); 

add_action('init', 'WCSGetPostData'); 
function WCSGetPostData() { 
    if (isset($_POST['WCSPostSubmitButton'])) { 
     // dump out the POST data 
     var_dump($_POST); 

    } 
} 

にコードを変更し

+0

なぜ私はそれをページの初期化でロードすると思いませんでしたか?私は家に帰るとすぐにこれをテストします! Thanx – Nuc

+0

これは問題を完全に解決し、正しいとマークしました。ただ一つの質問。私たちが 'init'フックでデータを取得すれば、どのようにしてショートコード関数でコールバックを作成し、 "データが保存されました"ということを出力できますか? – Nuc

関連する問題