【WordPress】ページや権限によってアクセス制限をかける

【WordPress】ページや権限によってアクセス制限をかける

みなさんこんにちは、yamashitaです。

今回はWordPressでログインの有無やユーザー権限によってアクセスできるページを設定する方法を紹介します。

これにより、クローズドな情報などを掲載することができます。 パスワード保護もありますが、複数ページを同時にアクセス制限する場合などに使えます。

ログインしていない場合はどのページも見られない

// アクセスされてるURLを取得
$url                = $_SERVER['REQUEST_URI'];
$parseUrlArray      = parse_url($url);

// ログインページのURLを取得
$parseLoginUrlArray = parse_url(wp_login_url());

// ログインページの一致していない且つ、ログインしていない
if ((strpos($parseUrlArray['path'], $parseLoginUrlArray['path']) === false) && ! is_user_logged_in()) {
        $redirectPath = wp_login_url();
        wp_redirect($redirectPath);
        exit();
}

ログインなしで一部のページだけアクセス可能

// アクセスされてるURLを取得
$url                = $_SERVER['REQUEST_URI'];
$parseUrlArray      = parse_url($url);

// ログインページのURLを取得
$parseLoginUrlArray = parse_url(wp_login_url());
// 誰でもアクセスできる
$allowUrlList       = [
    "/daredemo-1/",
    "/daredemo-2/",
    "/daredemo-3/",
    "/daredemo-4/",
];
$isAllowUrl         = false;
foreach ($allowUrlList as $allowSlug) {
    if ($parseUrlArray['path'] === $allowSlug) {
        $isAllowUrl = true;
        break;
    }
}
// 許可URLならログインチェックしない
if (!$isAllowUrl) {
    // ログインページの一致していない且つ、ログインしていない
    if ((strpos($parseUrlArray['path'], $parseLoginUrlArray['path']) === false) && ! is_user_logged_in()) {
        $redirectPath = wp_login_url();
        wp_redirect($redirectPath);
        exit();
    }
}

補足

$_SERVER['REQUEST_URI']を使うほかにglobal $postでアクセスされたページを取得してget_page_by_path()などで許可するページを取得、双方を比較して判定する方法もあります。

管理画面を特定の権限ユーザー以外見せたくない場合

あまり使う機会は無いかもしれませんが、今回の処理でユーザー登録だけ必要とする場合など

function redirect_front_page()
{
    // 管理者と編集者以外はトップにリダイレクト
    if ( ! (current_user_can('administrator') || current_user_can('editor'))) {
        $redirectPath = "/";
        wp_safe_redirect($redirectPath);
        exit();
    }
}

add_action('admin_init', 'redirect_front_page');
  • このエントリーをはてなブックマークに追加

この記事を読んだ人にオススメ