挂钩以在 save_post 上设置产品重量
Hook to set product weight on save_post
有没有办法用save_post
挂钩设置产品重量?
我有以下代码,但我不知道如何覆盖权重:
add_action( 'save_post', 'change_weight' );
function change_weight($post_id) {
$WC_Product = wc_get_product($post_id);
}
要设置权重,您需要更新 post 元数据。可以这样做:
update_post_meta( $post_id, '_weight', $weight );
上面代码中的$weight 是一个变量,包含你想要的权重值。但是,每次保存任何 post 时都会触发 save_post 挂钩,因此博客 post、页面、产品等。您可能想要验证 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();
如果您使用 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 );
}
有没有办法用save_post
挂钩设置产品重量?
我有以下代码,但我不知道如何覆盖权重:
add_action( 'save_post', 'change_weight' );
function change_weight($post_id) {
$WC_Product = wc_get_product($post_id);
}
要设置权重,您需要更新 post 元数据。可以这样做:
update_post_meta( $post_id, '_weight', $weight );
上面代码中的$weight 是一个变量,包含你想要的权重值。但是,每次保存任何 post 时都会触发 save_post 挂钩,因此博客 post、页面、产品等。您可能想要验证 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();
如果您使用 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 );
}