Php 通过Woocommerce中的产品属性段塞值对获取产品变体id
如何通过分类术语获取产品变体ID 例如,如果我有两个分类法及其术语:Php 通过Woocommerce中的产品属性段塞值对获取产品变体id,php,sql,wordpress,woocommerce,product,Php,Sql,Wordpress,Woocommerce,Product,如何通过分类术语获取产品变体ID 例如,如果我有两个分类法及其术语: 1) Size: medium, large 2) Color: blue, green 以及我的产品变体: Variation id 1: medium > blue Variation id 2: medium > green Variation id 3: large > blue Variation id 4: large > green 我想获得这个术语组合的变体IDmedium>gree
1) Size: medium, large
2) Color: blue, green
以及我的产品变体:
Variation id 1: medium > blue
Variation id 2: medium > green
Variation id 3: large > blue
Variation id 4: large > green
我想获得这个术语组合的变体ID
medium>green
我还没有测试过,但它应该就在那里,或者可以发货了
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;
如果您已经拥有变量product的product_id,您可以这样简化:
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;
}
以下函数使用一个非常简单的SQL查询从定义的产品属性“颜色”和“大小”术语段塞的变量产品中获取变量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
" );
}
代码进入活动子主题(或活动主题)的function.php文件。测试和工作
用法(2例示例):
746
是父变量产品ID):
$variation\u id=获取产品变量id('large','blue',746)
谢谢,我有产品id,但这不是一个划算的方法,因为我的循环很长。再次感谢你Loic-你让我开心:-)