在产品更新时更改产品运输 class - Woocommerce

Change product shipping class on product update - Woocommerce

如何在更新后使用代码编辑产品的运费 class?

这是我目前在 functions.php 上的内容。它适用于 product_cat 术语,但不适用于 product_shipping_class.

add_action('save_post_product', 'my_product_save', 10, 3);

function my_product_save( $post_id, $post, $update ) {

    $shipping_class_slug = 'international-standard-shipping';

    wp_set_object_terms( $post_id, $shipping_class_slug, 'product_shipping_class' ); 

}

谢谢!

save_post 挂钩在 post_meta 更新之前运行。我们需要使用在 post_meta 更新或添加后触发的钩子。您还应该使用 WooCommerce 产品 class 函数而不是 WordPress 函数来设置运输元数据。

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' ) { 
            $product = wc_get_product( $post_id );
            $int_shipping = get_term_by( 'slug', 'international-standard-shipping', 'product_shipping_class' );
            $product->set_shipping_class_id( $int_shipping->term_id );
            $product->save();
        }
    }
}