[英]Unable to add custom field in woocommerce in email
我在woocommerce中创建了两个自定义字段,如下所示:
add_filter( 'woocommerce_billing_fields', 'custom_woocommerce_billing_fields' );
function custom_woocommerce_billing_fields( $fields ) {
$fields['billing_state'] = array(
'label' => __('State/County', 'woothemes'),
'placeholder' => __('State/County', 'woothemes'),
'required' => false,
'class' => array('input-text')
);
$fields['billing_phone'] = array(
'label' => __('Phone Number', 'woothemes'),
'placeholder' => __('Phone Number', 'woothemes'),
'required' => false,
'class' => array('input-text')
);
$fields['billing_deltime'] = array(
'label' => __('Delivery Time', 'woocommerce'),
'required' => false,
'clear' => false,
'type' => 'select',
'options' => array(
'' => __('Select Time', 'woocommerce' ),
'09:00' => __('09:00 AM', 'woocommerce' ),
'09:30' => __('09:30 AM', 'woocommerce' ),
'10:00' => __('10:00 AM', 'woocommerce' ),
'10:30' => __('10:30 AM', 'woocommerce' ),
'11:00' => __('11:00 AM', 'woocommerce' ),
'11:30' => __('11:30 AM', 'woocommerce' ),
'12:00' => __('12:00 PM', 'woocommerce' ),
'12:30' => __('12:30 PM', 'woocommerce' ),
'13:00' => __('01:00 PM', 'woocommerce' ),
'13:30' => __('01:30 PM', 'woocommerce' ),
'14:00' => __('02:00 PM', 'woocommerce' ),
'14:30' => __('02:30 PM', 'woocommerce' ),
'15:00' => __('03:00 PM', 'woocommerce' ),
'15:30' => __('03:30 PM', 'woocommerce' ),
'16:00' => __('04:00 PM', 'woocommerce' ),
'16:30' => __('04:30 PM', 'woocommerce' ),
'17:00' => __('05:00 PM', 'woocommerce' ),
'17:30' => __('05:30 PM', 'woocommerce' ),
'18:00' => __('06:00 PM', 'woocommerce' )
)
);
return $fields;
}
它显示在结帐页面上,但未显示在订单确认电子邮件中。
我使用以下代码添加到电子邮件中:
add_filter('woocommerce_email_order_meta_keys', 'my_woocommerce_email_order_meta_keys');
function my_woocommerce_email_order_meta_keys( $keys ) {
$keys['Delivery time : '] = '_billing_deltime';
$keys['Phone Number : '] = '_billing_phone';
return $keys;
}
请告诉我我想念的是什么?
请尝试此代码
function kia_display_email_order_meta( $order, $sent_to_admin, $plain_text ) {
$some_field = get_post_meta( $order->id, 'Delivery Time', true );
$another_field = get_post_meta( $order->id, 'Phone Number', true );
if( $plain_text ){
echo 'Delivery Time: ' . $some_field . ' Phone Number: ' . $another_field;
} else {
echo '<p><strong>Delivery Time:</strong> ' . $some_field. ' <br><strong>Phone Number:</strong> ' . $another_field.'</p>';
}
}
add_action('woocommerce_email_order_meta', 'kia_display_email_order_meta', 30, 3 );
//to save the fields
function my_custom_checkout_field_update_order_meta( $order_id ) {
if ( ! empty( $_POST['billing_deltime'] ) ) {
update_post_meta( $order_id, 'billing_deltime', sanitize_text_field( $_POST['billing_deltime'] ) );
}
if ( ! empty( $_POST['billing_phone'] ) ) {
update_post_meta( $order_id, 'billing_phone', sanitize_text_field( $_POST['billing_phone'] ) );
}
}
add_filter('woocommerce_email_order_meta_keys', 'my_woocommerce_email_order_meta_keys');
function my_woocommerce_email_order_meta_keys( $keys ) {
$keys['Delivery time : '] = 'billing_deltime';//this should be the metakey
$keys['Phone Number : '] = 'billing_phone';
return $keys;
}
在WooCommerce 2.3版中更改了将变量传递给woocommerce_email_order_meta_keys
方法。 从2.3版本开始,您需要向每个键发送一个数组,如下所示:
// WooCommerce 2.3+
function kia_email_order_meta_fields( $fields, $sent_to_admin, $order ) {
$fields['some_field'] = array(
'label' => __( 'Some field' ),
'value' => get_post_meta( $order->id, '_some_field', true ),
);
$fields['another_field'] = array(
'label' => __( 'Another field' ),
'value' => get_post_meta( $order->id, '_another_field', true ),
);
return $fields;
}
add_filter('woocommerce_email_order_meta_fields', 'kia_email_order_meta_keys', 10, 3 );
或者,您可以使用我的替代方法,该方法对Atif已经发布的输出进行更细粒度的控制,或者您可以阅读我网站上的完整教程。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.