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
相关产品推荐
相关产品推荐

