Wp_reDirect()不使用init钩子处理表单提交

时间:2017-03-02 作者:pixelngrain

我正在尝试在表单提交后使用重定向用户wp_redirect() 但它不起作用。

我正在使用提交数据init 行动挂钩。这是代码。

function ab_process_application_form()
{

    if (isset($_POST[\'new_application\']) && isset($_POST[\'ab_application_nonce\'])) {

        if (wp_verify_nonce($_POST[\'ab_application_nonce\'], \'ab_application_form_nonce\')) {

            // all $_POST and validation code

            ...

            // add record to database
            $insert_id = $db->insert($data, $format);

            // trigger action after form submit
            do_action(\'ab_application_submitted\', $insert_id, $firstname, $lastname, $post_campaign);

            // redirect after form submitted
            wp_redirect(home_url(\'/application/thank-you\'));

        } else {
            echo \'Not Verified\';
        } // end nonce verification

    } // end check
} // end of function


// submit record on init hook
add_action(\'init\', \'ab_process_application_form\');

1 个回复
SO网友:Krzysiek Dróżdż

代码的问题很简单。执行重定向后,不会终止脚本执行。因此,将设置标题,但浏览器将忽略它。

如果你看看WP Code Reference, 明确规定:

注意:wp\\u redirect()不会自动退出,并且应该总是在调用退出后进行;

因此,您所要做的就是更改代码,如下所示:

function ab_process_application_form()
{
    if (isset($_POST[\'new_application\']) && isset($_POST[\'ab_application_nonce\'])) {

        if (wp_verify_nonce($_POST[\'ab_application_nonce\'], \'ab_application_form_nonce\')) {

            // all $_POST and validation code

            ...

            // add record to database
            $insert_id = $db->insert($data, $format);

            // trigger action after form submit
            do_action(\'ab_application_submitted\', $insert_id, $firstname, $lastname, $post_campaign);

            // redirect after form submitted
            wp_redirect(home_url(\'/application/thank-you\'));
            exit; // <-- this is the only change you need to do

        } else {
            echo \'Not Verified\';
        } // end nonce verification

    } // end check
} // end of function


// submit record on init hook
add_action(\'init\', \'ab_process_application_form\');
附:几乎总是最好在重定向到的URL中添加尾部斜杠。否则,WP将再次执行重定向以添加此斜杠。

PPS。还有,如果你用admin_post 钩子代替init 处理POST请求。

相关推荐

TINI_MCE_BEFORE_INIT不是触发器

我正试图清理WordPress中粘贴的文本,因此我决定按照this tutorial.添加一个过滤器似乎很简单before_wp_tiny_mce 并添加一个设置来清理文本。我的问题是tiny_mce_before_init 从未触发。我可以看到这些挂钩触发:before_wp_tiny_mce, wp_tiny_mce_init, after_wp_tiny_mce 但从来没有tiny_mce_before_init.我到处都找遍了,没有任何东西拆下过滤器,也没有任何扩展来更换tinymce。如果有人有