我有两种自定义分类法:
型号产品Type
可以是以下内容:
博客案例研究网络研讨会Subject
可以是:
我在WordPress后端有两个下拉菜单,用户可以从中选择type
和subject
他们想从resources
(我的自定义帖子类型)。
例如,以下帖子存在于resources
:
- Post 1: 标记为
type
博客和subject
室外 - Post 2: 标记为
type
博客和subject
室内 - Post 3: 标记为
subject
室内
用户可以通过
type
或
subject
. 我的意思是,不是两个都需要,只能选择一个。但是,如果用户选择了
type
和
subject
, 我希望它显示带有两个标签的帖子。
Current approach:
$args = array(
\'post_type\' => \'resources\',
\'post_status\' => \'publish\',
\'posts_per_page\' => 8,
\'tax_query\' => array(
\'relation\' => \'AND\',
array(
\'taxonomy\' => \'type\',
\'field\' => \'slug\',
\'terms\' => $resource_type,
),
array(
\'taxonomy\' => \'subject\',
\'field\' => \'slug\',
\'terms\' => $resource_subject,
),
),
\'tax_query\' => array(
\'relation\' => \'OR\',
array(
\'taxonomy\' => \'type\',
\'field\' => \'slug\',
\'terms\' => $resource_type,
),
array(
\'taxonomy\' => \'subject\',
\'field\' => \'slug\',
\'terms\' => $resource_subject,
),
)
);
$resource_type
: 是保存下拉列表值的变量type
. $resource_subject
: 是保存的下拉值的变量subject
.
Current results:
过滤时subject
独自一人——这很有效。当按筛选时type
独自一人——这很有效。
当同时使用两者进行过滤时,它不起作用。一、 e.我已过滤type
博客和subject
室内,它向我展示subject
户外立柱。
或者,在查询两者时,以下选项可以工作,但在仅选择一个选项时不起作用:
$args = array(
\'post_type\' => \'resources\',
\'post_status\' => \'publish\',
\'posts_per_page\' => $card_count,
\'tax_query\' => array(
\'relation\' => \'AND\',
array(
\'taxonomy\' => \'type\',
\'field\' => \'slug\',
\'terms\' => $resource_type,
),
array(
\'taxonomy\' => \'subject\',
\'field\' => \'slug\',
\'terms\' => $resource_subject,
),
)
);
最合适的回答,由SO网友:Sally CJ 整理而成
如果您添加其他tax_query
给args最后一个tax_query
将替换以前的tax_query
.
但无论如何,如果这些是标准:
按筛选时type
单独,仅显示resources
在该位置发布type
.
当按筛选时subject
单独,仅显示resources
在该位置发布subject
.
当按筛选时type
和subject
, 仅显示resources
分配给两个岗位的岗位type
和subject
.
然后尝试以下操作:
$args = array(
\'post_type\' => \'resources\',
\'post_status\' => \'publish\',
\'posts_per_page\' => 8,
);
// Filtering by both \'type\' and \'subject\'.
if ( $resource_type && $resource_subject ) {
$args[\'tax_query\'] = array(
\'relation\' => \'AND\',
array(
\'taxonomy\' => \'type\',
\'field\' => \'slug\',
\'terms\' => $resource_type,
),
array(
\'taxonomy\' => \'subject\',
\'field\' => \'slug\',
\'terms\' => $resource_subject,
),
);
}
// Filtering by \'type\' only.
elseif ( $resource_type && ! $resource_subject ) {
$args[\'tax_query\'] = array(
array(
\'taxonomy\' => \'type\',
\'field\' => \'slug\',
\'terms\' => $resource_type,
),
);
}
// Filtering by \'subject\' only.
elseif ( $resource_subject ) {
$args[\'tax_query\'] = array(
array(
\'taxonomy\' => \'subject\',
\'field\' => \'slug\',
\'terms\' => $resource_subject,
),
);
}