web-dev-qa-db-fra.com

Comment utiliser MySQL MATCH AGAINST dans WP_Query?

J'essaie de rechercher un type d'article personnalisé en utilisant un WP_Query comme suit:

$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);

La requête ci-dessus fonctionne très bien. En fait, je peux changer l'opérateur compare pour n'importe lequel des opérateurs supportés par mysql tels que:

=,
\>=,
<=,
\>,
<,
LIKE,
RLIKE,
BETWEEN

Cependant, je ne parviens pas à comprendre comment utiliser l'opérateur MATCH AGAINST. Dans MySQL, cela fonctionne comme ceci:

select *
from wp_postmeta
where meta_key = 'book_title'
and match(meta_value) against ('my book');

Mais je ne trouve pas le moyen de l'utiliser avec WP_Query, merci d'avance.

1
leonziyo

Autant que je sache, vous ne pouvez pas utiliser MATCH()... AGAINST dans WP_Query. Les valeurs possibles pour la comparaison sont les suivantes:

=
!=
>
>=
<
<= 
LIKE
NOT LIKE
IN
NOT IN
BETWEEN
NOT BETWEEN
NOT EXISTS
REGEXP
NOT REGEXP
RLIKE

La valeur par défaut est =. Cependant, vous pouvez utiliser MATCH() AGAINST dans une requête générique à utiliser avec $wpdb. Par exemple:

$wpdb->prepare(" AND MATCH($wpdb->posts.post_title, $wpdb->posts.post_content) AGAINST(%s)", $search );

Vous pouvez également utiliser certains paramètres __not_in dans votre requête, tels que:

$query = new WP_Query( array( 'tag__not_in' => array( 1, 2, 3 ) ) );

Qui recherchera les publications qui ne possèdent pas les identifiants de balises 1, 2 et 3.

Ceci Page Codex et Ticket principal pourrait vous aider.

1
Jack Johansson