Пользовательское поле номера телефона не отображается в электронной почте заказа WooCommerce

#php #wordpress #woocommerce #custom-fields #email-notifications

#php #wordpress #woocommerce #пользовательские поля #электронная почта-уведомления

Вопрос:

Я успешно добавил поле номера телефона в Ship на другой адрес, и номер телефона также отображается в фоновом режиме. Однако я не получаю номер телефона по электронной почте. Пожалуйста, помогите

Этот код помогает мне добавить поле:

 add_filter( 'woocommerce_checkout_fields', 'bbloomer_shipping_phone_checkout' );
 
function bbloomer_shipping_phone_checkout( $fields ) {
   $fields['shipping']['shipping_phone'] = array(
      'label' => 'Phone',
      'required' => true,
      'class' => array( 'form-row-wide' ),
   );
   return $fields;
}
  
add_action( 'woocommerce_admin_order_data_after_shipping_address', 'bbloomer_shipping_phone_checkout_display' );
 
function bbloomer_shipping_phone_checkout_display( $order ){
    echo '<p><b>Shipping Phone:</b> ' . get_post_meta( $order->get_id(), '_shipping_phone', true ) . '</p>';
}
 

Я попытался добавить дополнительный код в приведенный выше код (показан ниже), чтобы показать номер телефона в электронной почте. По-прежнему не работает!

 add_filter( 'woocommerce_email_order_meta_fields', 'custom_woocommerce_email_order_meta_fields', 10, 3 );

function custom_woocommerce_email_order_meta_fields( $fields, $sent_to_admin, $order ) {
    $fields['meta_key'] = array(
        'label' => __( 'Shipping Phone' ),
        'value' => get_post_meta( $order->id, '_shipping_phone', true ),
    );
    return $fields;
}
 

Ответ №1:

Вы пропустили правильное meta_key , я также немного изменил ваш существующий код.

Примечание: изменив priority аргумент, вы можете установить свое поле в правильном месте.

Таким образом, вы получаете:

 // Shipping field on my account edit-addresses and checkout
function filter_woocommerce_shipping_fields( $fields ) {    
    $fields['shipping_phone'] = array(
        'label' => __( 'Shipping Phone', 'woocommerce' ),
        'required' => true,
        'class' => array( 'form-row-wide' ),
        'priority'    => 55
    );
    
    return $fields;
}
add_filter( 'woocommerce_shipping_fields' , 'filter_woocommerce_shipping_fields', 10, 1 ); 

// Display on the order edit page (backend)
function action_woocommerce_admin_order_data_after_shipping_address( $order ) {
    if ( $value = $order->get_meta( '_shipping_phone' ) ) {
        echo '<p><strong>' . __( 'Shipping Phone', 'woocommerce' ) . ':</strong> ' . $value . '</p>';
    }
}
add_action( 'woocommerce_admin_order_data_after_shipping_address', 'action_woocommerce_admin_order_data_after_shipping_address', 10, 1 );

// Display on email notifications
function filter_woocommerce_email_order_meta_fields( $fields, $sent_to_admin, $order ) {
    // Get meta
    $shipping_phone = $order->get_meta( '_shipping_phone' );
    
    // NOT empty
    if ( ! empty( $shipping_phone ) ) { 
        $fields['_shipping_phone'] = array(
            'label' => __( 'Shipping Phone', 'woocommerce' ),
            'value' => $shipping_phone,
        );
    }
    
    return $fields;
}
add_filter( 'woocommerce_email_order_meta_fields', 'filter_woocommerce_email_order_meta_fields', 10, 3 );