WP_QUERY输出所选术语和未分配术语的帖子

时间:2020-10-12 作者:Graeme Bryson

我正在尝试构建一个查询,以按location 分类学有些员工是固定的,因为他们只能在一个办公室工作,而其他员工则是灵活的,他们都在办公室工作。

如果用户选择按筛选Office 1, 我想显示分配给Office 1 的术语location 分类学and没有任何任期的员工。

为了简洁起见,我将下面的代码精简为基本原则。我试图建立一个tax_query 查询所选location 任何没有一套的帖子,但怀疑逻辑有缺陷——任何建议都将不胜感激。

<!-- <select> field for user to select location -->
<form method="get">
    <select name="locations" id="locations">
    <option value="location-1">Location 1</option>
    <option value="location-2">Location 2</option>
    <option value="location-3">Location 3</option>
    <input type="submit">
</form>
// Target items by \'location\' if option set in <select>
if(isset($_GET[\'locations\'])) {
    $location = sanitize_text_field( $_GET[\'locations\'] );
    $tax_query[] = array(
        \'relation\' => \'AND\',
        array(
            \'taxonomy\' => location,
            \'field\'    => \'name\',
            \'terms\'    => $location,
            \'operator\' => \'IN\',
        ),
        array(
            \'taxonomy\' => location,
            \'operator\' => \'NOT IN\',
        ),
    );
        
}

// Configure query args
$args = array(
    \'post_type\'      => \'staff\',
    \'posts_per_page\' => -1,
    \'tax_query\'      => $tax_query,
    \'order\'          => \'ASC\',
    \'post_status\'    => \'publish\'
);

1 个回复
最合适的回答,由SO网友:Sally CJ 整理而成

其实很简单:您需要使用OR 关系,并使用NOT EXISTS 运算符,用于选择未分配给指定分类中任何术语的帖子。

$tax_query[] = array(
    \'relation\' => \'OR\',
    array(
        \'taxonomy\' => \'location\',
        \'field\'    => \'name\',
        \'terms\'    => $location,
    ),
    array(
        \'taxonomy\' => \'location\',
        \'operator\' => \'NOT EXISTS\',
    ),
);