如何修复 WOOF 过滤时分页显示过多页面
如果您的 WooCommerce 分页在使用 WOOF (HUSKY) 产品过滤器时显示不正确的页码,本指南将解决此问题。
问题
Symptom: 当使用 WOOF/HUSKY 筛选产品时,分页显示的页面比实际存在的要多。
示例:
- 筛选器显示 15 个产品(应为 2 页)
- 分页显示:1, 2, 3, 4, 5… (5+ 页)
- Clicking page 3+ shows empty results or “No products found”
正在发生什么: WooCommerce 的分页是基于总产品目录而不是筛选结果来计算页数的。WOOF 会筛选产品,但分页不会相应更新。
解决方案
添加此代码以强制分页使用 WOOF 过滤查询的正确页数。
步骤 1:添加代码
将此添加到您的子主题的 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);
Priority 999: 确保这在其他分页修改之后运行。
步骤 2:清除缓存
- 清除 WordPress 缓存(如果使用缓存插件)
- 清除浏览器缓存 (Ctrl+F5)
- 测试过滤后的结果
Step 3: Verify
- 应用任何 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 确保此代码最后运行并具有优先权。
故障排除
分页仍然错误
Problem: 添加代码后页面计数仍不正确
Possible causes:
- 代码不在子主题中
- 验证您是否正在编辑子主题的 functions.php
- 如果不在子主题中,父主题更新将擦除代码
- 缓存未清除
- 清除 WordPress 缓存插件
- 清除服务器缓存(主机面板)
- 在隐身模式下测试
- Theme overriding pagination
- 一些主题使用自定义分页函数
- 尝试将优先级提高到 9999
- 检查主题文档
解决方案: Increase priority if theme conflicts:
add_filter('woocommerce_pagination_args', function($args) {
// ... code ...
}, 9999); // Higher priority
何时需要此修复
You need this fix if:
- ✅ 使用 WOOF/HUSKY 进行产品过滤
- ✅ 分页显示的页数超过实际页数
- ✅ 点击较高的页码没有显示产品
- ✅ 过滤后的结果计数与分页不匹配