Can't figure out query logic

时间:2016-05-05 作者:Eckstein

请帮助我了解如何在我的post query中构造此meta\\u查询!

我的帖子类型有两个分类(“audition\\u type”和“union\\u requirement”)。在我的网站的一个页面上,用户可以使用复选框过滤帖子类型的查询(“试听”)。下面的meta\\u查询可以很好地获取用户选择的所有帖子,但它并不完全正确。我需要它返回与“audition\\u type”分类中选择的任何术语匹配的所有帖子,然后通过仅获取选择了“union\\u requirement”术语的帖子来进一步缩小范围。所以,几乎就像查询中的查询。这就是我无法完全理解的逻辑所在。

\'meta_query\' => array(
    \'relation\' => \'OR\',
    array(
    \'key\' => \'audition_type\',
    \'value\' => $typeIDs,
    ),
    array(
    \'key\' => \'union_requirement\',
    \'value\' => $unionIDs
    )
),
$typeIDs$unionIDs 变量是包含术语ID(如果不明显)的数组。

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

抱歉耽搁了大家,我不在城里!这是我今天发现并使用的。我必须检查选择了一个分类法而没有选择一个分类法的情况,这实际上只需要一个简单的税务查询,但这给了我空值并破坏了查询,因此我不得不使用一些条件来构建它。

$TypeID和$UnionSID是所选分类的数组。

谢谢你的建议!

//Set the proper tax_query based on what we\'re looking for
if ($typeIDs && $unionIDs) {
    $args[\'tax_query\'] = array(
        \'relation\' => \'AND\',
        array(
            \'taxonomy\' => \'audition_type\',
            \'field\' => \'term_id\',
            \'terms\' => $typeIDs,
        ),
        array(
            \'taxonomy\' => \'union_requirement\',
            \'field\' => \'term_id\',
            \'terms\' => $unionIDs,
            \'operator\' => \'AND\'
        )
    );
} elseif ($typeIDs) {
    $args[\'tax_query\'] = array(
        array(
            \'taxonomy\' => \'audition_type\',
            \'field\' => \'term_id\',
            \'terms\' => $typeIDs,
        )
    );
} else if ($unionIDs) {
    $args[\'tax_query\'] = array(
        array(
            \'taxonomy\' => \'union_requirement\',
            \'field\' => \'term_id\',
            \'terms\' => $unionIDs,
        )
    );
} else {
    $args[\'tax_query\'] = false;
}

SO网友:Rarst

如果我按照你的描述做的话,你会想要那些有任何内容的帖子$typeIDs, 但所有$unionIDs ?

除了错误之外meta_query 选择,你错过了operator 参数,指定所需的匹配类型。

我认为你的问题应该是这样的:

\'tax_query\' => array(
    \'relation\' => \'AND\', // you want both conditions to match
    array(
    \'taxonomy\' => \'audition_type\',
    \'terms\' => $typeIDs,
    \'operator\' => \'IN\', // this is default, just showing you difference
    ),
    array(
    \'taxonomy\' => \'union_requirement\',
    \'terms\' => $unionIDs,
    \'operator\' => \'AND\', // not default, we want matches to all terms
    )
),
请参见Taxonomy Parameters in Codex 以获取更多文档。

SO网友:amit singh

试试这段代码,元查询不会给你想要的结果。请查看元查询以了解更多详细信息。Meta query或者去here 供参考。

<?php 
$myquery = array(
                \'numberposts\'=>-1,
                \'tax_query\' => array(
                \'relation\' => \'OR\',
                            array(
                                \'taxonomy\' => \'audition_type\',
                                \'terms\' => $typeIDs
                            ),
                            array(
                                \'taxonomy\' => \'union_requirement\',
                                \'terms\' => $unionIDs
                            ),
                ),
            );
query_posts($myquery);
?>