2017-03-03 53 views
0
同一页

我有一个表单数据发布到同一个页面来处理它在WordPress的一个问题。 我已经创建了一个名为[lwCSForm]的短代码,它可以工作并将其添加到的页面上的表单吐出。问题是当我按提交页面不会注意到$ _POST ['submit']变量和我的代码不能处理数据。WordPress的自定义简码的形式不能张贴到

我已经测试使用的形式,这些操作:

  • action="php echo $_SERVER['PHP_SELF']"(我不能让PHP的标签在这里工作)

  • action="php echo $post->post_title"(我不能得到php标签在这里工作)

  • 甚至直接写页面名称:action="about"

这是通过简码的网页上显示表单功能:

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'); 

图片添加的形式与简码

The form added with shortcode

为什么不会WordPress的处理这些信息?并再次声明。我无法在这里打印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

更改您的代码

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); 

    } 
} 

我提出POST处理的init钩和我已经给你的表单的名称,所以我们可以通过$ _POST阵列识别它。

+0

我怎么没想到这一点,将其加载到页面初始化?我会尽快回家测试这个! Thanx – Nuc

+0

这解决了完美的问题,标记为正确的。只是一个问题。如果我们在'init'钩子中获取数据,那么我如何在短代码函数中进行回调并打印出“数据已保存”? – Nuc