auth_redirect


英語版Codexを参考に auth_redirect 関数についてみていきます。

Description / 説明

auth_redirect() is a simple function that requires that the user be logged in before they can access a page.

[訳]
auth_redirect() は、ページにアクセスする前にユーザにログインさせるだけの単純な関数です。

Default Usage / 典型的な利用法
<?php auth_redirect() ?>

When this code is called from a page, it checks to see if the user viewing the page is logged in. If the user is not logged in, they are redirected to the login page. The user is redirected in such a way that, upon logging in, they will be sent directly to the page they were originally trying to access.

[訳]
ページからこのコードが呼ばれると、そのページをみているユーザがログインしているかどうかチェックします。ユーザがログインしていなければ、ログインページにリダイレクトします。ログインするとユーザが最初にアクセスしようとしたページに直接遷移するようにリダイレクト処理が走ります。

Parameters / パラメータ

This function accepts no parameters.

[訳]
この関数はパラメートを受け取りません。

Related / 関連

is_user_logged_in(), wp_redirect()

使ってみる

動作を実際試して確認したいので、WordPress 3.2 からデフォルトテーマであるtwentyelevenのsingle.phpの一番上にauth_redirect関数を挿入してみました。これで単一記事はログインしないとみれないはずです。

<?php
auth_redirect();
/**
 * The Template for displaying all single posts.
 *
 * @package WordPress
 * @subpackage Twenty_Eleven
 * @since Twenty Eleven 1.0
 */

get_header(); ?>

  • ①:「http://localhost/multi_wp/sub1/?p=1」にアクセスしようとしましたが、単一投稿ページにはauth_redirect関数が挿入されているのでログインしないとログインページに飛ばされます。
  • ②:①から自動的にリダイレクトされてログインページが表示されます。
    URLをみると「http://localhost/multi_wp/sub1/wp-login.php?redirect_to=http%3A%2F%2Flocalhost%2Fmulti_wp%2Fsub1%2F2011%2F12%2F24%2Fhello-world%2F&reauth=1」となっています。
    ①→②へはGETメソッドにより本来アクセスしようとしたURLをパラメータとして渡しています。
  • ③:ログインしたら本来は管理パネルが表示されます。しかしauth_redirect関数によりログイン画面にリダイレクトされログインした場合、ログイン後に本来のページにさらにリダイレクトされます。
    ②のログイン画面のソースをみると
    <input type=”hidden” name=”redirect_to” value=”http://localhost/multi_wp/sub1/?p=1″ />
    のようなhiddenタグがありました。
    ②→③へはPOSTメソッドで本来アクセスしようとしたURLをパラメータとして渡しています。ログイン処理後、受け取ったパラメータを元にして本来のページにリダイレクトします。
【注意】

何も考えずにfunction.phpに直接書いたら大変なことが起こりました!

function.phpは、管理パネルの処理も含め全てのページで読み込まれ、さらに処理の早い段階に読まれるんだよね。当然ログイン処理よりも前に。そんなfunction.phpにリダイレクト処理をするauth_redirect関数を直接記述すると、リダイレクト→リダイレクト→リダイレクトの無限ループになるのは当然!冷静に考えれば当たり前でした。
function.phpにauth_redirect関数を記述するときは細かい条件を付けるなど注意を!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です