在Woocommerce订单中显示一个自定义字段值编辑视图
问题描述:
我有一个和here类似的东西:我不明白为什么这个自定义字段的值没有保存。这里是我的代码:在Woocommerce订单中显示一个自定义字段值编辑视图
add_filter('woocommerce_checkout_fields' , 'altri_campi');
function altri_campi($fields) {
$fields['billing']['codice_fiscale'] = array(
'class' => array('form-row-wide'),
'label' => __('Codice Fiscale', 'woocommerce'),
'placeholder' => _x('Scrivere anche il Codice Fiscale', 'placeholder', 'woocommerce'),
'required' => true,
'class' => array('form-row-wide')
);
return $fields;
}
// like LoizTheAztec above
add_action('woocommerce_checkout_update_order_meta', 'my_custom_checkout_field_update_order_meta', 10, 1);
function my_custom_checkout_field_update_order_meta($order_id) {
if (! empty($_POST['codice_fiscale'])) {
update_post_meta($order_id, 'Codice Fiscale', sanitize_text_field($_POST['codice_fiscale']));
}
}
// then I'm expecting that custom field value will be saved somehow, but won't
add_action('woocommerce_admin_order_data_after_shipping_address', 'my_custom_checkout_field_display_admin_order_meta', 10, 1);
function my_custom_checkout_field_display_admin_order_meta($order){
echo '<p><strong>'.__('Codice Fiscale', 'woocommerce').':</strong> ' . get_post_meta($order->get_id(), '_codice_fiscale', true) . '</p>';
}
元字段被正确保存和打印,但我不能在订单数据视图中添加自定义字段值。
我在做什么错了,以及如何在订单编辑视图中显示此自定义字段值?
否则,我希望在客户的结算和运输数据后发现的文本是无效的,因为我只读取了最新代码段的html部分。
答
这里是正确的注释和解释代码:
// Creating and displaying the custom checkout field in checkout page
add_filter('woocommerce_checkout_fields' , 'altri_campi');
function altri_campi($fields) {
$fields['billing']['codice_fiscale'] = array(
'class' => array('form-row-wide'),
'label' => __('Codice Fiscale', 'woocommerce'),
'placeholder' => _x('Scrivere anche il Codice Fiscale', 'placeholder', 'woocommerce'),
'required' => true,
'class' => array('form-row-wide')
);
return $fields;
}
// Saving the custom checkout field value in the order meta data
add_action('woocommerce_checkout_update_order_meta', 'my_custom_checkout_field_update_order_meta', 10, 1);
function my_custom_checkout_field_update_order_meta($order_id) {
if (! empty($_POST['codice_fiscale'])){
update_post_meta($order_id, 'codice_fiscale', sanitize_text_field($_POST['codice_fiscale']));
// get the customer ID
$customer_id = get_post_meta($order_id, '_customer_user', true);
// Update customer user data
update_user_meta($customer_id, 'codice_fiscale', true);
}
}
// Displaying the custom checkout field value in the order edit page (backend)
add_action('woocommerce_admin_order_data_after_shipping_address', 'custom_checkout_field_display_admin_order_meta', 10, 1);
function custom_checkout_field_display_admin_order_meta($order){
$codice_fiscale = get_post_meta($order->get_id(), 'codice_fiscale', true);
if(! empty($codice_fiscale))
echo '<p><strong>'.__('Codice Fiscale', 'woocommerce').':</strong> ' . $codice_fiscale . '</p>';
}
代码放在您的活动子主题(或主题)的function.php文件或也以任何插件文件。
测试和工作。您将获得在后端订单编辑页面类似(下面的地址):
感谢您的帮助!只有两个注意事项:在update_post_meta($ order_id,'_codice_fiscale',...)和get_post_meta($ order-> get_id(),'_codice_fiscale')中使用这两个符号时,我必须删除附加的“_”下划线符号。 ..)否则数据将不会正确保存在元数据中,并且不会在订单明细中打印。 – alemarengo
事实上,你应该通过摆脱额外的下划线符号来编辑你的答案,否则我无法确认你的答案对我有效100%。 :) – alemarengo
@alemarengo好吧,我已经更新了我的答案:) – LoicTheAztec