我正在尝试构建一个查询,以按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\'
);
最合适的回答,由SO网友:Sally CJ 整理而成
其实很简单:您需要使用OR
关系,并使用NOT EXISTS
运算符,用于选择未分配给指定分类中任何术语的帖子。
$tax_query[] = array(
\'relation\' => \'OR\',
array(
\'taxonomy\' => \'location\',
\'field\' => \'name\',
\'terms\' => $location,
),
array(
\'taxonomy\' => \'location\',
\'operator\' => \'NOT EXISTS\',
),
);