很难说您的查询到底要完成什么,但我会提供我想到的两个设置,希望它们能帮助您。
您可以使用两个需要搜索的分类法和术语设置查询参数,如:
$args = array(
\'post_type\' => \'custom\',
\'post_parent\' => 0,
\'posts_per_page\' => 10,
\'orderby\' => \'date\',
\'order\' => \'DESC\',
\'post_status\'=>\'publish\',
\'paged\' => $paged,
//taxonomy query default
\'tax_query\' => array(
\'relation\' => \'AND\',
array(
\'taxonomy\' => \'required_1\',
\'field\' => \'slug\',
\'terms\' => array($required_1)
),
array(
\'taxonomy\' => \'required_2\',
\'field\' => \'slug\',
\'terms\' => array($required_2)
),
),
);
然后,如果您还希望使用前两个必需的术语搜索可选的分类法和术语,您可以动态地将另一个查询数组添加到
$args[\'tax_query\']
数组,具体取决于是否存在可选的分类术语。因此,税务查询将检查是否需要1个匹配项,如果需要2个匹配项,如果存在,则检查可选1个匹配项,如果可选2个匹配项,等等:
if( !empty($optional_1) ) {
$optional_1_array = [
\'taxonomy\' => \'optional_1\',
\'field\' => \'slug\',
\'terms\' => array($optional_1)
];
$args[\'tax_query\'][] = $optional_1_array;
}
您可以对可能存在的其他可选术语进行清洗和重复,或者创建一个循环,以便将这些可选术语添加到查询中(如果您不知道可能会有多少个)。
想到的另一个查询可能是向使用关系或的数组动态添加可选术语,这些关系或嵌套在原始分类查询中。因此,前两个分类术语将使用AND,然后可选术语将在它们之间使用OR。换句话说,查询将检查是否需要1个匹配项,如果需要2个匹配项,以及可选1、可选2或可选3个匹配项中是否有任何一个匹配项。
这可能看起来像这样,但这是一段相当冗长的代码,可能需要更好地清理:
if( !empty($optional_1) || !empty($optional_2) || !empty($optional_3) ){
// if any of the optional terms have been sent by user, setup new array with relation OR to start
$optional_array = [
\'relation\' => \'OR\',
];
// then if $optional_1 was sent, store an appropriate array for that query nested inside of $optional_array
if( !empty($optional_1) ) {
$optional_1_array = [
\'taxonomy\' => \'optional_1\',
\'field\' => \'slug\',
\'terms\' => array($optional_1)
];
$optional_array[] = $optional_1_array;
}
$args[\'tax_query\'][] = $optional_array;
}