我目前正在向我的WooCommerce产品页面成功添加一个字段,该字段显示了以下值:
-
在购物车(前端),
收银页面(前端) -
,
-
在订单页面(前端),
-
和管理员个人订单页面(后端) .
问题:它没有在管理订单“自定义字段”Metabox中显示为自定义字段,其中包含值,但仅作为订单页面中的文本 .
这是我的工作代码:
// Add the field to the product
add_action('woocommerce_before_add_to_cart_button', 'my_custom_checkout_field');
function my_custom_checkout_field() {
echo '<div id="my_custom_checkout_field"><h3>'.__('My Field').'</h3>';
echo '<label>fill in this field</label> <input type="text" name="my_field_name">';
echo '</div>';
}
// Store custom field
function save_my_custom_checkout_field( $cart_item_data, $product_id ) {
if( isset( $_REQUEST['my_field_name'] ) ) {
$cart_item_data[ 'my_field_name' ] = $_REQUEST['my_field_name'];
/* below statement make sure every add to cart action as unique line item */
$cart_item_data['unique_key'] = md5( microtime().rand() );
}
return $cart_item_data;
}
add_action( 'woocommerce_add_cart_item_data', 'save_my_custom_checkout_field', 10, 2 );
// Render meta on cart and checkout
function render_meta_on_cart_and_checkout( $cart_data, $cart_item = null ) {
$custom_items = array();
/* Woo 2.4.2 updates */
if( !empty( $cart_data ) ) {
$custom_items = $cart_data;
}
if( isset( $cart_item['my_field_name'] ) ) {
$custom_items[] = array( "name" => 'My Field', "value" => $cart_item['my_field_name'] );
}
return $custom_items;
}
add_filter( 'woocommerce_get_item_data', 'render_meta_on_cart_and_checkout', 10, 2 );
// This is what I think needs changing?
function subscription_order_meta_handler( $item_id, $values, $cart_item_key ) {
if( isset( $values['my_field_name'] ) ) {
wc_add_order_item_meta( $item_id, "My Field", $values['my_field_name'] );
}
}
add_action( 'woocommerce_add_order_item_meta', 'subscription_order_meta_handler', 1, 3 );
我认为这是代码的最后一点需要改变 . 它目前显示订单项下的文字,所以也许我需要将 wc_add_order_item_meta
调整为其他内容?
我已经尝试了所有东西,但似乎没有用 . 当我的字段在结帐页面上时,我可以让它工作,但是当我从产品页面拉出它时,我可以使用它 .
也许我错过了结帐流程片段?
1 回答
首先,我已经得到了所有预期的工作, except getting the value for
my_field_name
在后端"Custom fields"订单页面中的Metabox .经过一场真正的噩梦之后,我比以前更好了 . 在后端,您现在拥有一个自定义元数据框,其自定义字段
my_field_name
显示正确的值,如此屏幕截图所示:我的代码分为两部分 .
1) backend Metabox in Order pages ,其可编辑字段显示来自产品页面上自定义字段的正确值(在前端):
2)前端/后端:
•产品页面自定义字段(前端) .
•在购物车,结帐页面和谢谢订单(前端)上显示此数据 .
•在订单页面上显示数据(后端)
现在一切都按预期工作了 .