この記事は最後に更新してから1年以上経過しています。

6.2に追加されるsearch_columnsパラメータが便利

説明

バージョン6.2では記事検索機能を備えたWP_Queryクラスにsearch_columnsパラメータが追加される。標準のキーワード検索では、タイトル(post_title)、本文(post_content)、抜粋(post_excerpt)が対象になっているが、search_columnsパラメータを使うと対象を絞り込めるようになる。

search_columnsパラメータ

まずはsearch_columnsパラメータの仕様を確認。Docコメントには次のように記述されており、'post_title'、'post_excerpt'、'post_content'の組み合わせを配列で指定できるようだ。

Array of column names to be searched. Accepts 'post_title',
'post_excerpt' and 'post_content'. Default empty array.

search_columnsパラメータの効果を確認するため、タイトルに「world」が含まれる投稿とは別に、本文に「world」を含めた投稿を追加する。まずはこれで「world」が含まれる投稿を検索してみる。

$query = new WP_Query( ['s'=>'world'] );
if ( is_array( $query->posts ) ) {
	foreach ( $query->posts as $post ) {
		printf( '%d: %s<br />', $post->ID, esc_html( $post->post_title ) );
	}
}

上記のコードの実行結果は次の通りで2つの投稿が検索された。

1: Hello world!
1030: 本文に〇〇!

今度はsearch_columnsパラメータに'post_title'のみの配列を追加してみる。

$query = new WP_Query( [
	's'              => 'world',
	'search_columns' => ['post_title']
	] );

これで検索結果は1件となり、タイトルに「world」が含まれるもののみとなった。

1: Hello world!

次はsearch_columnsパラメータの'post_title'を'post_content'に変更してみる。

$query = new WP_Query( [
	's'              => 'world',
	'search_columns' => ['post_content']
	] );

この場合の検索結果は、本文に「world」が含まれ1件のみとなった。

1030: 本文に〇〇!

以上のように、バージョン6.2ではWP_Queryクラスにsearch_columnsパラメータを指定することで、キーワード検索の対象を限定できるようになった。

post_search_columnsフィルター

バージョン6.2ではsearch_columnsパラメータの追加にあわせてpost_search_columnsフィルターが追加された。

$search_columns = (array) apply_filters( 'post_search_columns', $search_columns, $search, $query );

このフィルターの第1パラメータ$search_columnsにはWP_Queryオブジェクトが受け取ったsearch_columnsパラメータをパースした内容が格納されており、このフィルターを使用することでキーワード検索の対象を変更できる。

なおこのフィルターの返り値はデフォルトの検索対象である3つのカラムと比較され、3つのカラム以外は検索対象にはならない。仮に'post_name'を含めてもそれが検索対象になることはない。


最終更新 : 2023年03月30日 12:40


お勧め

add_shortcode(2018年5月27日 更新)

void add_shortcode( string $tag, mixed $func )
ショートコード(独自タグ)を追加する。ショートコードは、投稿記事内でテキスト内容がない[tag]や、テキストを内包する[tag]テキスト[/tag]の書式で使用できる独自タグのこと。標準の状態では、 the_content関数によって表示する直前のフィルター処理内でパラメータ$funcで指定した関数・メソッドが実行される。

get_user_setting(2022年1月31日 更新)

mixed get_user_setting( string $name [ , string $default = false ] )
ユーザーインターフェイス設定を取得する。

have_posts(2018年5月27日 更新)

bool have_posts( )
次の投稿データが存在するかを調べる。

in_category(2018年5月27日 更新)

bool in_category( mixed $category [ , mixed $post = null ] )
投稿情報が指定したカテゴリーに属しているか調べる。

add_feed(2024年6月24日 更新)

string add_feed( string $feedname, callable $callback )
フィードを追加する。