HUSKY - Product Filter for WooCommerce

如何修复使用筛选时 WooCommerce 分页显示过多页数

如果在使用 WOOF(HUSKY)产品筛选时,WooCommerce 的分页显示错误的页码,本指南将为您解决此问题。

问题描述

症状:当使用 WOOF/HUSKY 筛选产品时,分页显示的页面数多于实际存在的页面数。

示例:

  • 筛选结果显示 15 个产品(应为 2 页)
  • 分页显示:1, 2, 3, 4, 5…(超过 5 页)
  • 点击第 3 页及以后显示空结果或“未找到产品”

原因:WooCommerce 的分页是基于整个产品目录而非筛选结果来计算页码的。WOOF 对产品进行了筛选,但分页并未相应更新。

解决方案

添加以下代码,强制分页使用来自 WOOF 筛选查询的正确页码。

第一步:添加代码

将此代码添加到子主题的 functions.php 中:

/**
 * Fix pagination page count when using WOOF filtering
 * Forces pagination to use correct max_num_pages from filtered query
 */
add_filter('woocommerce_pagination_args', function($args) {
    global $wp_query, $WOOF;
    
    // Check if WOOF filtering is active
    if ($WOOF->is_isset_in_request_data($WOOF->get_swoof_search_slug())) {
        // Force correct page count from HUSKY filtered query
        $args['total'] = $wp_query->max_num_pages;
    }
    
    return $args;
}, 999);

优先级 999:确保此代码在其他分页修改之后运行。

第二步:清除缓存

  1. 清除 WordPress 缓存(如果使用了缓存插件)
  2. 清除浏览器缓存(Ctrl+F5)
  3. 测试筛选结果

第三步:验证

  1. 应用任意 WOOF 筛选器(产品分类、价格、属性)
  2. 检查页面底部的分页
  3. 页码现在应与实际筛选结果匹配

修复前:

Showing 12 products Pages: 1 2 3 4 5 6 7 8 (wrong!)

修复后:

Showing 12 products Pages: 1 2 (correct!)

工作原理

if ($WOOF->is_isset_in_request_data($WOOF->get_swoof_search_slug())) {

功能:通过检查 URL 中的 WOOF 搜索参数来判断 WOOF 筛选是否当前处于活动状态。

$args['total'] = $wp_query->max_num_pages;

功能:使用来自筛选后的 WordPress 查询的实际页码覆盖 WooCommerce 的分页总数。

为什么是优先级 999?某些主题或插件会修改分页。优先级 999 确保此代码最后运行并拥有更高优先级。

 

故障排查

分页仍然错误

问题:添加代码后页码仍然不正确

可能的原因:

  1. 代码未放入子主题
    • 确认您正在编辑子主题的 functions.php
    • 父主题的更新会擦除不在子主题中的代码
  2. 缓存未清除
    • 清除 WordPress 缓存插件
    • 清除服务器缓存(主机控制面板)
    • 在无痕模式下测试
  3. 主题覆盖了分页
    • 某些主题使用自定义分页函数
    • 尝试将优先级提高到 9999
    • 查看主题文档

解决方案:如果主题冲突,增加优先级:

add_filter('woocommerce_pagination_args', function($args) {
    // ... code ...
}, 9999); // Higher priority

 

何时需要此修复

您需要此修复,如果:

  • ✅ 使用 WOOF/HUSKY 进行产品筛选
  • ✅ 分页显示多于实际存在的页面数
  • ✅ 点击较大的页码时显示无产品
  • ✅ 筛选结果数与分页不匹配