我已经咨询过了this post 和this 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
正在工作,并且没有直接向用户显示错误?
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();
}
}
}
}