次のようにWP_Query
を使用してカスタム投稿タイプを検索しようとしています。
$searchTerm = '%my book%';
$args = array(
'post_type' => 'books',
'meta_query' = array(
'relation' => 'OR',
array(
'key' => 'book_title',
'value' => $searchTerm,
'compare' => 'LIKE'
),
array(
'key' => 'book_description',
'value' => $searchTerm,
'compare' => 'LIKE'
)
);
);
$query = new WP_Query($args);
上記のクエリはうまく機能します。実際、私は以下のようなMySQLでサポートされている演算子のどれに対してもcompare
演算子を変更することができます。
=,
\>=,
<=,
\>,
<,
LIKE,
RLIKE,
BETWEEN
しかし、私は演算子MATCH AGAINST
の使い方を理解することができません。 MySQLでは、このように動作します。
select *
from wp_postmeta
where meta_key = 'book_title'
and match(meta_value) against ('my book');
しかし、私はWP_Query
でそれを使う方法を理解することができません、ありがとう。
私の知る限りでは、WP_Query
でMATCH()... AGAINST
を使うことはできません。比較可能な値は次のとおりです。
=
!=
>
>=
<
<=
LIKE
NOT LIKE
IN
NOT IN
BETWEEN
NOT BETWEEN
NOT EXISTS
REGEXP
NOT REGEXP
RLIKE
デフォルトは=
です。ただし、$wpdb
で使用する汎用クエリでMATCH() AGAINST
を使用することはできます。例えば:
$wpdb->prepare(" AND MATCH($wpdb->posts.post_title, $wpdb->posts.post_content) AGAINST(%s)", $search );
クエリで使用できる__not_in
パラメータもいくつかあります。
$query = new WP_Query( array( 'tag__not_in' => array( 1, 2, 3 ) ) );
1、2、3のタグIDを持たない投稿が検索されます。