Wordpress 检查是否过滤产品

Wordpress 检查是否过滤产品,wordpress,woocommerce,Wordpress,Woocommerce,是否有条件函数或其他解决方案来检查产品当前是否已过滤 像这样的东西会很棒: if( is_filtered() ) echo 'Filters active'; 如果函数返回活动筛选器(或数组)的数量或false,则会令人惊讶。您可以使用global$\u selected\u属性进行检查 “分层导航过滤器”仅在过滤器处于活动状态时显示。您可以检查代码“includes/widgets/class wc widget layered nav filters.php”: global$\u选择\

是否有条件函数或其他解决方案来检查产品当前是否已过滤

像这样的东西会很棒:

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

如果函数返回活动筛选器(或数组)的数量或false,则会令人惊讶。

您可以使用
global$\u selected\u属性进行检查
“分层导航过滤器”仅在过滤器处于活动状态时显示。您可以检查代码“includes/widgets/class wc widget layered nav filters.php”:

global$\u选择\u属性;
如果(!is_post_type_archive('product')和&!is_tax(get_object_tax('product'))){
返回;
}
//价格
$min\u price=isset($u GET['min\u price'])?esc_attr($_GET['min_price']):0;
$max\u price=isset($u GET['max\u price'])?esc_attr($_GET['max_price']):0;
如果(0<计数($所选属性)| | 0<$最低价格| | 0<$最高价格){
/*你的代码在这里*/
}

感谢David Chandra Purnama将我推向了正确的方向,这里有一个非常简单的函数可以使用:

function active_woocommerce_filters() {

    // for older WC versions
    // global $_chosen_attributes;

    $_chosen_attributes = WC_Query::get_layered_nav_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';

}
编辑:

正如Artur Czyżewski指出的那样,
$\u selected\u attributes
全局变量在他的安装中不可用。这很可能是由于对WooCommerce的更改,可能会影响所有较新版本,因此我更新了上面的
活动的\u WooCommerce\u过滤器。

是\u过滤的()是WooCommerce的内置函数

当使用分层导航或价格滑块过滤产品时,返回true。 这里的用例

if ( is_filtered() ) {
   echo esc_html__('Some filters are active.', 'text-domain');
} else {
   echo esc_html__('No filters are active.', 'text-domain');
}

谢谢,伙计,这正是我所需要的。这对我来说不适合店面主题。我将函数放在functions.php中,并尝试在一个模板文件中使用它。无论过滤器是否处于活动状态且在url中可见,它都返回0。好的,我找到了解决方案-您可以使用
$\u selected\u attributes=WC\u Query::get\u layered\u nav\u selected\u attributes()
而不是全局变量,全局变量在我的例子中并不存在。@ArturCzyżewski:我的答案很旧,可能WC中有些东西已经改变了。我将把它添加为编辑/注释
if ( is_filtered() ) {
   echo esc_html__('Some filters are active.', 'text-domain');
} else {
   echo esc_html__('No filters are active.', 'text-domain');
}