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

为WooCommerce自定义库存产品短代码添加分页功能

问题原因

你当前的实现方式无法生效分页的核心原因有两点:

  1. 你通过get_posts获取产品ID后,将固定ID列表传给[products]短代码,此时短代码的查询是基于静态ID集合,无法对其进行分页逻辑处理。
  2. get_posts默认不会处理paged参数,导致分页上下文无法被正确识别。
可行解决方案

方案一:直接构建带分页的产品查询(完全可控)

通过WP_Query直接查询库存为1的产品,手动渲染产品列表和分页组件:

add_shortcode( 'limit_stock_products', 'limit_of_stock_products_shortcode' );
function limit_of_stock_products_shortcode() {
    // 获取当前页码,兼容首页分页
    $paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;

    // 构造产品查询参数
    $args = array(
        'post_type'      => 'product',
        'posts_per_page' => 4,
        'post_status'    => 'publish',
        'paged'          => $paged,
        'meta_query'     => array(
            array(
                'key'     => '_stock',
                'type'    => 'numeric',
                'value'   => 1,
                'compare' => '=',
            ),
        ),
    );

    $products_query = new WP_Query( $args );
    ob_start();

    if ( $products_query->have_posts() ) {
        // 开启WooCommerce产品循环容器(保持样式一致性)
        woocommerce_product_loop_start();
        
        while ( $products_query->have_posts() ) {
            $products_query->the_post();
            // 调用WooCommerce产品模板
            wc_get_template_part( 'content', 'product' );
        }

        woocommerce_product_loop_end();

        // 输出WooCommerce风格分页
        woocommerce_pagination( array(
            'total'   => $products_query->max_num_pages,
            'current' => $paged,
        ) );
    } else {
        echo '<p>暂无库存数量为1的产品</p>';
    }

    wp_reset_postdata();
    return ob_get_clean();
}

方案二:利用[products]短代码原生参数(简洁高效)

WooCommerce的[products]短代码支持query_args参数,可直接传递完整查询条件,配合原生分页参数生效:

add_shortcode( 'limit_stock_products', 'limit_of_stock_products_shortcode' );
function limit_of_stock_products_shortcode() {
    $paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;

    // 构造查询参数数组
    $query_args = array(
        'meta_query' => array(
            array(
                'key'     => '_stock',
                'type'    => 'numeric',
                'value'   => 1,
                'compare' => '=',
            ),
        ),
        'paged' => $paged,
    );

    // 将数组转为JSON字符串传递给query_args
    $query_args_json = json_encode( $query_args );

    return do_shortcode( "[products posts_per_page='4' pagination='true' query_args='$query_args_json']" );
}
注意事项
  • 测试时需确保库存为1的产品数量超过4个,否则分页组件不会显示。
  • 若方案一分页样式异常,可检查主题是否兼容WooCommerce的分页样式,或替换woocommerce_pagination()为WordPress原生的paginate_links()函数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 01:01:10