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

如何修改WooCommerce查询代码获取相似SKU对应产品的颜色属性

WooCommerce 相似SKU产品同时获取颜色属性调整方案

前置修正

你当前代码存在笔误:函数定义时命名为 wc_get_products_sku_img,调用时写的是 wc_get_product_skus,需要先统一名称,否则会触发函数不存在的报错。


方案1:最小改动实现(兼容性更高,推荐)

无需修改现有查询函数,直接在循环中通过WooCommerce原生方法获取颜色属性即可,适配全局属性和自定义属性两种场景:

global $product;
// 修正函数名和定义保持一致
$results = wc_get_products_sku_img('21.127.');

foreach ( $results as $result ) {
    $product_id  = $result->id;
    $product_sku = $result->sku;
    $product     = wc_get_product( $product_id );
    
    // 场景1:颜色是全局属性,slug默认是pa_color,可根据你后台的实际slug替换
    $colors = wc_get_product_terms( $product_id, 'pa_color', array( 'fields' => 'names' ) );
    $color = !empty($colors) ? reset($colors) : '无颜色信息';

    // 场景2:颜色是自定义产品属性,把下面注释打开,上面场景1的代码注释即可,'颜色'替换为你后台设置的属性名称
    // $attributes = $product->get_attributes();
    // $color_attr = isset($attributes['颜色']) ? $attributes['颜色'] : '';
    // $color = $color_attr ? implode(',', $color_attr->get_options()) : '无颜色信息';

    echo 'Sku Code :'. $product_sku . ' Color : ' . $color . '<br>'; 
}

方案2:优化SQL查询(性能更高,适合数据量大的场景)

直接修改查询函数,关联属性表一次性返回SKU、产品ID、颜色数据,避免循环中重复查询数据库:

第一步:修改functions.php中的查询函数

function wc_get_products_sku_img( $sku_excerpt ) {
    global $wpdb;

    return $wpdb->get_results( $wpdb->prepare( "
        SELECT p.ID as id, pm.meta_value as sku, t.name as color
        FROM {$wpdb->prefix}posts p
        INNER JOIN {$wpdb->prefix}postmeta pm
            ON p.ID = pm.post_id
        LEFT JOIN {$wpdb->prefix}term_relationships tr
            ON p.ID = tr.object_id
        LEFT JOIN {$wpdb->prefix}term_taxonomy tt
            ON tr.term_taxonomy_id = tt.term_taxonomy_id
            AND tt.taxonomy = 'pa_color'
        LEFT JOIN {$wpdb->prefix}terms t
            ON tt.term_id = t.term_id
        WHERE p.post_type = 'product'
        AND p.post_status = 'publish'
        AND pm.meta_key = '_sku'
        AND pm.meta_value LIKE '%s'
        ", '%'.$sku_excerpt.'%' ) );
}

第二步:调用代码直接取返回的颜色字段

$results = wc_get_products_sku_img('21.127.');
foreach ( $results as $result ) {
    $color = !empty($result->color) ? $result->color : '无颜色信息';
    echo 'Sku Code :'. $result->sku . ' Color : ' . $color . '<br>'; 
}

注意事项

  • 代码里的属性slug/名称需要和你WooCommerce后台实际设置的颜色属性对应,否则会获取不到数据
  • 如果单个产品绑定了多个颜色值,代码默认取第一个值/逗号拼接所有值,可根据你的展示需求自行调整逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 02:24:07