WordPress 特定のページをサイト内検索にあげない、設定とまとめ
ワードプレスで指定したページをサイト内検索から除外する方法
ウェブサイトを見ていて、調べたい特定のワードを入力して、サイト内で調べることあると思います。そんな時サイト内検索を使いますよね。
講師と生徒を繋ぐ「習い事のマッチングサイト」
ココデジタル教室
ココフラッペ洋裁教室
を運営しているのですが、ある悩み事が。
配信しているページは、レッスンを希望して先生を探しにきた人(未来の生徒さん)に、全てに見られていいわけではありません。
先生専用に配信するため作っているページが複数あり、それは訪問客が見る必要がありません。
no-index指定で Google などの検索エンジンには引っ掛かりませんが、サイト内検索でばっちり出てきてしまいます。今回はサイト内検索に出てこないよう除外設定の備忘録です。
1、子テーマの確認
WordPress子テーマフォルダ内の「functions.php」ファイルに書き加えます。
*書き換える前にバックアップを取って下さい
もし子テーマ設定がまだの場合は↓こちら参照
『で、結局WordPressってなんなんだ?!「子テーマ作成」中級編』
2、functions.php に新たに記載する
特定の記事の指定は、3つのパーターンで検索から除外できます。
1、IDで特定のページを除外、省く
投稿ページ、固定ページ、すべての記事にはIDがあります。
記事を書いている編集ページのURLを見ると、IDが確認できます。
「https://cocofrappe.com/wp-admin/post.php?post=12375&actio〜」のpost=の横の数字部分が個別IDです。
例えばこのページの ID は 12375 ですので、12345 と複数同時に除外指定してみます。
(12375,12345) の部分です。
//サイト内検索から特定のページを省く処理
function keyword_site_search_exclude_content( $query ) {
if ( $query->is_search && !is_admin() ){
$query->set( 'post__not_in', array(12375,12345) );
}
return $query;
}
add_action( 'pre_get_posts', 'keyword_site_search_exclude_content' );
2、IDで特定のカテゴリーの投稿を除外、省く
カテゴリーが複数あるサイトの場合はカテゴリーごと指定できます。
各カテゴリーにもIDが配布されていますので、ID番号を入れる
(ID,ID,ID) IDのところにID番号を入れます
↓ では array(1,2,3,4) の部分です
function search_pre_get_posts( $query ) {
if ( $query->is_search && !is_admin() ){
$query->set('category__not_in', array(1,2,3,4) );
}
return $query;
}
add_action( 'pre_get_posts', 'search_pre_get_posts' );
3、固定ページ全てを除外、省く
固定ページはメニューにもバッチリ入っているのはずなので、検索から外すなんていうこともあります。
function mycus_search_filter_post_only_func( $query ) {
if ( $query->is_search() && $query->is_main_query() && ! $query->is_admin() ) {
$query->set( 'post_type', 'post' );
}
return $query;
}
add_filter( 'pre_get_posts', 'mycus_search_filter_post_only_func' );