ログインユーザだけに開示限定する方法

プラグインを利用する方法とfunctions.phpに追加する2つの方法がある。

(1)プラグインを利用する方法

  1. プラグイン「Members Only」をダウンロードし、解凍してpluginにフォルダーごとアップロードする。
  2. 管理画面のプラグインでMembers Onlyを有効にする。
  3. 管理画面の設定でMembers Onlyを次のように設定する。
  • Members Only?: チェックを入れる
  • Redirect To: 「Login Page」にする 未ログインユーザーに対して、アクセス直後に表示する先を指定します。 「Login Page」だとWordPressのログイン画面、「Specific Page」だとLogin Redirectで指定したページへリダイレクトします。
  • Return User: チェックを入れる
  • Redirection Page: ここの設定でハマって、挫折しそうになりました。
    入力欄を空欄にしておくと、ログイン画面へリダイレクトするよ、と書かれてあるようなのですが、なぜかうまくリダイレクトされませんでした。 ドメインの設定やWordPress標準のリダイレクト設定(管理画面→設定→一般)との絡みもあるのかもしれません。
    回避策として入力欄に「?」クエスチョンマークを入れると正常に作動しました。 「?」をワイルドカードとして見なしているようです。 もちろん、ある特定のページを設定して飛ばすこともできます。 その際、設定した任意のページは誰でも閲覧できる状態になるようです。
  • Login Redirect: 「Front Page」にする ログイン済みユーザーに対して、ログイン後に表示するページを指定します。 Front Pageだといわゆる「Home」、Dashboardはダッシュボードです。 今回の会員制サイトでは、会員登録者が記事を書いたりはしないので、Front Pageへ飛ばしています。

(2)functions.phpに追加する方法 次のコードをfunctions.phpの先頭に入れる。

function require_login() {
  if ( ! is_user_logged_in() && ! preg_match( '/^(wp-login\.php|async-upload\.php)/',
basename( $_SERVER['REQUEST_URI'] ) ) && ! ( defined( 'DOING_AJAX' ) && DOING_AJAX ) && ! ( defined( 'DOING_CRON' ) && DOING_CRON ) ) {
  auth_redirect();
}
}
add_action( 'init', 'require_login' );