我正在尝试使用WooCommerce核心的更新系统来更新自定义产品元框字段。这是我的代码:
新字段运输信息
add_action( 'woocommerce_product_options_shipping', 'my_product_options_shipping' );
function my_product_options_shipping() {
global $post;
$shipping_info = get_post_meta( $post->ID, '_shipping_info', true );
woocommerce_wp_text_input(
array(
'id' => '_shipping_info',
'value' => $shipping_info,
'label' => __( 'Shipping info', 'woocommerce' ),
'placeholder' => __( 'Shipping in two days', 'woocommerce' ),
)
);
}
这是在WC_Meta_Box_Product_Data :: save中将新字段添加为prop的函数
add_action( 'woocommerce_admin_process_product_object', 'my_admin_process_product_object' );
function my_admin_process_product_object( $product ) {
$product->set_props(
array(
'shipping_info' => isset( $_POST['_shipping_info'] ) ? wc_clean( wp_unslash( $_POST['_shipping_info'] ) ) : null,
)
);
}
我想我错过了一步。是否应该从woocommerce_process_product_meta附加的函数WC_Meta_Box_Product_Data :: save wich自动保存?
编辑
我发现了缺少的步骤。我需要在抽象类WC_Data的受保护数组$ extra_data中添加我的自定义帖子元。
我不太擅长OOP,所以..如何访问该数组以推送自定义数据?
谢谢!
答案 0 :(得分:0)
我可以看到您正在做$shipping_info = get_post_meta( $post->ID, '_shipping_info', true );
那么,为什么不省事,只使用update_post_meta
add_action( 'woocommerce_admin_process_product_object', 'my_admin_process_product_object' );
function my_admin_process_product_object( $product ) {
update_post_meta($product->get_id(), '_shipping_info', wc_clean( wp_unslash( $_POST['_shipping_info'] ) ) );
}