WordPressにプライベートエリアを作る


wordpressで一般公開コンテンツとは別にメンバーだけに記事を配信したい
といったご要望をいただいた。

記事をプライベート扱いにするのなら、wpの基本機能で行えるが、
カテゴリー、もしくは一定の括りの記事群に対しまとめてパスをかけるとなると
簡単にはいかない。

パスワードとなると真っ先に思いつくのはベーシック認証。
しかしwordpressでの記事やアーカイブ表示は見た目こそ
www.domain.com/archive/category/post.html
のようにすることはできても
あくまでrewrite機能による見た目だけの物であり実際のディレクトリ構造を持たないため、
htaccessによる部分的なベーシック認証による保護は使えない。

検索したところ[Allow Categories]というずばりな名前のプラグインもあるようだが、
かなり古いものであり、思い通りの動作にはならなかった…
というか全体にパスワードがかかったり
全くアクセスできなくなったりと使い方がよくわからなかった。

さらに探してみるとログインを促すauth_redirect();という関数があることがわかった。
これをheader.phpの最上部で
    if(!is_user_logged_in() &&[追加の表示条件]){
        auth_redirect();
    }
こんな感じで用いることで、特定のカテゴリーやカスタムポストタイプで
パスワードを用いることができた。

これならログインは一度で済むし、ベーシック認証と違いログアウトも可能。
ただ、テーマ自体に条件を書き込むのはちょっと気分が悪い。
これぐらいなら将来的にplugin化できるかもしれない。