WordPressで特定の記事をサイト内検索から除外する方法【functions.php】

ヨッチヨッチ

こんにちは。代表のヨッチです。
ミライヨッチにお越しいただき、ありがとうございます。

WordPressでは、ウィジェットのサイト内検索から記事・固定ページを探すことができます。
ただ、検索で表示したくないページも中にはありますよね。

そんなときは、functions.phpを編集すればサイト内検索から除外することができます。
テンプレートのコードをそのまま入力すれば、たった1分で編集可能です。

というわけで、どうやってサイト内検索から記事を除外するのか?
ここから詳しく解説していきます!

WordPressで特定の記事をサイト内検索から除外する方法

先ほどお伝えしたとおり、このカスタマイズではfunctions.phpを編集します。

あまり慣れていないようであれば、ファイルをバックアップしておくと安心です。

準備ができたら、functions.phpを開きましょう!

「テーマのための関数(functions.php)」をクリック

この画面ですね。
ソースコードが表示されたら、一番下の行にコードを入力します。

一番下の行に追記して「ファイルを更新」をクリック

入力するコードのサンプルはこちらです。

// サイト内検索から記事を除外
function search_pre_get_posts( $query ) {
if ( $query->is_search && !is_admin() ){
$query->set( 'post__not_in', array(1,61) );// 投稿IDを入力
}
return $query;
}
add_action( 'pre_get_posts', 'search_pre_get_posts' );

このコードで編集が必要なのは、4行目の数字です。
ここに投稿IDを入力することで、該当する記事がサイト内検索から除外されます。

つまり、このサンプルコードでは投稿ID 1,61の記事が除外されます。
複数のIDを指定するときは、半角カンマで区切ります。

WordPressでは、デフォルトのサンプル記事として「Hello World」が用意されています。
その記事の投稿IDが「1」です。

なので「Hello World」が残っているなら、投稿ID 1を指定すれば検索結果に出なくなります。

【まとめ】コード入力するだけで簡単に検索から除外できる

サイト内検索から除外するのって、なんだか複雑そうに感じていたかもしれません。
しかし実のところ、functions.phpにコードを入力するだけでOKです。

しかもコードを自作しなくても、ここで紹介したサンプルを使うだけです。
コード内の投稿IDさえ編集すれば、どの記事でも、何記事でも除外できます。

// サイト内検索から記事を除外
function search_pre_get_posts( $query ) {
if ( $query->is_search && !is_admin() ){
$query->set( 'post__not_in', array(1,61) );// 投稿IDを入力
}
return $query;
}
add_action( 'pre_get_posts', 'search_pre_get_posts' );

こういった簡単なカスタマイズであれば、プラグインよりもfunctions.phpのほうが便利です。
というのも、サイト内の処理速度に影響を与えることが少ないからです。

プラグインの場合は、大なり小なり処理速度が遅くなる可能性があります。
なので、functions.phpも併用することで速度低下を防ぐことができるでしょう。

編集する準備をしっかり整えてから、コードを追記してカスタマイズしてみませんか?