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

WooCommerce按属性显示关联产品数量异常及缺货排除问题

WooCommerce按属性显示关联产品的问题解决

一、关联产品数量不固定的原因

  • 核心原因:get_posts查询到的符合属性条件的有效产品总数不足12个——比如你的pa_kolekcja属性下,除去当前产品外,实际只有6-7个已发布的公开产品,自然没法返回12个结果。
  • 额外影响因素:原代码用orderby => rand随机排序,每次查询会随机选取产品,但如果符合条件的总数量本身不够,结果数就会少于设置的posts_per_page。另外get_posts默认会排除草稿、私有状态的产品,WooCommerce里标记为“目录不可见”的产品也会被过滤,这些都会进一步减少可返回的产品数量。

二、如何排除缺货商品

修改get_posts的参数,添加meta_query过滤库存状态,同时兼容“不管理库存”的产品(这类产品WooCommerce默认视为有货)。修改后的完整代码如下:

add_filter( 'woocommerce_related_products', 'related_products_by_attribute', 10, 3 );
function related_products_by_attribute( $related_posts, $product_id, $args ) {
    $taxonomy   = 'pa_kolekcja'; // 目标产品属性分类法

    $term_slugs = wp_get_post_terms( $product_id, $taxonomy, ['fields' => 'slugs'] ); // 获取当前产品的属性标签

    if ( empty($term_slugs) )
        return $related_posts;

    $posts_ids = get_posts( array(
        'post_type'            => 'product',
        'ignore_sticky_posts'  => 1,
        'posts_per_page'       => 12, // 设置你需要的关联产品数量
        'post__not_in'         => array( $product_id ),
        'post_status'          => 'publish', // 仅查询已发布的公开产品
        'tax_query'            => array( array(
            'taxonomy' => $taxonomy,
            'field'    => 'slug',
            'terms'    => $term_slugs,
        ) ),
        'meta_query'           => array(
            'relation' => 'OR',
            // 保留管理库存且有货的产品
            array(
                'key'     => '_stock_status',
                'value'   => 'instock',
                'compare' => '=',
            ),
            // 保留不管理库存的产品(默认视为有货,不需要可删除此条件)
            array(
                'key'     => '_manage_stock',
                'value'   => 'no',
                'compare' => '=',
            )
        ),
        'fields'  => 'ids',
        'orderby' => 'rand',
    ) );

    return count($posts_ids) > 0 ? $posts_ids : $related_posts;
}

代码说明

  • 新增post_status => 'publish':确保只查询已发布的公开产品,避免草稿、私有产品干扰结果数量。
  • meta_query双条件:
    1. 筛选库存状态为instock的产品(针对开启库存管理的商品);
    2. 筛选不管理库存的产品(WooCommerce默认这类商品为有货,若不需要可直接删除此条件)。

补充验证数量问题的方法

如果设置12个后还是无法达到预期,可手动统计:

  1. 进入WooCommerce产品列表,筛选pa_kolekcja属性为当前产品的标签;
  2. 去掉当前产品,统计剩余已发布、有货的产品总数——如果总数少于12,就是产品基数不足,只能显示现有数量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 04:00:27