WP_Query で タイトル を 部分検索 (LIKE検索) したい

執筆者:

カテゴリ:

[jr_post_date]

[jr_wp_version version=”5.7″]

LIKE 検索 を WP の タイトル で 行いたかったので カスタマイズする方法 を 調べてみました

どうやら WP_Query 標準 では 出来ないようで フィルターで ‘title_like’ という パラメータ を 追加して 実現しました

もともとある ‘title’ を LIKE検索に 変更する方法もあるみたいですが コアで 使われてたりすると 思わぬ弊害が生まれそうなので この方法を 採用します

[jr_reference_link title=”wp query – WP_Query with "post_title LIKE 'something%'"? – WordPress Development Stack Exchange” url=”https://wordpress.stackexchange.com/questions/18703/wp-query-with-post-title-like-something/18715#18715″]

[jr_reference_link title=”【PHP】 空白文字で文字列を分割して検索用キーワードの配列を作る – Qiita” url=”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検索できます

コメント

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA