質問: new wp_query( array('post_type'=>'post','title'=>'this song title') ); これは、タイトルが「this song title」の投稿と完全に一致するもののみを返します。私がやりたいことは、この例では、文字「t」で始まるすべての投稿を返すことです。私もこの記事を見つけました、そしてそれは本当に答えられませんでした。それは受け入れられた答えですが、私はそれが質問にどのように答えているのかわかりません。 タイトルの最初の文字に検索を制限するには? コメントやメタ検索のような他のクエリ機能はlike%をクエリに追加するための '比較'を持っていますが、タイトルはそうではありません。
回答: wp_queryをそのまま使用することはできませんが、posts_whereフィルターを使用してwp_queryのカスタム引数を探すことで、この機能を追加することができます。starts_withが使用したい引数の名前であると仮定すると、posts_whereがクエリに設定されている場合、結果を指定された値で始まるものに限定するwhere句を追加するためにstarts_withをフィルタリングできます。function wpse_298888_posts_where( $where, $query ) { global $wpdb; $starts_with = $query->get( 'starts_with' ); if ( $starts_with ) { $where .= " and $wpdb->posts.post_title like '$starts_with%'"; } return $where; } add_filter( 'posts_where', 'wpse_298888_posts_where', 10, 2 ); このフィルタを追加すると、次のような投稿をクエリできます。$query = new wp_query( array( 'starts_with' => 'm', ) ); それは "m"で始まるすべての投稿を返します。メインクエリをフィルタリングできるようにしたい場合は、pre_get_postsでこの引数を使用することもできます。function wpse_298888_pre_get_posts( $query ) { if ( $query->is_main_query() ) { $query->set( 'starts_with', 'm' ); } } add_action( 'pre_get_posts', 'wpse_298888_pre_get_posts' );