Редактируемое поле извлечения Woocommerce и в get_formatted_shipping_address - PullRequest
0 голосов
/ 30 апреля 2020

Я добавляю телефон обязательной доставки на страницу оформления заказа woocommerce с помощью

add_filter( 'woocommerce_checkout_fields', 'add_shipping_phone_to_checkout_page' );

function add_shipping_phone_to_checkout_page( $fields ) {
   $fields['shipping']['shipping_phone'] = array(
      'label' => 'Phone',
      'required' => true,
      'class' => array( 'form-row-wide' ),
      'priority' => 25,
   );
   return $fields;
}

, затем отображаю его на панели заказов администратора

add_action( 'woocommerce_admin_order_data_after_shipping_address', 'shipping_phone_checkout_display_in_order_panel' );

function shipping_phone_checkout_display_in_order_panel( $order ){
    echo '<p><b>Phone :</b> ' . get_post_meta( $order->get_id(), '_shipping_phone', true ) . '</p>';
}

и, наконец, печатаю по электронной почте

add_action('woocommerce_email_customer_details','shipping_phone_display_in_order_email', 25, 4 );

function shipping_phone_display_in_order_email( $order, $sent_to_admin, $plain_text, $email ) {

    $output = '';
    $shipping_phone = get_post_meta( $order->id, '_shipping_phone', true );

    if ( !empty($shipping_phone) )
        $output = '<p><strong>' . __( "Phone:", "woocommerce" ) . '</strong> ' . $shipping_phone . '</p>';

    echo $output;

 }

Все работает как надо. Я хотел бы добиться 2 улучшений, но я не могу сделать:

  1. Сделать настраиваемое поле телефона доступным для редактирования в административной панели
  2. В электронном письме переместите значение поля настраиваемого телефона при доставке адресный блок

Буду признателен за любую помощь

woocoomerce email order

1 Ответ

0 голосов
/ 30 апреля 2020

Вам необходимо внести некоторые изменения в свой код ... Следующий код отобразит поле телефона для отправки в:

  • Оформление заказа
  • Моя учетная запись> Адрес> Изменить адрес доставки
  • Страницы редактирования заказа администратора

Код также добавит телефон доставки в отформатированный отображаемый адрес доставки в разделе адресов доставки электронных писем.

// display shipping phone in checkout and my account edit shipping address
add_filter( 'woocommerce_shipping_fields', 'add_shipping_phone_field' );
function add_shipping_phone_field( $fields ) {
   $fields['shipping_sphone'] = array(
      'label' => __('Phone'),
      'required' => true,
      'class' => array( 'form-row-wide' ),
      'priority' => 25,
   );
   return $fields;
}

// Editable field on admin order edit pages inside edit shipping section
add_filter( 'woocommerce_admin_shipping_fields' , 'add_order_admin_edit_shipping_phone' );
function add_order_admin_edit_shipping_phone( $fields ) {
    // Include shipping phone as editable field
    $fields['sphone'] = array( 'label' => __("Shipping phone"), 'show' => '0' );

    return $fields;
}

// Adding custom placeholder to woocommerce formatted billing address only on Backend
add_filter( 'woocommerce_localisation_address_formats', 'admin_localisation_address_formats', 50, 1 );
function admin_localisation_address_formats( $address_formats ){
    // Only in backend (Admin)
    if( is_admin() ) {
        foreach( $address_formats as $country_code => $address_format ) {
            $address_formats[$country_code] .= "\n{sphone}";
        }
    }
    return $address_formats;
}

// Custom placeholder replacement to woocommerce formatted billing address
add_filter( 'woocommerce_formatted_address_replacements', 'custom_formatted_address_replacements', 10, 2 );
function custom_formatted_address_replacements( $replacements, $args  ) {
    $replacements['{sphone}'] = ! empty($args['sphone'])  ? $args['sphone'] : '';

    return $replacements;
}

// Add the shipping phone value to be displayed on email notifications under shipping address
add_filter( 'woocommerce_order_formatted_shipping_address' , 'add_shipping_phone_to_formatted_shipping_address', 990, 2 );
function add_shipping_phone_to_formatted_shipping_address( $shipping_address, $order ) {
    global $pagenow, $post_type;

    // Not on admin order edit pages (as it's already displayed).
    if( ! ( $pagenow === 'post.php' && $post_type === 'shop_order' && isset($_GET['action']) && $_GET['action'] === 'edit' ) ) {
        // Include shipping phone on formatted shipping address
        $shipping_address['sphone'] = $order->get_meta('_shipping_sphone');
    }

    return $shipping_address;
}

Код входит в функции. php Файл вашей активной дочерней темы (или активной темы). Проверено и работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...