有一个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; ?>
它也不起作用。
答案 0 :(得分:7)
使用以下代码: -
function app_output_buffer() {
ob_start();
} // soi_output_buffer
add_action('init', 'app_output_buffer');
或者添加 ob_start()作为你自己的函数的第一行,它挂钩到'init'
不要忘记添加
exit();
之后立即
wp_redirect($url);
链接:
答案 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;