是否有条件函数或其他解决方案来检查产品当前是否已过滤?
这样的事情会很棒:
if( is_filtered() ) echo 'Filters active';
如果函数返回活动过滤器(或数组)的数量或者为false,那就太棒了。
答案 0 :(得分:2)
感谢大卫·钱德拉·普纳马(David Chandra Purnama)将我推向了正确的方向,这是一个非常简单的功能:
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';
}
答案 1 :(得分:1)
您可以使用global $_chosen_attributes;
进行查询
WooCommerce“分层导航过滤器”仅在过滤器处于活动状态时显示。你可以查看代码“includes / widgets / class-wc-widget-layered-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. */
}
答案 2 :(得分:0)
is_filtered() 是 WooCommerce 的内置函数。
使用分层导航或价格滑块过滤产品时返回 true。 用例在这里
if ( is_filtered() ) {
echo esc_html__('Some filters are active.', 'text-domain');
} else {
echo esc_html__('No filters are active.', 'text-domain');
}