如何从自定义产品循环中获取产品版本ID。 我有类似的变化属性,
{ 'pa_color'=>'red','pa_size'=>'large'}
答案 0 :(得分:2)
要匹配的属性集
[
'attribute_pa_color' => 'blue',
'attribute_pa_size' => 'small',
];
下面是我最终创建的用于实现此功能的功能:
/**
* Find matching product variation
*
* @param $product_id
* @param $attributes
* @return int
*/
function find_matching_product_variation_id($product_id, $attributes)
{
return (new \WC_Product_Data_Store_CPT())->find_matching_product_variation(
new \WC_Product($product_id),
$attributes
);
}
答案 1 :(得分:1)
这里有find_matching_product_variation的完整示例代码!
$product_id = 1; //Added Specific Product id
$match_attributes = array(
"attribute_pa_color" => 'blue',
"attribute_pa_size" => 'Large'
);
$data_store = WC_Data_Store::load( 'product' );
$variation_id = $data_store->find_matching_product_variation(
new \WC_Product( $product_id),$match_attributes
);
答案 2 :(得分:0)
使用产品ID尝试此代码
/* Get variation attribute based on product ID */
$product = new WC_Product_Variable( $product_id );
$variations = $product->get_available_variations();
$var_data = [];
foreach ($variations as $variation) {
if($variation[‘variation_id’] == $variation_id){
$var_data[] = $variation[‘attributes’];
}
}
/*Get attributes from loop*/
foreach($var_data[0] as $attrName => $var_name) {
echo $var_name;
}
希望这对您有所帮助,让我知道结果。
答案 3 :(得分:0)
没有足够的声誉来发表评论,因此发布以防万一。
我一直在使用@mujuonly's answer,效果很好,但是WC团队在3.6.0版中更改了与WC_Product_Data_Store_CPT
相关的内容。更改日志 Performance中的此项可能-find_matching_product_variation
变化查找功能的改进速度。 #22423 与https://github.com/woocommerce/woocommerce/pull/22423有关。
似乎==
在属性比较中已经===
,这意味着要修复它,唯一需要做的就是确保以与存储在数据库中相同的方式传递属性。据我了解,它是与数据库中的slug字段进行比较的,该字段似乎始终是小写字母(按字母顺序),因此只需在将属性传递给@mujuonly's function之前通过strtolower
传递属性,技巧。
例如
function get_variation_id_from_attributes( $product_id, $size, $color ) {
$color = strtolower($color);
$size = strtolower($size)
$variation_id = find_matching_product_variation_id ( $product_id, array(
'attribute_pa_color' => $color,
'attribute_pa_size' => $size
));
return $variation_id;
}
function find_matching_product_variation_id($product_id, $attributes)
{
return (new \WC_Product_Data_Store_CPT())->find_matching_product_variation(
new \WC_Product($product_id),
$attributes
);
}