WP_Query で タイトル を 部分検索 (LIKE検索) したい
この記事は 2021年 4月 1日 に書かれた記事です。
この記事は WordPress Version 5.7 の時の記事です。
LIKE 検索 を WP の タイトル で 行いたかったので カスタマイズする方法 を 調べてみました
どうやら WP_Query 標準 では 出来ないようで フィルターで ‘title_like’ という パラメータ を 追加して 実現しました
もともとある ‘title’ を LIKE検索に 変更する方法もあるみたいですが コアで 使われてたりすると 思わぬ弊害が生まれそうなので この方法を 採用します
wp query - WP_Query with "post_title LIKE 'something%'"? - WordPress Development Stack Exchangeを参考にさせていただきました。
https://wordpress.stackexchange.com/questions/18703/wp-query-with-post-title-like-something/18715#18715
【PHP】 空白文字で文字列を分割して検索用キーワードの配列を作る - Qiitaを参考にさせていただきました。
https://qiita.com/mpyw/items/a704cb900dfda0fc0331
//--------------------------------------------------------------------------------------------------
// クエリ : title_like 追加
//--------------------------------------------------------------------------------------------------
add_filter( 'posts_where', function( $where, $wp_query ) {
global $wpdb;
if( $title_like = $wp_query->get( 'title_like' ) ) {
$keywords = array_values( array_unique( preg_split( '/[\p{Z}\p{Cc}]++/u', $title_like, -1, PREG_SPLIT_NO_EMPTY ) ) );
foreach( $keywords as $keyword ) {
$where .= ' AND ' . $wpdb->posts . '.post_title LIKE \'%' . esc_sql( $wpdb->esc_like( $keyword ) ) . '%\'';
}
}
return $where;
} );
これで タイトル を LIKE検索 する パラメータ が 追加できました
使うときは
$args['title_like'] = 'hoge';
の様に すれば LIKE検索できます