使用分类法进行Woocommerce产品搜索

时间:2014-06-03 21:34:20

标签: php wordpress woocommerce

您有一个搜索表单,允许用户输入关键字,然后通过下拉列表选择分类。这是我的表格:

    <form name="myCity" id="myCity" action="http://mywebsite.com/"  method="post">

<div class="search-area">

    <div class="container">

        <div class="row-fluid">
           <div class="span4">
                <label><i class="icon-search"></i></label>
                <div class="search-area-division search-area-division-input">
                    <input type="text" value="<?php echo get_search_query(); ?>" name="s" id="s" placeholder="I am searching for..."/>

                </div>
            </div>
            <div class="span3">
                <label><i class="icon-map-marker"></i></label>

            <?php
$args = array('taxonomy' => 'pa_city');
wp_dropdown_categories( $args );
    ?>

            </div>
        </div>           
                <noscript><input type="hidden" onclick="WriteCookie()" class="btn btn-block btn-white search-btn"  value="<?php echo esc_attr__( 'Search' ); ?>"/></noscript>
                <input type="hidden" name="post_type" value="product" />

    </div>
    </div>

如果我在布尔海德市搜索迷你高尔夫,

它返回URL: http://mywebsite.com/?s=mini-golf&cat=14&post_type=product

当它返回带有迷你高尔夫标签的产品时,它会返回所有产品,无论城市是否与迷你高尔夫相匹配。我已经尝试了很多方法来过滤结果,此时我只是在旋转我的车轮。

我使用的分类法是pa_city。即使网址是 http://mywebsite.com/?s=mini-golf&pa_city=bullhead-city&post_type=product

它做同样的事情。

无论我写这个方式,它都不会排除搜索中的其他城市。我应该试试NOTIN吗?我无法弄清楚为什么它会带来所有产品而不管城市......

1 个答案:

答案 0 :(得分:0)

我需要使用pre_get_posts

在我的functions.php中进一步过滤查询

哇,这是令人沮丧的。

    function my_location( $q ){
if (!$q->is_main_query() ) 
    return;
if ($q->is_search()) {
            $city = isset( $_COOKIE['city'] ) ? $_COOKIE['city'] : 'not set';

        $q->set( 'tax_query', array(array(          'taxonomy' => 'pa_city',            'field' => 'slug',          'terms' => array( $city ),          'operator' => 'IN'      )));    
    return; 
    }
if ($q->is_archive() ){ 
    if ( ! is_admin() ) {           
            if (empty($_COOKIE['city'] )) {
                echo "<script>window.location.href = 'http://mywebsite.com/select-city/';</script>";
                exit();
            }
        $city = isset( $_COOKIE['city'] ) ? $_COOKIE['city'] : 'not set';

        $q->set( 'tax_query', array(array(          'taxonomy' => 'pa_city',            'field' => 'slug',          'terms' => array( $city ),          'operator' => 'IN'      )));    
    }}
}

    add_action( 'pre_get_posts', 'my_location' );