无法修改标头信息-标头已发送(unctions.php中的wp_reDirect)

时间:2018-05-18 作者:Rogério Dec

我已经咨询过了this postthis post 但没有找到解决方案。

我需要根据其$post->post_type 据我所知,我可以在template_redirect

所以我有下面的代码functions.php (阿斯特拉儿童主题):

add_action(\'template_redirect\', \'redir_sorteio\'); 

function redir_sorteio() {
    global $post;
    if ($post->post_type == \'sorteio\') 
        wp_redirect(\'/edicao/?id=\' . $post->ID);
}

And it works perfectly.

但由于某些原因,日志中出现了错误,如:

[18-May-2018 01:11:22 UTC] PHP Warning:  Cannot modify header information - headers already sent by (output started at /home/rogeriod/public_html/wordpress/sortemania/wp-content/themes/astra-child/functions.php:32) in /home/rogeriod/public_html/wordpress/sortemania/wp-includes/functions.php on line 1311
其中函数的第32行。php(如上)是wp_redirect(\'/edicao/?id=\' . $post->ID) 和wordpress函数的第1311行。php是header 内部命令do_robots功能:

function do_robots() {
    header( \'Content-Type: text/plain; charset=utf-8\' );
我如何找出原因并解决它,因为wp_redirect 正在工作,并且没有直接向用户显示错误?

2 个回复
SO网友:Akshat

尝试用wp\\u safe\\u redirect替换wp\\u redirect,如果文件末尾有php关闭标记“?>”,请删除它们,至少可以检查标题。php for php结束标记。

SO网友:Rogério Dec

实际上,答案是wp_safe_redirect 并将exit(); 最后,部分解决了问题,这是一个仅在template_redirect, 因为在其他地方,问题仍然存在。

这成了一场噩梦,我意识到这也是许多人的噩梦,直到我在一篇帖子中找到了一个高效但非正统的解决方案:javascript.

因此,在多次尝试和错误之后,我得到了如下稳定的代码:

add_action(\'template_redirect\', \'redireciona_sorteio\'); 

function redireciona_sorteio() {
    global $post;
    if (isset($post->post_type)) {
        if ($post->post_type == \'sorteio\') {
            if (!$post->ID) {
                echo \'<script> location.replace("/"); </script>\';
            }
            else {
                wp_safe_redirect(\'/edicao/?id=\' . $post->ID);
                exit();
            }
        }
    }
}

结束

相关推荐

Functions.php中的字符串转换不起作用

我在中使用了以下代码functions.php 要翻译一些文本:add_filter(\'gettext\', \'aad_translate_words_array\'); add_filter(\'ngettext\', \'aad_translate_words_array\'); function aad_translate_words_array( $translated ) { $words = array( // \'word to