【问题标题】:Woocommerce Product Search with TaxonomyWoocommerce 产品分类搜索
【发布时间】:2014-06-05 23:55:13
【问题描述】:

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

    <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 吗?我不明白为什么它带来了所有产品,无论城市...

【问题讨论】:

    标签: php wordpress woocommerce


    【解决方案1】:

    我需要使用 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' );
    

    【讨论】:

      猜你喜欢
      • 2017-11-13
      • 1970-01-01
      • 2016-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-28
      • 2016-09-26
      • 2020-12-07
      相关资源
      最近更新 更多