【WordPress】記事一覧のループでログインユーザー以外にパスワード保護された投稿を非表示にする方法

WordPressを使用してブログやウェブサイトを運営していると、特定の投稿をパスワードで保護したい場合があります。しかし、すべての訪問者がこれらの保護された投稿を見る必要はありません。今回は、ログインしていないユーザーに対してパスワード保護された投稿を非表示にする方法をご紹介します。

functions.php ファイルにコードを追加

テーマの functions.php ファイルに以下のコードを追加します。

function exclude_protected_posts($query) {
    if (!is_admin() && $query->is_main_query()) {
        if (!is_user_logged_in()) {
            $query->set('has_password', false);
        }
    }
}
add_action('pre_get_posts', 'exclude_protected_posts');

このコードは、メインクエリが実行される前に特定の条件をチェックし、条件に応じてクエリをカスタマイズします。

  1. pre_get_posts アクションフックを使用:このフックは、メインクエリが実行される前に呼び出されます。
  2. 管理画面かどうかのチェック:is_admin() 関数を使用して、現在のページが管理画面かどうかをチェックします。管理画面でない場合にのみ次の条件を確認します。
  3. メインクエリかどうかのチェック:is_main_query() 関数を使用して、現在のクエリがメインクエリかどうかをチェックします。
  4. ユーザーがログインしているかどうかのチェック:is_user_logged_in() 関数を使用して、ユーザーがログインしているかどうかを確認します。ログインしていない場合、パスワード保護された投稿を除外するために has_password パラメータを false に設定します。

まとめ

このシンプルなコードを functions.php ファイルに追加することで、ログインしていないユーザーにはパスワード保護された投稿が表示されなくなります。これにより、訪問者に見せたい情報のみを効果的に管理することができます