![](/img/trans.png)
[英]Save multiple WooCommerce custom checkout fields as order meta data
[英]Multiple woocommerce custom order checkout fields
所以,我坚持向我的商店添加第二个自定义结帐字段。
第一个自定义字段是单选按钮,它直接添加到模板字段中。 另一个是相同的单选按钮,但具有不同的 id 和名称。
运输部分工作正常,但该私人标签未保存,并且在订单完成后未显示在管理区域中。
这是我已经拥有的,我做错了什么?
/**
* Update the user meta with field value
**/
add_action('woocommerce_checkout_update_user_meta', 'my_custom_checkout_field_update_user_meta');
function my_custom_checkout_field_update_user_meta( $user_id ) {
if ($user_id && $_POST['shippinng']) update_user_meta( $user_id, 'shippinng', esc_attr($_POST['shippinng']) );
if ($user_id && $_POST['private']) update_user_meta( $user_id, 'private', esc_attr($_POST['private']) );
}
/**
* Update the order meta with field value
**/
add_action('woocommerce_checkout_update_order_meta', 'my_custom_checkout_field_update_order_meta');
function my_custom_checkout_field_update_order_meta( $order_id ) {
if ($_POST['shippinng']) update_post_meta( $order_id, 'Transport', esc_attr($_POST['shippinng']));
if ($_POST['private']) update_post_meta( $order_id, 'Private label', esc_attr($_POST['private']));
}
/**
* Display field value on the order edit page
*/
add_action( 'woocommerce_admin_order_data_after_billing_address', 'my_custom_checkout_field_display_admin_order_meta', 10, 1 );
function my_custom_checkout_field_display_admin_order_meta($order){
echo '<p><strong>'.__('Transport').':</strong> ' . get_post_meta( $order->id, 'Transport', true ) . '</p>';
echo '<p><strong>'.__('Private label').':</strong> ' . get_post_meta( $order->id, 'Private label', true ) . '</p>';
}
/**
* Add the field to order emails
**/
add_filter('woocommerce_email_order_meta_keys', 'my_custom_checkout_field_order_meta_keys');
function my_custom_checkout_field_order_meta_keys( $keys ) {
$keys[] = 'Transport';
$keys[] = 'Private label';
return $keys;
}
您必须注册私人标签才能保存它。 我建议下载结帐字段编辑器并检查代码以进行学习。 根据我的经验,比较一直是一个很好的模型:)
这不是一个完整的答案,但我可以看到一个关于如何将字段添加到电子邮件的问题。 这是一个老问题,但我想我会回答它来帮助自己,因为我不可避免地需要在 6 个月内使用谷歌搜索它。
这样做:
$keys[] = 'Transport';
$keys[] = 'Private label';
第二行覆盖了第一行,所以 $keys 数组就变成了array( "Private label" );
.
相反,尝试像这样格式化它:
$keys = array("Transport", "Private label");
这适用于我当前的项目:
/* Add custom field to emails */
add_filter('woocommerce_email_order_meta_keys', 'my_custom_order_meta_keys');
function my_custom_order_meta_keys( $keys ) {
$keys = array("Purchase Order Number", "Preferred Delivery Date"); // This will look for both of the specified fields and add them to the emails
return $keys;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.