[英]Woocommerce Product Search with Taxonomy
嗨,您有一個搜索表單,該表單允許用戶輸入關鍵字,然后通過下拉列表選擇分類。 這是我的表格:
<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嗎? 我不知道為什么它將帶來所有產品,而不論城市...
我需要使用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' );
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.