IT技術に関する情報掲載サイト

プログラミングに関することを掲載します。

WP_Queryで「タイトルもしくはカスタムフィールドに一致したら」という条件で検索する方法

色々なやり方があるようですが、ちょっと強引にやってみました。

 

function.php

add_filter( 'posts_where', function ( $where ) use ( $title ) {
global $wpdb;
$pattern = '/\( mt1\.meta_key = \'_title\' AND mt1\.meta_value = \'(.+?)\' \)/u';
$replacement = '(wp_posts.post_title LIKE \'%$1%\')';
$where = preg_replace($pattern, $replacement, $where);
 
return $where;
} );

 

archive.php

meta_queryの部分を抜粋

$keyword_meta_query=array(
'relation' => 'OR',
array(
'key' => 'access',
'value' => $_GET['keyword'],
'compare' => 'LIKE',
),
array(
'key' => 'address',
'value' => $_GET['keyword'],
'compare' => 'LIKE',
),
array(
'key' => 'zip',
'value' => $_GET['keyword'],
'compare' => 'LIKE',
),
array(
'key' => 'tel',
'value' => $_GET['keyword'],
'compare' => 'LIKE',
),
array(
'key' => 'fax',
'value' => $_GET['keyword'],
'compare' => 'LIKE',
),
array( // タイトルを検索対象にするため function.phpでつかっている
'key' => '_title',
'value' => $_GET['keyword'],
),
);

 

ダミーのメタキーワードの_titleをつくって、post_whereのフィルターで、その部分を置換してしまう方法です。

echo $the_query->request;

SQLをみれるので、内容をみながらやるのもいいかもしれません。

他にも方法あるのですが、参考まで。