
パスワード保護機能を使ってみた…
サイト内検索で表示されない…
WordPressにはサイト内検索機能がありますが、標準仕様でサイトにログインした状態でなければパスワード保護を設定した投稿は検索結果に表示されません。
本記事ではパスワード保護した投稿をサイト内検索結果に含めるカスタマイズ方法を紹介します。WordPress標準の関数を使ったカスタマイズです。
目次
パスワード保護した投稿を検索結果に表示するコード

さっそくコードを紹介します。
function show_protected_posts_in_search_tanak( $search ) {
global $wpdb;
if ( is_user_logged_in() ) {
return $search;
}
return str_replace( " AND ({$wpdb->prefix}posts.post_password = '')", '', $search );
}
add_filter( 'posts_search', 'show_protected_posts_in_search_tanak' );
子テーマのfunctions.php、またはCode Snippetsプラグインなどのスニペット管理系のプラグインにコードを設置しましょう。
作業は以上で終了です。ログインしていない環境でサイト内検索をしてみてください。
カスタマイズ内容について
WordPressのposts_search関数を使ったカスタマイズです。
通常WordPress の検索ではパスワード保護された投稿(post_password が設定されている投稿)を除外します。今回紹介したコードを使うと、未ログインのユーザーでもパスワード保護投稿が検索結果に表示されるようになります。(ただし、投稿を開くとパスワード入力が求められる状態は変わりません)。
ログインユーザーへの挙動は変更しない
標準でログインユーザーにはパスワード保護した投稿が表示されるので、is_user_logged_in()関数で識別しログイン時には何も変更せずそのままreturnを返します↓
if ( is_user_logged_in() ) {
return $search;
}
パスワード保護投稿のフィルターを削除
ログインしていないユーザー向けのコードです。
WordPressのデフォルトの検索 SQL には、パスワード保護された投稿を除外するフィルター が含まれているので変更します↓
return str_replace( " AND ({$wpdb->prefix}posts.post_password = '')", '', $search );
検索フィルターを変更
最後にposts_search関数で検索フィルターを変更↓
add_filter( 'posts_search', 'show_protected_posts_in_search_tanak' );