通过 Woocommerce 中的产品属性 slug 值对获取产品变体 ID

Sev*_*evi 2 php sql wordpress product woocommerce

如何通过分类术语获取产品变体 ID?

例如,如果我有两个分类法及其术语:

1) Size: medium, large
2) Color: blue, green
Run Code Online (Sandbox Code Playgroud)

我的产品变体:

Variation id 1: medium > blue
Variation id 2: medium > green
Variation id 3: large > blue
Variation id 4: large > green
Run Code Online (Sandbox Code Playgroud)

我想获得此条款组合的变体 ID medium > green

Loi*_*tec 6

以下函数使用非常轻量级的 SQL 查询从变量产品中获取已定义产品属性“颜色”和“尺寸”术语 slug 的变体 ID:

function get_product_variation_id( $size, $color, $product_id = 0 ) {
    global $wpdb;

    if ( $product_id == 0 )
        $product_id = get_the_id();

    return $wpdb->get_var( "
        SELECT p.ID
        FROM {$wpdb->prefix}posts as p
        JOIN {$wpdb->prefix}postmeta as pm ON p.ID = pm.post_id
        JOIN {$wpdb->prefix}postmeta as pm2 ON p.ID = pm2.post_id
        WHERE pm.meta_key = 'attribute_pa_color'
        AND pm.meta_value LIKE '$color'
        AND pm2.meta_key = 'attribute_pa_size'
        AND pm2.meta_value LIKE '$size'
        AND p.post_parent = $product_id
    " );
}
Run Code Online (Sandbox Code Playgroud)

代码位于活动子主题(或活动主题)的 function.php 文件中。测试和工作。


用法(2 例)

  1. 从定义的变量产品 ID(其中746是父变量产品 ID):

    $variation_id = get_product_variation_id('大','蓝色',746);

  2. 在可变产品单品页面(无需定义可变产品ID)

    $variation_id = get_product_variation_id('大','蓝色');