Изменить порядок стран из WooCommerce. Страна оформления заказа. Выпадающие списки Select2

Описание:

Я пытаюсь настроить порядок стран в раскрывающемся меню для адреса выставления счета (Страна выставления счета) на странице оформления заказа WooCommerce. Для этого я использую фильтр woocommerce_checkout_fields, чтобы настроить порядок стран в раскрывающемся меню.

Проблема возникает, когда я пытаюсь выполнить эти настройки: раскрывающееся меню для адреса выставления счета (Страна выставления счета) работает должным образом, отображая страны в желаемом порядке. Однако это, похоже, деактивирует функцию Select2, которая обычно используется для предоставления расширенных возможностей раскрывающегося списка.

Мой подход:

Вот отрывок моего кода, демонстрирующий настройку порядка стран в раскрывающемся меню для адреса выставления счета:

add_filter( 'woocommerce_checkout_fields', 'customize_country_dropdown_order' );
function customize_country_dropdown_order( $fields ) {

    $first_countries = array(
        'DE' => 'Germany',
        'AT' => 'Austria',
        'CH' => 'Switzerland',
    );

    $rest_countries = array_diff( WC()->countries->get_allowed_countries(), $first_countries );

    // Combine the first countries and the rest with a separator
    $custom_country_list = array_merge( $first_countries, array( '-' => '------------' ), $rest_countries );

    // Update the order of the billing and shipping country dropdowns
    $fields['billing']['billing_country']['type'] = 'select';
    $fields['billing']['billing_country']['options'] = $custom_country_list;

    $fields['shipping']['shipping_country']['type'] = 'select';
    $fields['shipping']['shipping_country']['options'] = $custom_country_list;

    return $fields;
}

Мой вопрос:

Как я могу повторно активировать функцию Select2 для раскрывающегося меню адреса выставления счета (Страна выставления счета) после настройки порядка стран? Есть ли конкретный метод или подход, который я могу использовать для достижения этой цели?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
0
172
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам просто нужно добавить следующий фрагмент кода, чтобы вернуть раскрывающийся список jQuery Select2:

add_action( 'woocommerce_checkout_init', 'enable_back_selectWoo_on_countries_dropdowns' );
function enable_back_selectWoo_on_countries_dropdowns() {
    wc_enqueue_js("$('#billing_country,#shipping_country').selectWoo();");
}

Примечание. Здесь мы используем selectWoo, форк WooCommerce от Select2.

Ты получишь:

Кроме того, вы можете упростить/уплотнить свой код, используя вместо этого:

add_filter( 'woocommerce_checkout_fields', 'reorder_checkout_country_dropdowns' );
function reorder_checkout_country_dropdowns( $fields ) {
    // Merge sorted countries, with unsorted ones
    $countries_array = array_merge( 
        array(
            'DE' => 'Germany',
            'AT' => 'Austria',
            'CH' => 'Switzerland',
            '-'  => '------------',
        ),
        WC()->countries->get_allowed_countries(), 
    );

    // Change field type from "country" to "select"
    $fields['billing']['billing_country']['type'] = $fields['shipping']['shipping_country']['type'] = 'select';
    // Set sorted countries options
    $fields['billing']['billing_country']['options'] = $fields['shipping']['shipping_country']['options'] = $countries_array;

    return $fields;
}

Новая версия кода (при смене страны сохраняется синхронизация):
Измените порядок стран в полях «Страна» WooCommerce Checkout, сохраняя синхронизацию состояний

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