您有一个搜索表单,允许用户输入关键字,然后通过下拉列表选择分类。这是我的表格:
<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吗?我无法弄清楚为什么它会带来所有产品而不管城市......
答案 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' );