![](/img/trans.png)
[英]Add a custom order note programmatically in Woocommerce admin order edit pages
[英]Custom editable field in Woocommerce admin edit order pages general section
在 Woocommerce 中,下面的代碼檢索特定的自定義訂單項元數據,並在管理編輯訂單頁面的常規部分區域下添加一個可編輯的自定義字段:
function editable_order_meta_general( $order_id ){
$order = wc_get_order( $order_id );
// Loop through order items
foreach( $order->get_items() as $item_id => $item ){
$yourref = $item->get_meta('Your Reference');
}
?>
<br class="clear" />
<h4>Customer Details <a href="#" class="edit_address">Edit</a></h4>
<div class="address">
<p><strong>Customer Reference:</strong> <?php echo $yourref ?></p>
</div>
<div class="edit_address"><?php
woocommerce_wp_text_input( array(
'id' => 'Your Reference',
'label' => 'Customer Ref:',
'value' => $yourref,
'wrapper_class' => 'form-field-wide'
) );
?></div>
}
add_action( 'woocommerce_admin_order_data_after_order_details', 'editable_order_meta_general' );
現在我正在嘗試使用以下代碼保存自定義可編輯字段值,但是一旦我點擊更新,它就不會保存任何內容。
function save_general_detail_metas( $ord_id ){
update_post_meta( $ord_id, 'Your Reference', wc_clean( $_POST[ 'Your Reference' ] ) );
// wc_clean() and wc_sanitize_textarea() are WooCommerce sanitization functions
}
add_action( 'woocommerce_process_shop_order_meta', 'save_general_detail_metas' );
我做錯了什么? 如何保存此自定義字段值?
任何幫助將非常感激。
您的代碼中有一些錯誤和錯誤。 請嘗試以下操作:
// Output a custom editable field in backend edit order pages under general section
add_action( 'woocommerce_admin_order_data_after_order_details', 'editable_order_custom_field', 12, 1 );
function editable_order_custom_field( $order ){
// Loop through order items
foreach( $order->get_items() as $item_id => $item ){
// Get "customer reference" from order item meta data
if( $item->get_meta('Your Reference') ){
// The "customer reference"
$item_value = $item->get_meta('Your Reference');
// We output a hidden field with the Item ID (to be able to update this order item meta data later)
echo '<input type="hidden" name="item_id_ref" value="' . $item_id . '">';
break; // We stop the loop
}
}
// Get "customer reference" from meta data (not item meta data)
$updated_value = $order->get_meta('_customer_ref');
// Replace "customer reference" value by the meta data if it exist
$value = $updated_value ? $updated_value : ( isset($item_value) ? $item_value : '');
// Display the custom editable field
woocommerce_wp_text_input( array(
'id' => 'customer_ref',
'label' => __("Customer Reference:", "woocommerce"),
'value' => $value,
'wrapper_class' => 'form-field-wide',
) );
}
// Save the custom editable field value as order meta data and update order item meta data
add_action( 'woocommerce_process_shop_order_meta', 'save_order_custom_field_meta_data', 12, 2 );
function save_order_custom_field_meta_data( $post_id, $post ){
if( isset( $_POST[ 'customer_ref' ] ) ){
// Save "customer reference" as order meta data
update_post_meta( $post_id, '_customer_ref', sanitize_text_field( $_POST[ 'customer_ref' ] ) );
// Update the existing "customer reference" item meta data
if( isset( $_POST[ 'item_id_ref' ] ) )
wc_update_order_item_meta( $_POST[ 'item_id_ref' ], 'Your Reference', $_POST[ 'customer_ref' ] );
}
}
代碼位於活動子主題(或主題)的 function.php 文件中。 測試和工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.