Multiple Category Search

时间:2012-04-27 作者:Josh Rodgers

我正在尝试创建一个搜索功能,允许用户输入搜索词并选择几个类别。脚本可以很好地搜索单个类别,但当我添加多个类别时,我遇到了障碍。

我的代码如下:

<form method="get" id="searchform" action="<?php echo home_url(); ?>">
    <input type="text" onclick="this.value=\'\';" onfocus="this.select()" onblur="this.value=!this.value?\'Search...\':this.value;" value="Search..." name="s" id="s" />
    <input type="hidden" name="post_type" value="product" />
    <?php wp_dropdown_categories(\'taxonomy=product_cat&id=make&child_of=15&show_option_all=Select Make...\'); ?>
    <?php wp_dropdown_categories(\'taxonomy=product_cat&id=model&child_of=21&show_option_all=Select Model...\'); ?>
    <input type="submit" id="searchsubmit" value="Search" />
</form>
当我四处搜索时,我发现:Wordpress Multiple Category Search, 这似乎正是我想要的。。。然而,我不知道该如何采纳这个建议。

我很确定您在函数文件中添加了以下内容:

add_action( \'parse_request\', \'category_search_logic\', 11 );
function category_search_logic( $query ) {

    if ( ! isset( $query->query_vars[ \'cat\' ] ) )
        return $query;

    // split cat query on a space to get IDs separated by \'+\' in URL
    $cats = explode( \' \', $query->query_vars[ \'cat\' ] );

    if ( count( $cats ) > 1 ) {
        unset( $query->query_vars[ \'cat\' ] );
        $query->query_vars[ \'category__and\' ] = $cats;
    }

    return $query;
}
但是,如何将其纳入搜索表单?我相信这很简单,但我迷路了。。。有人有什么想法吗?

谢谢Josh

1 个回复
最合适的回答,由SO网友:Josh Rodgers 整理而成

我找到了解决办法。。。

“我的函数”页面现在看起来像:

<?php
    class dropdown extends Walker_CategoryDropdown {
        function start_el(&$output, $category, $depth, $args) {
            $pad = str_repeat(\'&nbsp;\', $depth * 3);
            $cat_name = apply_filters( \'list_cats\', $category->name, $category );
            $output .= "\\t<option class=\\"level-$depth\\" value=\\"".$category->slug."\\""; 
            $output .= \'>\';
            $output .= $pad.$cat_name;
            if ( $args[\'show_count\'] )
                $output .= \'&nbsp;&nbsp;(\'. $category->count .\')\';
            if ( $args[\'show_last_update\'] ) {
                $format = \'Y-m-d\';
            $output .= \'&nbsp;&nbsp;\' . gmdate($format, $category->last_update_timestamp);
            }
            $output .= "</option>\\n";
        }
    }
?>
我的表单现在看起来像:

<form method="get" id="searchform" action="<?php echo home_url(); ?>">
    <input type="text" onclick="this.value=\'\';" onfocus="this.select()" onblur="this.value=!this.value?\'Product Search...\':this.value;" value="Product Search..." name="s" id="s" class="left" />
    <input type="image" src="<?php bloginfo(\'template_directory\') ?>/images/icosearch.png" id="searchsubmit" value=""/>
    <?php
        wp_dropdown_categories(
            array(
                \'child_of\' => 426,
                \'class\' => \'styled\',
                \'id\' => \'make\',
                \'name\' => \'make\',
                \'show_option_all\' => \'Make...\',
                \'taxonomy\' => \'product_cat\',
                \'walker\' => new dropdown
            ))
    ?>
    <?php
        wp_dropdown_categories(
            array(
                \'child_of\' => 427,
                \'class\' => \'styled\',
                \'id\' => \'model\',
                \'name\' => \'model\',
                \'show_option_all\' => \'Model...\',
                \'taxonomy\' => \'product_cat\',
                \'walker\' => new dropdown
            ))
    ?>
</form>
我的搜索页面现在看起来像:

<?php
    $tmp[]=$_GET["model"];
    $tmp[]=$_GET["make"];
    $product_cat=array();                                          
    foreach($tmp as $v) {
        if($v!="0")
        $product_cat[]=$v;
    }
    if(count($product_cat)>0) {
        $product_cat="&product_cat=".implode(",",$product_cat);    
    }
    else {
        $product_cat="";
    }                                                           
    $query=query_posts("s=$text".$product_cat);
    $count =count($query);
    if ($count == 0) { 
        echo \'No Results\'; 
    }
    elseif ($count == 1) { 
        echo \'\'.$count.\' Result\'; 
    } 
    else { 
        echo \'\'.$count.\' Results\'; 
    } 
?>

结束

相关推荐

NEXT_POST_LINK()中的EXCLUDE_CATEGORIES参数行为异常

我有一个Wordpress模板。php页面。该页面有“下一页”和“上一页”箭头,允许浏览所有帖子。我想将某些类别的帖子排除在“下一个”和“上一个”计算中。我有以下代码: // in single.php next_post_link( \'%link\', \'&larr; Previous\', false, \'11 and 13 and 15\'); 这应该会显示到下一篇文章的链接。第11、13和15类的职位不应按照the $ignore_categories para