wp_redirect()-标头已发送


10

wp_redirect()在页面上成功提交注册表单后,我尝试使用重定向用户。

它不起作用,并显示以下错误:

警告:无法修改标头信息-已在/ Applications / MAMP / htdocs / theme / wp-发送的标头(输出始于/Applications/MAMP/htdocs/theme/wp-content/themes/test/header.php:10) 1178行上的include / pluggable.php

我知道以前已经有输出,这就是为什么它不起作用的原因,但是我不知道如何使它起作用。

注册表单由一个函数呈现,并由另一个函数在我的functions.php中提交。

if ( isset( $_POST['subscribe'] ) ) {
    // Submits the form and should then redirect
    wp_redirect("/thank-you/");
    exit;
}

然后,在我要显示注册表单的地方都使用了这两个函数。

恐怕这不是最好的选择。我应该创建一些操作来做到这一点,但是我不知道如何实现。我发现的大多数教程都直接在同一页面上显示结果,不需要其他重定向。也许这就是为什么他们在functions.php中使用函数的原因

Answers:


16

找到了答案(通过)

我没有使用该函数,而是向“ wp_loaded”添加了操作,以确保在发送任何标头之前先加载该操作。

<?php
add_action ('wp_loaded', 'my_custom_redirect');
function my_custom_redirect() {
    if ( isset( $_POST['subscribe'] ) ) {
        $redirect = 'http://example.com/redirect-example-url.html';
        wp_redirect($redirect);
        exit;
    }
}     
?>

它摆脱了错误,但帖子没有保存!
Subrata Sarkar


3
add_action('template_redirect', function(){
if(isset($_POST['subscriptio'])){// make this condition such that it only matches when a registraiotn form get submitted
/**
 * do your stuff here
 */
wp_redirect();//....
}
});

感谢您的帮助,但是该代码对我不起作用。需要将操作添加到“ wp_loaded”以使其起作用(请参阅我的答案)
Snowball,

如果您需要is_page_template()在有条件重定向时进行建立,则效果很好。
无法无天

1

你也可以这样做

代替下面的行

wp_redirect(“ $ url”);

echo("<script>location.href = '".$url."'</script>");

要么

<?php <script><?php echo("location.href = '".$url."';");?></script>?>

肯定会解决您的问题。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.