我在帖子类型中添加了一个名为体验的自定义分类法,该分类法有“VFD”和“PLC”两个术语
我正在尝试创建一个搜索,用户可以从选择列表中选择一个或多个体验分类术语,按下提交按钮,然后查看wp\\U查询的结果。
我需要查询结果来显示
1) 经验分类法未选择(零)个术语
2) 已选择一个或多个术语
我有一个带有数组的html选择列表experience[]
要捕获多个选择:
<select name="experience[]" multiple="multiple">
<option value="vfds">VFDs</option>
<option value="plcs">PLCs</option>
</select>
然后我将此数组馈送到wp\\u查询中:
<?php
$_GET[\'submit\'];
$experience = $_GET[\'experience\'];
$args = array
(
\'post_type\' => \'page\',
\'tax_query\' => array(
array(
\'taxonomy\' => \'experience1\',
\'field\' => \'slug\',
\'terms\' => $experience
)
)
);
$query = new WP_Query( $args );
查询工作正常,因为它将显示在体验类别下选择了一个或多个术语的页面。
我遇到的问题是:
如果某个页面的体验类别值为空(无),则该页面不会显示在结果列表中。
wp\\u query是否有一种方式显示带有
未选择任何术语,已选择一个或多个术语,谢谢
<小时>
EDIT #1
请允许我补充一点,总的来说,我正在尝试放弃在视图中使用Drupal。我正在尝试复制视图功能,即能够使用具有多个值的选择字段进行搜索。
我试着使用wp_query
使用具有多个值的自定义选择字段,但迄今为止失败得很惨。
因此,我转而使用具有多个术语的类别,并接近复制视图类型的搜索结果。
如果有人知道我想在WP做什么,我会非常感激。
再次感谢!
<小时>
EDIT #2
我意识到我的问题可能没有完全意义。让我试着进一步解释。我之所以需要搜索结果来显示包含零个或多个术语而不是一个或多个术语的页面,是因为我想将分类法搜索与另一个字段搜索相结合,例如城市。如果用户只填写城市的值,而没有填写体验词的值,则搜索结果将为零,因为他没有填写词。相反,我需要显示所选城市的所有页面,无论是否选择任何体验术语
SO网友:MathSmath
似乎最简单的方法是仅在指定了至少一个“经验”术语的情况下应用税务查询。类似于:
// Get passed vars
$experience = $_GET[\'experience\'];
// Start building the args array
$args = array(
\'post_type\' => \'page\',
);
// If any experience items were passed
if( is_array( $experience ) && count( $experience ) > 0 ) {
// Get an array of possible "experience" terms as a whitelist to check against.
$arr_term_details = get_terms( \'experience1\', array( \'hide_empty\' => 0 ) );
$arr_terms = array();
foreach($arr_term_details as $this_term) {
array_push($arr_terms, $this_term->slug);
}
// If ALL of the experience terms exist in the whitelist
if( count(array_intersect( $experience, $arr_terms )) == count($experience) ) {
// Add the tax query
$args[\'tax_query\'] = array(
array(
\'taxonomy\' => \'experience1\',
\'field\' => \'slug\',
\'terms\' => $experience
)
);
}
}
// Run the query
$query = new WP_Query( $args );
if条件可能是错误的——我忘记了表单如何为多重选择传递值。
UPDATE: 根据Chip Bennett的建议,为$\\u GET数据添加了白名单式检查。