基于标题的查询,使用‘Compare’=>‘IN’

时间:2018-07-10 作者:Mathias

我想使用预定义变量基于标题进行查询。我似乎不能使它工作。我错过了什么?

不使用“比较”进行查询不是问题。

    $args = array(\'post_type\' => \'udbyder\', 
                  \'posts_per_page\' => -1, 
                  \'order\' => \'ASC\',
                  \'meta_query\' => array(
                  \'relation\' => \'AND\',
                    array(
                    \'key\' => \'title\',
                    \'value\' => $test,
                    \'compare\' => \'IN\'
    ) 
));

1 个回复
SO网友:Jacob Peattie

这是不可能的WP_Query 就其本身而言。帖子标题不是meta,也没有内置的基于标题的查询功能。

您可以使用的方法是直接过滤SQL以添加逻辑。您甚至可以这样做,即可以将自定义参数添加到WP_Query, 我会打电话给你的titles\', 这将允许您传递一系列帖子标题。若要支持此参数,请将此筛选器添加到posts_where:

function wpse_308130_posts_where( $where, $query ) {
    global $wpdb;

    // Check if our custom argument has been set on current query.
    if ( $query->get( \'titles\' ) ) {
        $titles = $query->get( \'titles\' );

        // Escape passed titles and add quotes.
        $titles = array_map( function( $title ) {
            return "\'" . esc_sql( $title ) . "\'";
        }, $titles );

        // Implode into string to use in IN() clause.
        $titles = implode( \',\', $titles );

        // Add WHERE clause to SQL query.
        $where .= " AND $wpdb->posts.post_title IN ($titles)";
    }

    return $where;
}
add_filter( \'posts_where\', \'wpse_308130_posts_where\', 10, 2 );
这将允许您传递一个要检索帖子的帖子标题列表,如下所示:

$posts = new WP_Query( array(
    \'post_type\'      => \'udbyder\', 
    \'posts_per_page\' => -1, 
    \'order\'          => \'ASC\',
    \'titles\'         => [\'Title one\', \'Title two\'],
) );
这将返回标题为“Title one”或“Title two”的帖子。

结束

相关推荐

可以用数学运算进行WP_QUERY吗?

有这种情况。我正在建立一个WordPress网站来销售一些产品。问题是,产品的价格存储为元价值,但产品价格可以是不同的货币。现在的问题是,我必须对所有产品进行价格筛选,无论价格以何种货币表示,筛选货币都是在后台配置的,并且没有该货币价格的产品必须通过货币兑换税进行筛选,但如果我可以按货币等价价格进行筛选,我真的不知道如何构建meta\\u查询。例如,我有两种产品:产品1-价格:10-货币:美元产品2-价格:1000-货币:xxx过滤器设置为使用usd并查找0到10之间的价格。因此,这次搜索将返回产品1,但