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

PHP リダイレクトは、HTML (または何か) が出力される前に呼び出す必要があります。つまり、適切と思われるページの途中でそれらを使用することはできません。

つまり、PHP ファイルのどこかに、リダイレクトを不可能にするスペースが 1 つある可能性があり、それを見つけるのが難しい場合があります。

または、この時点で Javascript リダイレクトを行うこともできます。

PHP ドキュメント ( http://php.net/manual/en/function.header.php ) から:

実際の出力が送信される前に、通常の HTML タグ、ファイル内の空白行、または PHP から header() を呼び出す必要があることに注意してください。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 に答える