web-dev-qa-db-ja.com

WP_QueryでMySQL MATCH AGAINSTを使用する方法

次のように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でそれを使う方法を理解することができません、ありがとう。

1
leonziyo

私の知る限りでは、WP_QueryMATCH()... 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を持たない投稿が検索されます。

この コーデックスページコアチケット が役に立つことがあります。

1
Jack Johansson