如何执行特定的wp_Query分类搜索

时间:2012-04-26 作者:WPfan 1000

我在帖子类型中添加了一个名为体验的自定义分类法,该分类法有“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

我意识到我的问题可能没有完全意义。让我试着进一步解释。我之所以需要搜索结果来显示包含零个或多个术语而不是一个或多个术语的页面,是因为我想将分类法搜索与另一个字段搜索相结合,例如城市。如果用户只填写城市的值,而没有填写体验词的值,则搜索结果将为零,因为他没有填写词。相反,我需要显示所选城市的所有页面,无论是否选择任何体验术语

1 个回复
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数据添加了白名单式检查。

结束

相关推荐

使用新的WP-Query()从循环中过滤后期格式;

嗨,我目前正在为我的博客构建一个主题。下面的代码指向最新的帖子(特色帖子)。因为这将有一个不同的风格比所有其他职位。然而我想过滤掉帖子格式:链接使用我在循环中定义的WP查询,因为它给我带来了更多的灵活性。我该怎么做呢? <?php $featured = new WP_Query(); $featured->query(\'showposts=1\'); ?> <?php while ($featured->have_post