【问题标题】:'wp_redirect' is not working'wp_redirect' 不起作用
【发布时间】:2013-11-04 09:54:53
【问题描述】:

有一个 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; ?>

它也不起作用。

【问题讨论】:

  • 试试wp_redirect( home_url() );而不是"/"
  • 不工作。使用此代码:goo.gl/U56vzt 1 è 2 显示。但重定向不起作用
  • 试试这个而不是 wp_redirect header( 'Location: http://www.google.com/' )
  • wp 可以阻止吗?或者在functions.php中写一些代码?

标签: wordpress redirect


【解决方案1】:

使用以下代码:-

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/

【讨论】:

    【解决方案2】:

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

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

    所以在此之前检查一下:

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

    没有字符输出。也不要忘记将exit; 放在wp_redirect 之后。

    【讨论】:

    • 请务必检查wp-content 下的debug.log,如果它声明如下:[11-Aug-2016 15:30:18 UTC] PHP Warning: Cannot modify header information - headers already sent by (output started at /srv/www/my_website/htdocs/wp-content/themes/FoundationPress/custom/templates/header-home.php:65) in /srv/www/my_website/htdocs/wp-includes/pluggable.php on line 1166
    • 我在重定向之前调用了 var_dump 和 echo。那是我的问题。如果没有您的评论,就不会找到它。
    【解决方案3】:

    请按照以下方式使用:

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

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

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

    【讨论】:

      【解决方案4】:

      尝试以下方法,这也会强制错误报告:

      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..

      【讨论】:

      • 警告:无法修改标头信息 - 标头已发送(输出开始于 /home/site/data/www/site.com/wp-content/themes/site/edit.php:49)在第 57 行的 /home/site/data/www/site.com/wp-content/themes/site/edit.php 中应该已经重定向了
      • now:警告:无法修改标头信息 - 第 58 行 /home/site/data/www/site.com/wp-content/themes/site/edit.php 中已发送的标头应该有现在重定向
      • 必须从第 50 行移动到第 60 行再到第 1 行到第 10 行! @Rincver
      • function ob_start() 我在header.php中插入
      • 不明白我要做什么?
      【解决方案5】:

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

      我注意到页面上唯一不同的是我在get_header()下方使用了wp_redirect,如果你在它上方使用它就可以正常工作。

      【讨论】:

        【解决方案6】:

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

        一些开发人员尝试使用ob_start(); 清除页面,但如果您的页面中有内容,即使您使用ob_start();,重定向也不起作用。

        然后只需尝试以下代码:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-10-21
          • 2015-09-30
          • 1970-01-01
          • 1970-01-01
          • 2016-10-21
          • 2018-04-16
          • 1970-01-01
          • 2017-05-07
          相关资源
          最近更新 更多