哪个钩子修改元数据之前保存(WooCommerce产品)?



我想在保存之前修改WooCommerce产品上的元数据(如果为空)。这个元数据是一个自定义元字段,不是WooCommerce的一部分。这意味着我需要首先检查给定的元数据—而不是总是设置一个值,无论如何。

  • 哪个钩子保存WooCommerce产品元在WooCommerce?
    • woocommerce_admin_process_product_object-提供$product对象,但其元数据尚未更新。我从哪里得到给定的产品数据?
    • woocommerce_process_product_meta-只提供post-ID -甚至更少的信息继续。
    • save_post_product- Same.
    • save_post- Same.
  • 钩子设置产品权重在save_post/woocommerce_process_product_meta_$product_type- IIRC,似乎让我看到一个产品,但只提供访问特殊的WooCommerce属性,如重量,而不是元数据。
  • field_no_prefix_save_pre/{$field_no_prefix}_save_pre-不支持元数据
  • 在保存产品之前获取$_POST变量的钩子
    • 如何在保存之前编辑帖子数据?/wp_insert_post_data-让我过滤(修改)核心后数据和访问元数据,但不修改元数据。

非常难看,但在我的情况下可以工作:

function my_save_product_meta( $product ) {
// only modify if empty; replacement / action is simple enough so that we 
// need not to worry about sanitization.
if (
isset($_POST['my_custom_field']) 
&&  empty(trim($_POST['my_custom_field']))
) {
$_POST['my_custom_field'] = '0';
}
}
add_action('woocommerce_admin_process_product_object', 'my_save_product_meta', 10, 1);

用于保存新产品以及更新现有产品。