3

好的,这是一个难题:众所周知,Wordpress 有一个重定向功能,看起来像这样:

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

所以我要做的是一个可以应用于特定安全页面的页面模板,这样当没有登录的个人尝试访问这些页面时,他们会被重定向到 wp-login 页面。很简单,对吧?没那么多。这是我的代码:

<?php
if ( is_user_logged_in() ) {
echo 'Welcome, registered user!';
} else {
wp_redirect( 'http://www.visionarywomanhood.com/qcgroup/wp-login.php', 301 ); exit;
}
?> 

“回声”部分只是为了确保代码正常工作;果然,当我登录后加载页面时,页面一角是“欢迎,注册用户!”。

当我没有登录时,问题就来了。我得到的只是一个白屏;没有重定向。奇怪的是当我输入时:

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

...在页面顶部,重定向就像一个魅力。到底有什么区别,我应该怎么做才能使这项工作?

4

2 回答 2

3

这可能是因为已经发送了页眉。

改用这个(放在你的functions.php):

function auth_check(){
    if ( !is_user_logged_in() && is_page_template('your_template_name.php')) {
        wp_redirect( 'http://www.visionarywomanhood.com/qcgroup/wp-login.php', 301 ); exit;
    }
}
add_action('init', 'auth_check');

它只会在用户未登录并使用您的模板访问页面时执行。

如果这不是一个选项,请使用:

if ( is_user_logged_in() ) {
    echo 'Welcome, registered user!';
} else {
   echo "<script>window.location.href = 'http://www.visionarywomanhood.com/qcgroup/wp-login.php';</script>";
   exit();
}
于 2013-06-28T18:07:25.680 回答
2

必须在输出任何 HTML(或任何内容)之前调用 PHP 重定向。这意味着,您不能在您认为合适的时候在页面中间使用它们。

这意味着您可以在 PHP 文件的某处有一个空格,这将使您无法重定向,并且可能很难找到它。

或者,此时您可以执行 Javascript 重定向。

从 PHP 文档(http://php.net/manual/en/function.header.php):

请记住,必须在发送任何实际输出之前调用 header(),无论是通过普通 HTML 标记、文件中的空白行还是从 PHP 发送。使用 include 或 require 函数或其他文件访问函数读取代码并在调用 header() 之前输出空格或空行是一个非常常见的错误。使用单个 PHP/HTML 文件时也存在同样的问题。

此外,这是一个如何使用 Javascript 重定向的示例:

<script>window.location.href = 'http://www.visionarywomanhood.com/qcgroup/wp-login.php';</script>"

请注意,它不适用于所有用户,因为其中一些用户可能禁用了 Javascript。

于 2013-06-28T18:06:05.937 回答