$wpdb->get_results( $wpdb->prepare( "SELECT * FROM $wpdb->posts WHERE post_title LIKE '%s%%'", '検索ワード' ) );これでいけるはずなんだけどなぜかだめ・・・
$wpdb->get_results( $wpdb->prepare( "SELECT * FROM $wpdb->posts WHERE post_title LIKE '%%%s%%'", '検索ワード' ) );部分一致ならいける。
$wpdb->get_results( $wpdb->prepare( "SELECT * FROM $wpdb->posts WHERE post_title LIKE '%%%s'", '検索ワード' ) );そして後方一致も・・・ なぜ前方一致だけ? あーこんなことしてる場合じゃないのに。 今回は部分一致でも大丈夫だからいっかと思いながらもやっぱりもやもや・・・ と、ずいぶん前の下書き記事に解決方法を発見。
$wpdb->get_results( $wpdb->prepare( "SELECT * FROM $wpdb->posts WHERE post_title LIKE %s", '検索ワード%' ) )
そういえばそうだったわ。 ググっても見当たらない方法なので公開します。
2019/5/23追記
$wpdb->esc_like() というワイルドカード( % と _ )をエスケープしてくれるメソッドがありました。
ということは、そもそも最初の3つの書き方はよくないのでは?
と思い、書き直します。
部分一致
$wpdb->get_results( $wpdb->prepare( "SELECT * FROM $wpdb->posts WHERE post_title LIKE %s", '%' . $wpdb->esc_like( '検索ワード' ) . '%' ) );
後方一致
$wpdb->get_results( $wpdb->prepare( "SELECT * FROM $wpdb->posts WHERE post_title LIKE %s", '%' . $wpdb->esc_like( '検索ワード' ) ) );
前方一致
$wpdb->get_results( $wpdb->prepare( "SELECT * FROM $wpdb->posts WHERE post_title LIKE %s", $wpdb->esc_like( '検索ワード' ) . '%' ) );