【问题标题】:WooCommerce: Getting active product filtersWooCommerce:获取有效的产品过滤器
【发布时间】:2025-12-27 08:05:12
【问题描述】:

在 WooCommerce 产品循环中,我们可以通过将 ?pa_{attribute}={value} 添加到 URL 来更改循环。 我正在尝试创建一个自定义产品过滤器,我需要知道哪些过滤器目前处于活动状态,因此我可以创建一个函数来更改 URL 而不会出错。

是否可以将活动的 WooCommerce 过滤器输出到数组中?

【问题讨论】:

  • 使用 echo current_filter(); , 以获取有关当前正在运行的过滤器的信息。
  • 这是输出当前 PHP 过滤器。我正在尝试找出哪些是活动的产品过滤器(例如pa_size
  • 您的意思是在可变产品或其他选项中选择了哪些属性?
  • 假设您的 WooCommerce 产品位于 URL /shop/。然后,如果您将 URL 更改为 /shop?pa_color=red,WooCommerce 将仅输出具有 red 作为 color 属性的产品。这就是我要存储在数组中的内容(或获取这些活动pa_ 过滤器的列表)

标签: php wordpress woocommerce


【解决方案1】:

您可以使用pre_get_posts过滤钩子根据过滤器更改列表。

将以下代码粘贴到您当前的活动主题 functions.php 文件中:

 function filter_pre_get_posts( $wp_query ) {

   if(is_shop()){
    $filter_term = $_GET['pa_color'];
    if (isset($filter_term ) && !empty($filter_term )) {
        $wp_query->set('tax_query', array(
            array(
                'taxonomy' => 'pa_color',
                'field' => 'slug',
                'terms' => $filter_term ,
                'include_children' => true,
                'operator' => 'IN'
            )
        ));
    }
}

add_action('pre_get_posts', 'filter_pre_get_posts' );

希望对你有帮助。

【讨论】:

  • $filter_term = $_GET['pa_color']; 足以让我检查过滤器是否处于活动状态。非常感谢!