如何修复使用筛选时 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:确保此代码在其他分页修改之后运行。
第二步:清除缓存
- 清除 WordPress 缓存(如果使用了缓存插件)
- 清除浏览器缓存(Ctrl+F5)
- 测试筛选结果
第三步:验证
- 应用任意 WOOF 筛选器(产品分类、价格、属性)
- 检查页面底部的分页
- 页码现在应与实际筛选结果匹配
修复前:
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 确保此代码最后运行并拥有更高优先级。
故障排查
分页仍然错误
问题:添加代码后页码仍然不正确
可能的原因:
- 代码未放入子主题
- 确认您正在编辑子主题的 functions.php
- 父主题的更新会擦除不在子主题中的代码
- 缓存未清除
- 清除 WordPress 缓存插件
- 清除服务器缓存(主机控制面板)
- 在无痕模式下测试
- 主题覆盖了分页
- 某些主题使用自定义分页函数
- 尝试将优先级提高到 9999
- 查看主题文档
解决方案:如果主题冲突,增加优先级:
add_filter('woocommerce_pagination_args', function($args) {
// ... code ...
}, 9999); // Higher priority
何时需要此修复
您需要此修复,如果:
- ✅ 使用 WOOF/HUSKY 进行产品筛选
- ✅ 分页显示多于实际存在的页面数
- ✅ 点击较大的页码时显示无产品
- ✅ 筛选结果数与分页不匹配