如何在WP_QUERY中使用MySQL的Match Against?

时间:2017-06-18 作者:Leo

我正在尝试使用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);
上面的查询工作正常。事实上我可以改变compare 任何mysql支持的运算符的运算符,如:

=,
\\>=,
<=,
\\>,
<,
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 个回复
SO网友:Johansson

据我所知,你不能使用MATCH()... AGAINST 在里面WP_Query. 比较的可能值如下:

=
!=
>
>=
<
<= 
LIKE
NOT LIKE
IN
NOT IN
BETWEEN
NOT BETWEEN
NOT EXISTS
REGEXP
NOT REGEXP
RLIKE
默认值为=. 但是,您可以使用MATCH() AGAINST 在要使用的常规查询中$wpdb. 例如:

$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 ) ) );
它将搜索标签ID为1、2和3的帖子。

Codex PageCore ticket 也许能帮助你。

结束

相关推荐

Mysql SELECT posts

如何通过MYSQL从语言为“en”和“ru”的帖子中获取帖子我有这个问题$sql = \"SELECT p1.*, wm2.meta_value FROM wp_posts p1 LEFT JOIN wp_postmeta wm1 ON ( wm1.post_id = p1.ID AND wm1.meta_value IS NOT NULL AND wm1.meta_key = \'_thumbnail_id\' ) LEFT JOIN