WordPressで未ログイン時にログインページへリダイレクトする方法

WordPressのサイトを特定のユーザーだけが利用できるようにする場合、
未ログインのユーザーをログインページへ自動リダイレクトする設定が必要です。
本記事では、WordPressで未ログインユーザーをログインページへリダイレクトする方法を3つ紹介します。

functions.php を使ってリダイレクトする方法

WordPressの functions.php に以下のコードを追加することで、
未ログイン時に /login/ へリダイレクトできます。

コード

function redirect_to_login_if_not_authenticated() {
    if (!is_user_authenticated() && !is_page('login')) {
        wp_redirect(site_url('/login/'));
        exit;
    }
}
add_action('template_redirect', 'redirect_to_login_if_not_authenticated');

コードのポイント

is_user_authenticated() でユーザーがログインしているかを判定
未ログインなら /login/ にリダイレクト
is_page('login') でログインページ自体はリダイレクトしない(無限ループ防止)

この方法を使用すると、未ログインのユーザーはサイトの
どのページにアクセスしても /login/ にリダイレクトされます。

index.php を編集してトップページのみリダイレクトする方法

サイト全体ではなく、トップページ(ホームページ)のみをリダイレクトしたい場合は、
index.php に以下のコードを追加します。

コード

<?php
session_start();
if (!is_user_authenticated()) {
    wp_redirect(site_url('/login/'));
    exit;
}
?>

動作

✅ トップページ(index.php)を開くと未ログインなら /login/ にリダイレクト
✅ 他のページには影響なし

トップページのみを会員制にしたい場合に適した方法です。

.htaccess を使ってサーバー側でリダイレクトする方法

サーバー側の .htaccess にリダイレクト設定を追加することで、
未ログイン時に /login/ へリダイレクトできます。

コード

RewriteEngine on
RewriteCond %{REQUEST_URI} !^/login/ [NC]
RewriteCond %{REQUEST_URI} !^/wp-login.php [NC]
RewriteCond %{HTTP_COOKIE} !^.*wordpress_logged_in.*$ [NC]
RewriteRule ^(.*)$ /login/ [R=302,L]

コードのポイント

ログインしていないユーザーのみ /login/ にリダイレクト
WordPress標準のログインページ (wp-login.php) には影響なし
✅ サーバー側で処理するためWordPressに負荷をかけずにリダイレクト

この方法はサーバー側で処理するため、WordPressのコードを変更したくない場合に便利です。

どの方法を使うべき?

方法適用範囲適用ページ
functions.php に追加サイト全体ログインページ以外すべて
index.php に追加トップページのみトップページのみリダイレクト
.htaccess を使用サーバー全体WordPress全体に適用

サイト全体をログイン必須にするなら functions.php.htaccess を使用
トップページのみ制限したいなら index.php を編集
サーバー側で制御したいなら .htaccess を編集

まとめ

WordPressで未ログイン時にログインページへリダイレクトする方法を紹介しました。用途に応じて適切な方法を選びましょう。

サイト全体を会員制にするならfunctions.php にリダイレクト処理を追加
トップページのみリダイレクトするならindex.php にリダイレクト処理を追加
WordPressに負荷をかけずに処理したいなら.htaccess を編集

これで、未ログインユーザーのアクセスを制限し、ログインページへ誘導できるようになります。
ぜひ試してみてください!