我有两种自定义分类法:
型号产品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,
),
);
}