'wp_redirect'无效

时间:2013-10-25 10:19:24

标签: wordpress redirect

有一个HTML表单输入。这是代码:

<?php if(isset($_POST['login'])) { 
    wp_redirect("/"); 
}

<form accept-charset="UTF-8" method="post" >
    ...
    <center><input name="login" type="submit" value="вход" />
</form>

但重定向不起作用。安装调试插件重定向到wp,这就是它所显示的内容。

http://i.stack.imgur.com/Im4eE.png

PS:

<?php wp_redirect( 'http://www.example.com', 301 ); exit; ?>

它也不起作用。

6 个答案:

答案 0 :(得分:7)

使用以下代码: -

function app_output_buffer() {
    ob_start();
} // soi_output_buffer
add_action('init', 'app_output_buffer');

或者添加     ob_start()作为你自己的函数的第一行,它挂钩到'init'

不要忘记添加

exit();

之后立即

wp_redirect($url);

链接:

https://tommcfarlin.com/wp_redirect-headers-already-sent/

答案 1 :(得分:6)

我认为您的代码不是以if条件开头的!

wp_redirect会发送一个标题,因此在它之前打印/回显一些内容会导致失败。

所以在此之前检查并查看:

if(isset($_POST['login'])) 
{
    wp_redirect("/");
    exit;
}

没有出现任何角色。另外,请不要忘记在exit;之后放置wp_redirect

答案 2 :(得分:1)

按照以下方式使用:

ob_clean();
$url = get_home_url() . '/login';
wp_redirect($url);
exit();

或者您也可以使用Javascript进行重定向。

<script>window.location='http://www.google.com'</script>

答案 3 :(得分:0)

尝试以下操作,这也会强制错误报告:

error_reporting(E_ALL | E_WARNING | E_NOTICE);
ini_set('display_errors', TRUE);


flush();
header("Location: http://www.website.com/");
die('should have redirected by now');

来自PHP header redirect not working

编辑:

由于它会向您发出headers already sent警告,请尝试在代码的开头处添加以下内容:

ob_start();

  

长期的答案是PHP脚本的所有输出都应该   在变量中缓冲。这包括标题和正文输出。然后   在脚本的末尾执行您需要的任何输出。

     

您的问题的最快速解决方法是添加ob_start();作为   如果你只需要在这个脚本中,那么你脚本中的第一件事就是它   脚本。如果您需要在所有脚本中将其添加为第一个脚本   你的header.php文件中的东西。

     

这将打开PHP的输出缓冲功能。在PHP中输出时   某事(做回声或打印),如果必须发送HTTP标头   那时。如果打开输出缓冲,则可以输出   脚本,但PHP不必发送标头,直到缓冲区   酡。如果你打开它,不要把它关掉PHP会   脚本完成后自动刷新缓冲区中的所有内容   运行。几乎所有人都将它打开并没有什么害处   在一些情况下,可能会给你一点小的性能提升   构...

来自Warning: Cannot modify header information - headers already sent..

答案 4 :(得分:0)

我遇到了同样的问题,这些解决方案都不适合我。

我在页面上注意到的唯一不同之处是我在wp_redirect下面使用了get_header(),如果在上面使用它会很好用。

答案 5 :(得分:0)

确保您没有:get_header();或任何可能在模板中创建诸如页眉和页脚之类内容的wordpress函数。否则重定向将不起作用。

某些开发人员尝试使用ob_start();来清除页面,但是即使页面中包含内容,即使您使用ob_start();,重定向也无法正常工作。

然后只需尝试以下代码:

wp_redirect(get_permalink($post->ID));
exit;