Описание:
Я пытаюсь настроить порядок стран в раскрывающемся меню для адреса выставления счета (Страна выставления счета) на странице оформления заказа 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 для раскрывающегося меню адреса выставления счета (Страна выставления счета) после настройки порядка стран? Есть ли конкретный метод или подход, который я могу использовать для достижения этой цели?






Вам просто нужно добавить следующий фрагмент кода, чтобы вернуть раскрывающийся список 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, сохраняя синхронизацию состояний