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検索できます

Related Article

スパムコメント対策 に DISQUS を 導入 してみた

詳細へ »

Gutenberg の カスタムブロック を 作ってみる

詳細へ »

関連記事 っぽいものを 付けてみました

詳細へ »