让我简单地说。
- 我们在数据库中有具有颜色和尺寸属性的产品
- 产品均为可变产品
- 为每种颜色和“任何”尺寸添加了变化
然后我们编写了一些函数,为每个产品添加了 2 个更多变体,尺寸为 2XL 和 3XL(产品为 T 恤),价格更高!
变化添加得很漂亮,但是,在前端,当我选择价格增加的尺寸时,价格不会改变,除非我进入产品编辑页面并单击更新按钮。只有这样,添加到购物车的价格才会在选择该尺寸时发生变化。
如何使价格上涨的变化反映在前端,而无需单击每个产品的更新按钮?
让我简单地说。
然后我们编写了一些函数,为每个产品添加了 2 个更多变体,尺寸为 2XL 和 3XL(产品为 T 恤),价格更高!
变化添加得很漂亮,但是,在前端,当我选择价格增加的尺寸时,价格不会改变,除非我进入产品编辑页面并单击更新按钮。只有这样,添加到购物车的价格才会在选择该尺寸时发生变化。
如何使价格上涨的变化反映在前端,而无需单击每个产品的更新按钮?
也许您需要variable_product_sync()
在每个变量产品上运行?
function so_run_once(){
$variable_products = get_posts( array(
'posts_per_page'=> -1,
'post_type' => 'product',
'fields' => 'ids',
'post_status' => 'publish',
'tax_query' => array(
array(
'taxonomy' => 'product_type',
'field' => 'slug',
'terms' => 'variable',
),
)
) );
if( $variable_products ) foreach( $variable_products as $product_id ){
$_product = wc_get_product( $product_id );
$_product->variable_product_sync();
}
}
add_action( 'admin_init', 'so_run_once' );
找到了解决方案!插入变体后,我们不得不删除每个帖子的瞬态元数据。
$transient_name = 'wc_product_children_ids_' . $proudct_id;
delete_transient( $transient_name );