こんにちは
MySQL の REPLACE 関数を使用して ‘・’ を取り除いたもので検索するのはどうでどうでしょう?
検索条件の変更は、posts_where フックなど変更することができます。
例:
function my_posts_where( $where, $query ) {
global $wpdb;
if ( is_search() && $query->is_search() ) {
$s = $query->query['s'];
$s = str_replace( '・', '', $s );
$like = $wpdb->esc_like( $s );
$where = preg_replace( '/^(\sAND \(\()(.*\)\))/', '$1' . "(REPLACE({$wpdb->posts}.post_content,'・','') LIKE '%{$like}%') OR " . '$2', $where );
}
return $where;
}
add_filter( 'posts_where', 'my_posts_where', 10, 2 );
ishitakaさん
早速のご提案大変有り難うございます。
ご連絡いただいたコードをfunctions.phpに書き、見事思い通りになりました。
この度はご教授大変ありがとうございます。
これでまたWordPress運営が楽しくなります。
ありがとうございました。
上記コードの追記です。
希望通りのコードだったのですが、私のそもそもの質問が『WordPress本文中に』だったのがいけなかったため、検索対象が本文のみで、ページタイトまでは反映していませんでした。
ページタイトルにも反映させるには、
{$wpdb->posts}.post_content の行の下に
post_contentをpost_titleに変えて追加すればいいのでしょうか?
お手数をおかけしますが、ご助言いただけますと幸いです。
よろしくお願いします。
既存の検索もコンテンツとタイトル、抜粋が検索対象ですね。失礼しました。
下記コードは、既存の検索に合わせてタイトルと共に抜粋も検索の対象としました。抜粋が不要の場合は post_excerpt の行を削除してください。
function my_posts_where( $where, $query ) {
global $wpdb;
if ( is_search() && $query->is_search() ) {
$s = $query->query['s'];
$s = str_replace( '・', '', $s );
$like = $wpdb->esc_like( $s );
$w =
"(REPLACE({$wpdb->posts}.post_title,'・','') LIKE '%{$like}%') OR " .
"(REPLACE({$wpdb->posts}.post_excerpt,'・','') LIKE '%{$like}%') OR " .
"(REPLACE({$wpdb->posts}.post_content,'・','') LIKE '%{$like}%') OR ";
$where = preg_replace( '/^(\sAND \(\()(.*\)\))/', '$1' . $w . '$2', $where );
}
return $where;
}
add_filter( 'posts_where', 'my_posts_where', 10, 2 );
ishitakaさん
再度のご投稿ありがとうございます。
タイトルも検索対象になりました。
この度は解決していただき、大変ありがとうございました。