无法在电子邮件中的 woocommerce 中添加自定义字段

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 已经发布了该方法,或者您可以阅读我的 website.

上的完整教程