繁体   English   中英

无法在电子邮件中的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已经发布的输出进行更细粒度的控制,或者您可以阅读我网站上的完整教程。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM