自定义表单、快捷代码和提交处理程序

时间:2011-04-27 作者:ariefbayu

我有一个前端表单,有一堆输入。我的需求迫使我使用自定义的短代码来创建表单。我已经用这个短代码测试了一个页面。

这是我的:

<form name="myform" method="post" action="<?php echo str_replace( \'%7E\', \'~\', $_SERVER[\'REQUEST_URI\']); ?>" enctype="multipart/form-data">
基于此,它应该打开相同的页面(确实如此)。然而,当我点击提交时,我在同一个URL上得到了404。有什么解决办法吗?

UPDATE #1

我尝试了不同的路由,使用add\\u action(\'init\'):

add_action(\'init\', \'mbro1_intercept_form_input\');
function mbro1_intercept_form_input()
{
    if( !(isset($_POST[\'action_code\']) && $_POST[\'action_code\'] == \'mbro_intercept_form_input\') )
        return "";
    if( isset( $_POST[\'submit\'] ) )
    {
        //do my code here
        wp_redirect( get_permalink(35) );//page that has [shortcode]
    }
}
这成功运行了提交时的预期操作。但是重定向后,它仍然得到404。我不知道怎么了。

3 个回复
最合适的回答,由SO网友:ariefbayu 整理而成

我接受die() 作为解决方案。不过,我不喜欢这个。

$redirect_link =  get_permalink(35) ; //page that has form
$script_redirect = "<div>Your form is submitted. Please wait a moment. If your browser didn\'t redirect, click <a href=\'$redirect_link\'>here</a>.</div>
<script type=\'text/javasript\' language=\'javascript\'> 
    window.location = \'$redirect_link\';
</script> ";
die( $script_redirect );

SO网友:Geert

您的表单是否有名为“name”的输入?例如:

<input type="text" name="name">
如果是这样的话,那就麻烦了。更改名称值。

另请参见:Form \'name\' breaks and goes to 404 page.

SO网友:Norcross

我假设这条线接近终点

wp_redirect( get_permalink(35) );//page that has form

就是失败的地方。我会改成这个

$redirect_link =  get_permalink(35) ; //page that has form
wp_redirect( $redirect_link );  // trigger redirect
exit;
这将使其正常工作

结束