包含多个键值对和关系的Wordpress元查询


Wordpress meta query with multiple key value pairs and relations

我有以下问题。在我的WordPress页面上,有小的粘性帖子和一个大的粘性帖子,这一切都很好。但是也有常规的帖子,我需要不显示那些被标记为粘性或大粘性的帖子。

我需要查询home_post键值不为真或不存在,big_home_post键值不为真或不存在。

我想到的代码如下:

'meta_query' => array(
    'relation' => 'AND',
    array(
        'relation' => 'OR',
        array(
            'key' => 'big_home_post',
            'value' => true,
            'compare' => '!='
        ),
         array(
            'key' => 'big_home_post',
            'value' => true,
            'compare' => 'NOT EXISTS'
        ),
    ),
    array(
        'relation' => 'OR',
        array(
            'key' => 'home_post',
            'value' => true,
            'compare' => '!='
        ),
         array(
            'key' => 'home_post',
            'value' => true,
            'compare' => 'NOT EXISTS'
        ),
    ),
),

代码不工作

可能多维数组没有正确构建或者WordPress根本不支持。

感谢所有帮助

不能在meta_query中使用嵌套数组。您需要为此编写自己的查询。我建议您按照以下代码来实现您的目标;

$query = new WP_Query( array(
    'custom_meta_query_enabled' => true,
) );
add_filter( 'posts_join', 'custom_meta_query', 10, 2 );
function custom_meta_query( $join, $query ) {
    if ( empty( $query->query_vars['custom_meta_query_enabled'] ) )
        return $join;
    global $wpdb;
    $new_join = "
        INNER JOIN {$wpdb->postmeta} wppm ON 1=1
            AND wppm.post_id = {$wpdb->posts}.ID
            AND (wppm.meta_key != 'big_home_post' OR (wppm.meta_key = 'big_home_post' AND wppm.meta_value != true)
            AND (wppm.meta_key != 'home_post' OR (wppm.meta_key = 'home_post' AND wppm.meta_value != true)
    ";
    return $join . ' ' . $new_join;
}

简单地说,我放置了一个名为custom_meta_query_enabled的控件。如果您将WP_Query中的这个字段设置为true,系统查询将被自定义连接查询覆盖。为了使用它,你可以把它放在functions.php

hseyin BABAL的答案已经过时了。如法典所述:

从4.1版本开始,可以嵌套meta_query子句来构造复杂的查询。

所以meta_query的值,如问题将工作。

法典:自定义字段参数