问题描述

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

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

Warning: Cannot modify header information – headers already sent by (output started at /Applications/MAMP/htdocs/theme/wp-content/themes/test/header.php:10) in /Applications/MAMP/htdocs/theme/wp-includes/pluggable.php on line 1178

我知道以前已经输出了,这就是为什么它不工作,但我不知道如何使这项工作。

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

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

那么这两个函数都用在我想要显示注册表单的地方。

恐怕这不是最好的事情。我应该创造一些这样做的行动,但我不知道如何实现。我找到的大部分教程直接显示在同一页面上的结果,不需要额外的重定向。也许这就是为什么他们正在使用 functions.php 中的函数

最佳解决方案

找到答案 (via)

而不是使用该函数,我向”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;
    }
}
?>

次佳解决方案

您必须在 get_header()之前使用 wp_redirect(),否则不会显示标题错误。

第三种解决方案

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();//....
}
});

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。