钩子在save_post上设置产品重量

时间:2017-02-24 18:26:49

标签: woocommerce save product

有没有办法用save_post挂钩设置产品重量?

我已经关注了代码,但我不知道如何覆盖重量:

add_action( 'save_post', 'change_weight' );
function change_weight($post_id) {
    $WC_Product = wc_get_product($post_id);
}

2 个答案:

答案 0 :(得分:4)

如果您使用woocommerce_process_product_meta_$product_type,那么您不必担心随机数,因为您可以依靠WooCommerce的健全性检查。

// This will work in both WC 2.6 and WC 2.7
add_action( 'woocommerce_process_product_meta_simple', 'so_42445796_process_meta' );
function so_42445796_process_meta( $post_id ) {
    $weight = 100;
    update_post_meta( $post_id, '_weight', $weight );
}

WC 2.7将引入抽象数据如何保存的CRUD方法。我怀疑他们最终会将产品和产品元素从默认的WordPress表中移出,但我无法确定。在2.7中,您可以使用woocommerce_admin_process_product_object挂钩在保存之前修改$product对象。

// Coming in WC2.7 you can use the CRUD methods instead
add_action( 'woocommerce_admin_process_product_object', 'so_42445796_process_product_object' );
function so_42445796_process_product_object( $product ) {
    $weight = 100;
    $product->set_weight( $weight );
}

答案 1 :(得分:1)

设置更新post meta所需的权重。这可以这样做:

update_post_meta( $post_id, '_weight', $weight );
上面代码中的

$ weight是一个包含你想要权重的值的变量。但是,每次保存任何帖子时都会触发save_post挂钩,因此博客帖子,页面,产品等等。您可能希望验证帖子是产品。你可以这样做:

if ( get_post_type ( $post_id ) == 'shop_order' ) {
    update_post_meta( $post_id, '_weight', $weight );
}

此外,如果您想在更改之前获得产品的当前重量,您可以这样做:

$product = wc_get_product( $post_id );
$weight = $product->get_weight();