WP 3.1针对多个自定义字段值的META_QUERY

时间:2011-05-10 作者:Osu

我试图使用一些条件逻辑来比较查询中的自定义字段,但有点卡住了。如何将ReleasedProject和PermanentArtist设置为“true”的所有帖子?

这是我到目前为止的情况,我想这与“比较”有关:

谢谢

osu

EDIT: 为了澄清我想做什么,我试图排除两个自定义字段值(本例中为ReleasedProject和PermanentArtist)设置为“false”的页面。这些是通过使用插件自定义字段模板生成的复选框设置的。

我已经更新了代码,以说明我需要过滤掉这两个自定义字段设置为false的所有页面:

global $post;
$artist_args = array(
    \'post_type\' => \'page\',
    \'post_parent\' => $post->ID,
    \'posts_per_page\' => -1,
    \'orderby\' => \'name\',
    \'order\' => \'ASC\',
    \'meta_query\' => array(
        array(
            \'key\' => \'ReleasedProject\',
            \'value\' => \'false\'
        ),
        array(
            \'key\' => \'PermanentArtist\',
            \'value\' => \'false\'
        )
    )
);
$my_query = new WP_Query($artist_args);

1 个回复
最合适的回答,由SO网友:John P Bloch 整理而成

如果你想要所有有ReleasedProjectPermanentArtist 都设置为true,则需要更改value 这两个的键\'true\'. 如果要排除将这两个设置都设置为\'false\', 您需要添加\'compare\' => \'!=\' 到两个元查询数组。

编辑元查询背后的逻辑是必须满足所有条件(这是AND 关系)。所以如果你说

\'meta_query\' => array(
    array(
        \'key\' => \'ReleasedProject\',
        \'value\' => \'false\'
    ),
    array(
        \'key\' => \'PermanentArtist\',
        \'value\' => \'false\'
    )
)
这意味着“找到所有发布项目与\'false\' 和永久艺术家相同\'false\'.“如果您要添加\'compare\' => \'!=\' 就像我前面提到的,它会说“找到所有发布项目的帖子都不相同\'false\' 和永久艺术家不完全相同\'false\'.“如果您有一篇发布项目的帖子设置为\'false\' 永久艺术家设置为\'true\', 它不会显示在任何一个查询中。

此外,如果缺少元值,它也不会显示在结果中。因此,如果您有一篇发布项目设置为true的帖子,并且根本没有设置永久艺术家,那么此元查询将找不到该帖子:

\'meta_query\' => array(
    array(
        \'key\' => \'ReleasedProject\',
        \'value\' => \'false\',
        \'compare\' => \'!=\'
    ),
    array(
        \'key\' => \'PermanentArtist\',
        \'value\' => \'false\'
        \'compare\' => \'!=\'
    )
)
基本上,元查询不会进行“非此即彼”的检查,当您有多个元查询时,它们会同时进行“非此即彼”的检查。

结束

相关推荐