2015-10-20 81 views
2

是否有條件功能或其他解決方案來檢查產品目前是否被過濾?Woocommerce檢查是否過濾產品

像這樣將是巨大的:如果函數返回有源濾波器(或陣列)或假的數量

if(is_filtered()) echo 'Filters active'; 

驚人的那樣。

回答

0

感謝David錢德拉普爾納馬誰把我推在正確的方向是一個非常簡單的功能使用方法:

function active_woocommerce_filters() { 

    global $_chosen_attributes; 

    return count($_chosen_attributes); 

} 

該函數返回有源濾波器的數量,以便它可以這樣使用:

if(active_woocommerce_filters()) { 

    echo str_replace('%s', active_woocommerce_filters(), 'There are %s filters active'); 

} else { 

    echo 'There are no filters active'; 

} 
+0

這不工作對我來說與店面主題。我把函數放在functions.php中,並試圖在其中一個模板文件中使用它。無論過濾器是否處於活動狀態並在url中可見,它都會返回0。 –

+1

好的,我找到了解決方案 - 您可以使用'$ _chosen_attributes = WC_Query :: get_layered_nav_chosen_attributes();'而不是全局變量,這在我的情況下不存在。 –

+0

是的,你是對的。可能這在WC中已經改變 –

1

您可以使用global $_chosen_attributes; 進行檢查WooCommerce僅在過濾器處於活動狀態時顯示「分層導航過濾器」。你可以檢查代碼「包括/部件/類-WC-部件 - 層狀NAV-filters.php」:這裏

global $_chosen_attributes; 

if (! is_post_type_archive('product') && ! is_tax(get_object_taxonomies('product'))) { 
    return; 
} 

// Price 
$min_price = isset($_GET['min_price']) ? esc_attr($_GET['min_price']) : 0; 
$max_price = isset($_GET['max_price']) ? esc_attr($_GET['max_price']) : 0; 

if (0 < count($_chosen_attributes) || 0 < $min_price || 0 < $max_price) { 
    /* Your Code Here. */ 
} 
+0

感謝隊友,這就是我需要的 –