WordPressでパスワード保護した記事を一覧から非表示にする

WordPress

WordPressには限定公開機能がない。パスワード保護することで、パスワードを知らない人は見れなくなるので実現できるのだが、限定公開の記事も一覧に表示されてしまう。

このイケてない仕様を修正する。

functions.phpを編集

WordPressのダッシュボードから「外観 -> テーマファイルエディター」を選択する。

画面右側で編集するファイルを選択できるので、「functions.php」を選択する。

functions.php に以下のコードを追記する。コピペでOK

function exclude_protected_posts($query) {
    if (!is_single() && !is_admin()) {
        $query->set('has_password', false);
    }
    return $query;
}
add_filter('pre_get_posts', 'exclude_protected_posts');

コード解説

ある程度プログラミングの知識があって、何をしてるか知りたい人向け。とりあえずパスワード保護された記事が表示され無くなれば良いわ!って人は見なくてOK。

  1. exclude_protected_postsという名前の関数を定義している。この関数は、パラメータとして$queryオブジェクトを受け取る。$queryオブジェクトはWordPressの投稿データを取得するオブジェクトで、フィルタリングとかページネーションを行う時はコレを使う。
  2. is_single関数を使って、記事のページではないことを確認する。また、is_admin関数を使って、閲覧しているユーザーが管理者ではないことを確認する。
  3. $query->set('has_password', false);というコードで、queryオブジェクトに対してクエリパラメータを設定する。has_passwordがfalseのもの、つまりパスワード保護されていないものを取得する。
  4. add_filter('pre_get_posts', 'exclude_protected_posts');で、pre_get_postsフィルタにexclude_protected_posts関数を追加する。これにより、WordPressが投稿を取得する前に、この関数が実行されるようになる。

タイトルとURLをコピーしました