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

Woocommerce如何获取当前分类下所有产品的父SKU存入数组

解决方案

你原来的代码仅返回产品ID是因为fields参数指定了仅返回ID,而meta_query是用于条件筛选的参数,不能用来指定返回SKU字段,按照WooCommerce开发规范可使用以下两种方案实现需求:

方案1:官方标准写法(兼容性最佳)

先获取符合条件的产品ID,再遍历获取对应主产品SKU:

// 获取指定分类下所有已发布产品ID
$product_ids = get_posts( array(
    'post_type' => 'product',
    'numberposts' => -1,
    'post_status' => 'publish',
    'fields' => 'ids',
    'tax_query' => array(
        array(
            'taxonomy' => 'product_cat',
            'field' => 'slug',
            'terms' => 'tenisky',
            'operator' => 'IN',
        )
    ),
) );

$all_ids = [];
foreach ( $product_ids as $pid ) {
    $product = wc_get_product( $pid );
    if ( $product && $sku = $product->get_sku() ) {
        $all_ids[] = $sku;
    }
}

输出到数据层的代码不需要修改,直接使用$all_ids数组即可:

<?php echo "'" . implode ( "', '", $all_ids ) . "'"; ?>

方案2:SQL直接查询(性能更高,适合产品量大的站点)

跳过循环获取产品对象的步骤,直接从数据库查询符合条件的SKU:

global $wpdb;
$all_ids = $wpdb->get_col( "
    SELECT pm.meta_value 
    FROM {$wpdb->posts} p
    JOIN {$wpdb->postmeta} pm ON p.ID = pm.post_id AND pm.meta_key = '_sku' AND pm.meta_value != ''
    JOIN {$wpdb->term_relationships} tr ON p.ID = tr.object_id
    JOIN {$wpdb->term_taxonomy} tt ON tr.term_taxonomy_id = tt.term_taxonomy_id
    JOIN {$wpdb->terms} t ON tt.term_id = t.term_id
    WHERE p.post_type = 'product' 
    AND p.post_status = 'publish'
    AND tt.taxonomy = 'product_cat'
    AND t.slug = 'tenisky'
" );

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 07:36:03