首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >通过Woocommerce中的产品属性slug值对获取产品变体id

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

Stack Overflow用户
提问于 2018-08-31 05:58:44
回答 2查看 4.2K关注 0票数 2

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

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

代码语言:javascript
复制
1) Size: medium, large
2) Color: blue, green

以及我的产品变体:

代码语言:javascript
复制
Variation id 1: medium > blue
Variation id 2: medium > green
Variation id 3: large > blue
Variation id 4: large > green

我想获得此术语组合的变体IDmedium > green..。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-08-31 20:15:55

以下函数使用非常简单的SQL查询从定义的产品属性“颜色”和“大小”术语段的变量产品中获取的变体ID:

代码语言:javascript
复制
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
    " );
}

代码放在活动子主题(或活动主题)的function.php文件中。经过测试,效果良好。

用法(2例)

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

$variation_id = get_产品_变化_id( 'large','blue',746 );

在可变产品单一产品页面上(不需要定义变量产品ID):

$variation_id = get_产品_变化_id( 'large','blue‘);

票数 6
EN

Stack Overflow用户

发布于 2018-08-31 06:36:47

我还没有测试,但这应该是接近那里或准备发货。

代码语言:javascript
复制
function get_variation_by($size, $color) {
  $args = array(
    'post_type' => 'product',
    'numberposts' => -1,
  );
  $product_posts = get_posts( $args );

  foreach ( $product_posts as $single_product_post ) {
    $_product = wc_get_product( $single_product_post->ID );
    if ($product_s->product_type != 'variable') continue;

    $avail_vars = $_product->get_available_variations();
    foreach ($avail_vars as $v)
      if ($v["attributes"]["attribute_pa_size"] == $size
          && $v["attributes"]["attribute_pa_color"] == $color)
        return $v;
  }
  return null;
}

$variation = get_variation_by( "large", "green");
$variation_id = $variation->variation_id;

如果你有产品_已经是变量产品的id,可以这样简化:

代码语言:javascript
复制
function get_variation_by($variable_product_id, size, $color) {
  $var_prod = wc_get_product( $variable_product_id );        
  $avail_vars = $var_prod->get_available_variations();

  foreach ($avail_vars as $v)
    if ($v["attributes"]["attribute_pa_size"] == $size
        && $v["attributes"]["attribute_pa_color"] == $color)
      return $v;

  return null;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52105913

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档