具有多个键值对和关系的Wordpress元查询

时间:2014-03-24 10:35:44

标签: php wordpress meta-tags

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

我需要查询值不为true或不存在home_post键且值不为true或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根本不支持。

感谢所有帮助

2 个答案:

答案 0 :(得分:3)

无法在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

答案 1 :(得分:2)

HüseyinBABAL的答案已经过时了。正如食品法典委员会所述:

  

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

所以meta_query这样的价值会起作用。

Codex: Custom Field Parameters