我想在保存之前修改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);
用于保存新产品以及更新现有产品。