比较GET_POSTS参数中的META_QUERY

时间:2014-11-13 作者:Xaver

我喜欢用自定义字段排除某些帖子。所以如果my_custom_field_ignore isset和1 忽略此帖子。如果未设置,则包括它。

这就是我所拥有的

    $args = array(
        \'post_type\' => $post_type,
        \'offset\' => $offset,
        \'meta_query\' => array(
            array(
                \'key\' => \'my_custom_field_ignore\',
                \'value\' => \'1\',
                \'compare\' => \'!=\',
            )
        )
    );
这仅适用于my_custom_field_ignore 设置为1

我怎样才能包括所有的帖子(当然不是那些my_custom_field_ignore = 1)?

Edit:

这就是WP 3.5的工作原理+

    \'meta_query\' => array(
        array(
            \'key\' => \'my_custom_field_ignore\',
            \'compare\' => \'NOT EXISTS\',
        )
    )
此简单搜索的外观my_custom_field_ignore 因此该值将被忽略。虽然这可能在第一时间起作用,但用户在更改时可能会感到困惑10 并期望被包括在内。

似乎3.3和3.4需要一些条件检查。

Edit 2

似乎勾选答案就可以了(至少对于3.5以上的版本)。出于某种奇怪的原因,它忽略了第一篇帖子“Hello World”。添加后my_custom_field_ignore 然后把它取下来

2 个回复
最合适的回答,由SO网友:birgire 整理而成

如果我们定义条件:

A: my_custom_field_ignore EXISTS
B: my_custom_field_ignore = 1
那么NOT ( A && B ) 相当于:

NOT ( A ) || NOT ( B )
在我们的案例中的含义:

( my_custom_field_ignore NOT EXISTS ) ||  ( my_custom_field_ignore != 1 ) 
因此,对于WP 3.5+(未经测试),我们可以尝试以下方法:

 $args = array(
    \'post_type\'  => $post_type,
    \'offset\'     => $offset,
    \'meta_query\' => array(
        \'relation\' => \'OR\',
        array(
            \'key\'     => \'my_custom_field_ignore\',
            \'value\'   => \'1\',
            \'compare\' => \'!=\',
        ),
        array(
            \'key\'     => \'my_custom_field_ignore\',
            \'compare\' => \'NOT EXISTS\',
            \'value\'   => \'1\',     #<-- just some value as a pre 3.9 bugfix (Codex)
        ),
    )
);

SO网友:yunieski dieguez garcia

如果使用整数,则必须使用serialize函数:

$args = array(
    \'meta_query\' => array(
        array(
            \'key\' => \'my_meta_key\',
            \'value\' => serialize(strval($my_vale)),
            \'compare\' => \'LIKE\'
        )
    )
);
$posts = get_posts( $args );
你准备好了,

print_r($posts); 
看看结果

结束

相关推荐

使用新的WP-Query()从循环中过滤后期格式;

嗨,我目前正在为我的博客构建一个主题。下面的代码指向最新的帖子(特色帖子)。因为这将有一个不同的风格比所有其他职位。然而我想过滤掉帖子格式:链接使用我在循环中定义的WP查询,因为它给我带来了更多的灵活性。我该怎么做呢? <?php $featured = new WP_Query(); $featured->query(\'showposts=1\'); ?> <?php while ($featured->have_post