“无法修改标题信息”意味着我不能使用wp_reDirect

时间:2018-09-23 作者:ellen

我在一个网站上工作,新用户希望在继续之前同意阅读我们的网站政策。新用户登录后,将重定向到策略页面。要继续阅读该网站,他们需要勾选“我同意”框。

我的问题是,用户不再被定向到策略页面,重定向失败。这是我收到的错误消息:

PHP Warning:  Cannot modify header information - headers already sent by (output started at /var/www/html/wp-includes/class.wp-styles.php:225) in /var/www/html/wp-includes/pluggable.php on line 1226
PHP Stack trace:
PHP   1. {main}() /var/www/html/index.php:0
PHP   2. require() /var/www/html/index.php:17
PHP   3. require_once() /var/www/html/wp-blog-header.php:19
PHP   4. include() /var/www/html/wp-includes/template-loader.php:74
PHP   5. policy_redirect() /var/www/html/wp-content/themes/mytheme/landing-page.php:68
PHP   6. wp_redirect() /var/www/html/wp-content/themes/mytheme/functions.php:691
PHP   7. header() /var/www/html/wp-includes/pluggable.php:1226
我不确定我的代码的哪些部分与这里的帖子相关,我还没有涉及到类。wp样式。php或可插拔。php。

下面是函数中的重定向函数。php:

function policy_agreement_redirect(){
    $url = get_site_url() . "/policy-agreement/";
    wp_redirect($url); //THIS IS LINE 691 WHERE THINGS BREAK
    exit;
}
我网站上的每个页面都包含一些重定向用户的内容,以防他们试图转到某个页面,但尚未同意该策略。例如,下面是登录页的相关部分。php看起来像:

 <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
      <div id="post-<?php the_ID(); ?>">
          <div class="entry-content entry">
              <?php the_content(); ?>
              <?php if ( !is_user_logged_in() ) : ?>
                      <?php
                        $url = get_site_url() . "/login/";
                        wp_redirect($url);
                        exit;
                      ?>
                      <p class="warning">
                          <?php _e(\'You must be logged in to see the team details.\', \'profile\'); ?>
                      </p>
                    <?php endif; ?>
                    <?php if( !check_policy_agreement() ): ?>
                      <?php policy_agreement_redirect(); ?>
                <?php else : ?>
                <?php if ( count($error) > 0 ) echo \'<p class="error">\' . implode("<br />", $error) . \'</p>\'; ?>
               <!-- THE REST OF THE BLOG -->
关于是什么导致了这个错误以及我应该尝试什么,有什么想法吗?非常感谢您的帮助。非常感谢。

1 个回复
最合适的回答,由SO网友:Gray 整理而成

Milo 如上所述,在PHP开始发送请求-响应正文之后,您不能发送标头信息。

重定向属于连接到的函数wp_loaded 以确保它们在生成请求正文之前运行。

在您的functions.php 文件:

function hook_wp_loaded_require_login() {
    $uri = ( isset( $_SERVER[\'REQUEST_URI\'] ) )
        ? $_SERVER[\'REQUEST_URI\']
        : null;

    if (
        $uri &&
        $uri !== \'/login/\' &&
        $uri !== \'/policy-agreement/\' &&
        ! is_user_logged_in()
    ) {
        $url = get_site_url() . "/login/";
        wp_redirect($url);
        exit;
    }
}
add_action( \'wp_loaded\', \'hook_wp_loaded_require_login\' );
Note: 如果使用这种方法,用户将永远看不到You must be logged in to see the team details. 错误消息,您还需要跟进policy_agreement_redirect() 呼叫

结束

相关推荐

从WP_Theme对象获取Headers属性

使用wp_get_theme 返回包含当前主题属性的对象。这个headers 属性包含我要访问的任何信息数组。我可以使用普通符号访问其他属性wp_get_theme()->theme_root 当我尝试时wp_get_theme()->headers 我明白了NULL如何访问headers 所有物下面是一个var_dump 属于wp_get_theme()object(WP_Theme)#381 (11) { [\"theme_root\":\"WP_Theme