根据产品类别自动设置 WooCommerce 产品运费 class
Auto set WooCommerce product shipping class based on product categories
根据产品类别,我有两批 class 货物。每次更新产品后,它都会丢失发货 class,我不知道为什么。
但是我尝试以编程方式将正确的发货 class 分配给“保存时”的产品:
- 指定类别 => 1001
- 其他 => 1002
这是我的代码:
add_action( 'added_post_meta', 'woo_on_product_save', 10, 4 );
add_action( 'updated_post_meta', 'woo_on_product_save', 10, 4 );
function woo_on_product_save( $meta_id, $post_id, $meta_key, $meta_value ) {
if ( $meta_key == '_edit_lock' ) {
if ( get_post_type( $post_id ) == 'product' ) {
if (has_term('fastfood','product_cat')||has_term('coffee','product_cat')){
$shipping_class_type=1001;
}
else{
$shipping_class_type=1002;
}
$product = wc_get_product( $post_id );
$product->set_shipping_class_id( $shipping_class_type );
$product->save();
}
}
}
但这并不像预期的那样有效。当我对任何产品(甚至是指定类别的产品)进行更改时,发货 class 总是变成 1002.
你能告诉我我做错了什么吗?
已更新 - 尝试使用不同的挂钩 (未测试):
add_action( 'woocommerce_process_product_meta', 'woo_on_product_save', 100 );
function woo_on_product_save( $post_id ) {
if ( has_term( array('fastfood', 'coffee'), 'product_cat', $post_id ) ) {
$shipping_class_id = 1001;
} else {
$shipping_class_id = 1002;
}
$product = wc_get_product( $post_id );
$product->set_shipping_class_id( $shipping_class_id );
$product->save();
}
代码进入活动子主题(或活动主题)的 functions.php 文件。它可以工作。
注意: 您需要确保 1001
和 1002
作为运输 class ID 存在。
根据产品类别,我有两批 class 货物。每次更新产品后,它都会丢失发货 class,我不知道为什么。
但是我尝试以编程方式将正确的发货 class 分配给“保存时”的产品:
- 指定类别 => 1001
- 其他 => 1002
这是我的代码:
add_action( 'added_post_meta', 'woo_on_product_save', 10, 4 );
add_action( 'updated_post_meta', 'woo_on_product_save', 10, 4 );
function woo_on_product_save( $meta_id, $post_id, $meta_key, $meta_value ) {
if ( $meta_key == '_edit_lock' ) {
if ( get_post_type( $post_id ) == 'product' ) {
if (has_term('fastfood','product_cat')||has_term('coffee','product_cat')){
$shipping_class_type=1001;
}
else{
$shipping_class_type=1002;
}
$product = wc_get_product( $post_id );
$product->set_shipping_class_id( $shipping_class_type );
$product->save();
}
}
}
但这并不像预期的那样有效。当我对任何产品(甚至是指定类别的产品)进行更改时,发货 class 总是变成 1002.
你能告诉我我做错了什么吗?
已更新 - 尝试使用不同的挂钩 (未测试):
add_action( 'woocommerce_process_product_meta', 'woo_on_product_save', 100 );
function woo_on_product_save( $post_id ) {
if ( has_term( array('fastfood', 'coffee'), 'product_cat', $post_id ) ) {
$shipping_class_id = 1001;
} else {
$shipping_class_id = 1002;
}
$product = wc_get_product( $post_id );
$product->set_shipping_class_id( $shipping_class_id );
$product->save();
}
代码进入活动子主题(或活动主题)的 functions.php 文件。它可以工作。
注意: 您需要确保 1001
和 1002
作为运输 class ID 存在。