在购物车、结账、订单和电子邮件通知中显示WooCommerce自定义产品字段元数据 [英] Display WooCommerce custom product field meta data in cart, checkout, orders and email notifications
本文介绍了在购物车、结账、订单和电子邮件通知中显示WooCommerce自定义产品字段元数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我已经创建了一个自定义产品域(管理员)。该字段工作正常,并且可以很好地保存数据。
我遇到的问题是将元数据添加到购物车和结账。
我没有收到任何错误(在wp-config
中打开了调试),也没有收到任何通知--什么都没有。购物车和结账时未显示任何数据。
这是我的代码:
add_action( 'woocommerce_product_options_general_product_data', 'product_delivery_time' );
function product_delivery_time(){
global $woocommerce, $post;
echo '<div class="product_custom_field">';
woocommerce_wp_text_input(
array(
'id' => '_shipping_field',
'placeholder' => 'shipping time in days',
'label' => __('Shipping Time', 'woocommerce'),
'desc_tip' => 'true'
)
);
echo '</div>';
}
add_action( 'woocommerce_process_product_meta', 'product_delivery_time_save' );
function product_delivery_time_save( $post_id ) {
if (isset($_POST['_shipping_field'] ) )
update_post_meta( $post_id, '_shipping_field', esc_attr( $_POST['_shipping_field'] ) );
}
add_filter( 'woocommerce_add_cart_item_data', 'delivery_time_in_cart', 10, 3 );
function delivery_time_in_cart( $cart_item_data, $product_id, $variation_id ) {
if (! empty( $_POST['_shipping_field'] ) ) {
$cart_item_data['_shipping_field'] = sanitize_text_field( $_POST['_shipping_field'] );
}
return $cart_item_data;
}
add_filter( 'woocommerce_get_item_data', 'delivery_time_in_cart_display', 10, 2 );
function delivery_time_in_cart_display( $item_data, $cart_item ) {
if (! empty($cart_item['_shipping_field'] ) ) {
$item_data[] = array(
'key' => '_shipping_field',
'value' => $cart_item['_shipping_field'],
'display' => '',
);
}
return $item_data;
}
add_action( 'woocommerce_checkout_create_order_line_item', 'delivery_time_in_order_display', 10, 4 );
function delivery_time_in_order_display( $item, $cart_item_key, $values, $order ) {
if (! empty($values['_shipping_field'] ) ) {
$item->add_meta_data( 'Delivery time:', $values['_shipping_field'] );
}
}
推荐答案
您有一些小错误,这应该就足够了
- 请注意使用
woocommerce_admin_process_product_object
来保存,而不是使用过时的woocommerce_process_product_meta
挂钩
因此您将得到
// Add field
function product_delivery_time() {
echo '<div class="product_custom_field">';
woocommerce_wp_text_input( array(
'id' => '_shipping_field',
'placeholder' => 'shipping time in days',
'label' => __('Shipping Time', 'woocommerce'),
'desc_tip' => 'true'
)
);
echo '</div>';
}
add_action( 'woocommerce_product_options_general_product_data', 'product_delivery_time', 10, 0 );
// Save Field
function woo_add_custom_general_fields_supplier_save( $product ) {
if( isset($_POST['_shipping_field']) ) {
$product->update_meta_data( '_shipping_field', esc_html( $_POST['_shipping_field'] ) );
}
}
add_action( 'woocommerce_admin_process_product_object', 'woo_add_custom_general_fields_supplier_save', 10, 1 );
// Display on cart & checkout pages
function delivery_time_in_cart_display( $item_data, $cart_item ) {
$shipping_field = $cart_item['data']->get_meta('_shipping_field');
if ( ! empty( $shipping_field ) ) {
$item_data[] = array(
'name' => __('Shipping field', 'woocommerce'),
'value' => $shipping_field,
);
}
return $item_data;
}
add_filter( 'woocommerce_get_item_data', 'delivery_time_in_cart_display', 10, 2 );
// Display item data everywhere on orders and email notifications
function delivery_time_in_order_display( $item, $cart_item_key, $values, $order ) {
$shipping_field = $values['data']->get_meta('_shipping_field');
if ( ! empty( $shipping_field ) ) {
$item->update_meta_data( __( 'Shipping field', 'woocommerce'), $shipping_field );
}
}
add_action( 'woocommerce_checkout_create_order_line_item', 'delivery_time_in_order_display', 10, 4 );
这篇关于在购物车、结账、订单和电子邮件通知中显示WooCommerce自定义产品字段元数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文