HUSKY - Product Filter for WooCommerce

WooCommerceフィルタリング時にページネーションが多すぎるページ数を表示する問題の修正方法

WOOF(HUSKY)商品フィルター使用時にWooCommerceのページネーションが誤ったページ番号を表示する場合、このガイドで修正できます。

問題

症状:WOOF/HUSKYで商品をフィルターすると、ページネーションが実際よりも多くのページ数を表示します。

例:

  • フィルターで15件の商品が表示される(本来は2ページ)
  • ページネーションの表示:1, 2, 3, 4, 5…(5ページ以上)
  • 3ページ目以降をクリックすると、空の結果または「商品が見つかりません」と表示される

原因: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);

優先度999:他のページネーション変更の後に実行されるようにします。

ステップ2:キャッシュをクリア

  1. WordPressキャッシュをクリア(キャッシュプラグインを使用している場合)
  2. ブラウザキャッシュをクリア(Ctrl+F5)
  3. フィルター結果をテスト

ステップ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を商品フィルターに使用している
  • ✅ ページネーションが実際より多くのページを表示する
  • ✅ 大きいページ番号をクリックすると商品が表示されない
  • ✅ フィルター結果の件数がページネーションと一致しない