ワードプレスの検索機能は標準で搭載され、テーマや、ウィジェットでサイトに実装されているサイト様は多いかと存じます。
こちらの検索結果から特定の投稿ページ、カテゴリー、タグ、著者が表示されないようにする(引っかからないようにする)方法を解説いたします。


ワードプレスの検索結果から特定の投稿ページを排除する

ワードプレスの管理画面>外観>テーマの編集を選択し、右メニューからfunctions.phpを選択されたうえで最下部に下記のように記載されてください。

function wp_search_filter1( $query ) {
    if ( $query->is_search && !is_admin() ){
        $query->set( 'post__not_in', array( 1,2,3,4 ) );
    }
    return $query;
}
add_action( 'pre_get_posts', 'wp_search_filter1' );

このコードは、検索結果を作成する直前に、投稿のIDが1,2,3,4の四つの投稿は検索結果に含まないという処理を追加するものです。
もし、一つだけの投稿を検索結果に出したくない場合はarray( 1,2,3,4 )をarray( 1 )のように変えてください。
排除する投稿のIDは下記の手順で調べることができます。

1管理画面>投稿>投稿一覧 を表示します。
2調べたい投稿の編集画面へと移動するとURLが下記のようなものに変わります

http://ワードプレスのURL/wp-admin/post.php?post=4825&action=edit

この投稿のIDは4825となります。

ワードプレスの検索結果から特定のカテゴリーを排除する

特定のカテゴリーを検索結果に表示されないようにするには、上記と同じようにfunctions.phpに下記のように追記します。

function wp_search_filter2( $query ) {
    if ( $query->is_search && !is_admin() ){
        $query->set( 'cat','-1, -2, -3' );
    }
    return $query;
}
add_filter( 'pre_get_posts', 'wp_search_filter2' );

このコードは、カテゴリーID1,2,3の三種類のカテゴリーを検索結果から除外します。カテゴリーIDは各カテゴリーの編集画面のURLから調べることができます。

http://ワードプレスのURLwp-admin/term.php?taxonomy=category&tag_ID=21&post_type=post&wp_http_referer=%2Fblog%2Fwp-admin%2Fedit-tags.php%3Ftaxonomy%3Dcategory

tag_ID=21の部分の21がカテゴリーIDとなります。

ワードプレスの検索結果から特定のタグを排除する

同様に特定のタグを含む投稿のみを検索結果から除外する場合は下記のように記載します。

function wp_search_filter3( $query ) {
    if ( $query->is_search && !is_admin() ){
        $query->set( 'tag','-1, -2, -3' );
    }
    return $query;
}
add_filter( 'pre_get_posts', 'wp_search_filter3' );

このコードは、タグID1,2,3の三種類のタグを含む投稿を検索結果から除外します。

ワードプレスの検索結果から特定の著者を排除する

同様に特定のユーザーが作成した投稿のみを検索結果から除外する場合は下記のように記載します。

function wp_search_filter4( $query ) {
    if ( $query->is_search && !is_admin() ){
        $query->set( 'author','-1, -2, -3' );
    }
    return $query;
}
add_filter( 'pre_get_posts', 'wp_search_filter4' );

このコードは、ユーザーID1,2,3の3人が作成した投稿を検索結果から除外します。

ワードプレスの検索結果からページを全て排除する

最後の検索結果からすべての固定ページのみを除外する方法をお伝えします。下記のようにfunctions.phpに追記します。

function wp_search_filter5( $query ) {
    if ( $query->is_search && !is_admin() ){
        $query->set('post_type', 'post');
    }
    return $query;
}
add_filter( 'pre_get_posts', 'wp_search_filter5' );

WordPress のテンプレート作成、カスタマイズのご相談・ご依頼はWPドクターまでご遠慮なくお送りくださいませ