Настройка оформления поля почтового индекса в выпадающем меню

Я строю магазин на основе WooCommerce. У меня есть список почтовых индексов, каждый из которых имеет свою стоимость доставки в разных зонах доставки (некоторые предоставляют бесплатную доставку, некоторые имеют фиксированную стоимость).

Когда клиент переходит на страницу оформления заказа, ему нужно ввести свой номер почтового индекса в поле ввода. В зависимости от почтового индекса при предварительном просмотре заказа будет отображаться разная общая стоимость доставки (бесплатная или фиксированная ставка).

Вот как выглядит поле ввода в class-wc-countries.php:

public function get_default_address_fields() {
    $fields = array(
    'postcode' => array(
            'label'        => __( 'Postcode/ZIP', 'woocommerce' ),
            'required'     => true,
            'class'        => array( 'form-row-first', 'address-field' ),
            'clear'        => true,
            'validate'     => array( 'postcode' ),
            'autocomplete' => 'postal-code',
        ),
    );

Однако я хочу превратить это поле в раскрывающееся меню, чтобы клиент мог просто выбрать свой вариант почтового индекса, а не набирать его.

Мне удалось сделать его раскрывающимся, но всякий раз, когда я выбираю какой-либо вариант, он, похоже, не меняет общую стоимость доставки, как это было бы с полем ввода.

Вот что я сделал:

public function get_default_address_fields() {
    $fields = array(
        'postcode' => array(
            'label'        => __( 'Postcode/ZIP', 'woocommerce' ),
            'required'     => true,
            'class'        => array( 'form-row-first', 'address-field' ),
            'clear'        => true,
            'validate'     => array( 'postcode' ),
            'autocomplete' => 'postal-code',
            'type' => 'select',
            'options' => array(
                              'opt1' => "001122", "112200", "334400")
        ),
    );

Но это не работает.

Я что-то пропустил?
Как я могу сделать так, чтобы эти выпадающие опции меняли общую стоимость доставки?

Спасибо

1 ответ

Это очень частично ответит на ваш вопрос и просто покажет вам способ настройки полей оформления заказа.

Переопределение основных файлов на самом деле не то, что нужно делать, так как вы теряете все время каждый раз, когда обновляется Woocommerce, и это не рекомендуется.

Чтобы переопределить поля извлечения чистым способом, сначала вам нужно использовать пользовательскую функцию, подключенную к одному из этих двух фильтров:

  • woocommerce_default_address_fields (при настройке полей по умолчанию для адреса выставления счета и доставки)
  • woocommerce_checkout_fields (при настройке полей адреса выставления счета или доставки, а также других полей).

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

Итак, здесь я выбрал первый хук и исправил массив почтовых индексов. Вы получите это:

введите описание изображения здесь

Вот этот функциональный и проверенный код:

add_filter( 'woocommerce_default_address_fields' , 'custom_override_default_postcode_field' );
function custom_override_default_postcode_field( $address_fields ) {
    // Your postcodes array
    $postcode_array = array(
        'opt1' => "001122",
        'opt2' => "112200",
        'opt3' => "334400"
    );
    $address_fields['postcode']['type'] = 'select';
    $address_fields['postcode']['options'] = $postcode_array;

    return $address_fields;
}

Код помещается в файл function.php вашей активной дочерней темы (или темы) или также в любой файл плагина.

Поскольку выбор почтового индекса - это прямое событие переднего плана, вам нужно будет использовать сложный сценарий javascript/ajax с некоторой удаленной функцией php для достижения того, что вы хотите сделать, и это реальная разработка... Это также зависит в ваших настройках, и его сложно обрабатывать, так как на этой странице оформления заказа уже работают некоторые ajax-скрипты woocommerce.

Другие вопросы по тегам