You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WooCommerce子分类切换分页后消失问题排查求助

问题分析与解决方案

核心原因

woocommerce_maybe_show_product_subcategories() 这个WooCommerce内置函数默认只在分类页的第一页显示子分类。它内部会检查 is_paged() 函数的返回值:当处于分页页面(比如paged=2)时,is_paged() 返回true,函数会直接返回空内容,导致子分类消失。

WooCommerce的这个设计逻辑是默认认为用户进入分页后,更关注产品列表而非重复显示子分类导航。

解决办法

方法1:手动获取子分类(推荐,灵活可控)

放弃依赖原函数,直接通过get_terms()获取当前分类的子分类,不受分页状态影响。替换你原来的代码为:

<?php
// 获取当前访问的分类对象
$current_cat = get_queried_object();

// 验证当前是否是产品分类页
if ( $current_cat && is_a( $current_cat, 'WP_Term' ) && $current_cat->taxonomy === 'product_cat' ) {
    // 获取当前分类的子分类(可根据需求调整参数)
    $subcats = get_terms([
        'taxonomy'   => 'product_cat',
        'parent'     => $current_cat->term_id,
        'hide_empty' => true, // 仅显示有产品的子分类,改为false则显示所有子分类
        'orderby'    => 'name',
        'order'      => 'ASC'
    ]);

    if ( ! empty( $subcats ) && ! is_wp_error( $subcats ) ) {
        echo '<div class="products subcategories row custom-category-align-and-border">';
        foreach ( $subcats as $subcat ) {
            $subcat_link = get_term_link( $subcat );
            // 获取子分类缩略图
            $thumb_id = get_term_meta( $subcat->term_id, 'thumbnail_id', true );
            $thumb_img = wp_get_attachment_image_src( $thumb_id, 'woocommerce_thumbnail' );
    ?>
            <div class="product-category product">
                <?php if ( $thumb_img ) : ?>
                    <img src="<?php echo esc_url( $thumb_img[0] ); ?>" alt="<?php echo esc_attr( $subcat->name ); ?>" />
                <?php endif; ?>
                <h2 class="woocommerce-loop-category__title">
                    <a href="<?php echo esc_url( $subcat_link ); ?>"><?php echo esc_html( $subcat->name ); ?></a>
                </h2>
                <span class="count"><?php echo esc_html( $subcat->count ); ?> <?php esc_html_e( 'products', 'woocommerce' ); ?></span>
            </div>
    <?php
        }
        echo '</div>';
    }
}
?>

方法2:修改原函数的判断逻辑(不推荐,影响全局)

如果一定要保留原函数的使用方式,可以通过钩子强制它在所有分页显示子分类,将以下代码添加到主题的functions.php文件中:

add_filter( 'woocommerce_maybe_show_product_subcategories', 'show_subcats_on_all_paged_pages', 10, 1 );
function show_subcats_on_all_paged_pages( $output ) {
    // 仅在产品分类页生效
    if ( is_product_category() ) {
        $current_cat = get_queried_object();
        ob_start();
        // 调用WooCommerce内置的子分类输出模板
        woocommerce_product_subcategories( ['parent_id' => $current_cat->term_id] );
        $output = ob_get_clean();
    }
    return $output;
}

注意:这个方法会修改WooCommerce全局的子分类显示逻辑,可能影响其他页面的表现,需谨慎使用。

内容的提问来源于stack exchange,提问作者Miroslav Vasicek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 00:22:46