Вопрос или проблема
Когда я выбираю страну на странице оформления заказа WooCommerce, как сделать так, чтобы поля для штата и города были выпадающими списками с соответствующими данными, например: “если пользователь выберет Индию, то в поле для штата отобразятся только индийские штаты”. Пожалуйста, посоветуйте, что делать.
Хотя верно, что вы можете искать в Google, вероятно, именно поэтому вы здесь. Упомянутые плагины являются альтернативами, но если вы все равно хотите это сделать, вот как превратить поле для города в выпадающий список:
/**
* Изменить поле города в форме оформления заказа на выпадающий список.
*/
function jeroen_sormani_change_city_to_dropdown( $fields ) {
$city_args = wp_parse_args( array(
'type' => 'select',
'options' => array(
'city1' => 'название города 1',
'city2' => 'название города 2',
'city3' => 'название города 3',
),
), $fields['shipping']['shipping_city'] );
$fields['shipping']['shipping_city'] = $city_args;
$fields['billing']['billing_city'] = $city_args; // Также измените для поля выставления счета
return $fields;
}
add_filter( 'woocommerce_checkout_fields', 'jeroen_sormani_change_city_to_dropdown' );
ps: Я использую этот код сам, но не претендую на авторство, так как не писал его.
Ответ или решение
Чтобы изменить поля для ввода состояния и города в процессе оформления заказа WooCommerce на выпадающие списки, связанные с выбранной страной, необходимо учитывать специфику работы плагина WooCommerce и структуру его полей. В этом ответе мы предоставим детальную инструкцию с использованием PHP-кода и объяснениями.
Основные шаги для реализации
- Создание массива данных для всех стран, состояний и городов.
- Замена полей текста на выпадающие списки на этапе оформления заказа.
- Добавление логики, чтобы выпадающие списки динамически изменялись в зависимости от выбранной страны.
Пример реализации
Шаг 1: Подготовка данных
Подготовим массив для всех стран, состояний и городов. В этом примере используется фиксированное значение, но вы можете динамически загружать эти данные из базы данных или API.
function get_states_and_cities() {
return array(
'IN' => array(
'states' => array(
'MH' => array('Mumbai', 'Pune', 'Nagpur'),
'KA' => array('Bangalore', 'Mysore', 'Mangalore'),
// другие индийские штаты
),
// другие страны могут быть добавлены аналогично
),
// Пример для другой страны
);
}
Шаг 2: Изменение полей оформления заказа
Теперь мы изменим поля WooCommerce для штата и города с текстовых на выпадающие списки.
function custom_woocommerce_checkout_fields( $fields ) {
// Получаем массив данных
$countries_data = get_states_and_cities();
// Добавляем поле для штатов
$fields['billing']['billing_state'] = array(
'type' => 'select',
'label' => __('State', 'woocommerce'),
'options' => array(),
'required' => true,
);
// Добавляем поле для городов
$fields['billing']['billing_city'] = array(
'type' => 'select',
'label' => __('City', 'woocommerce'),
'options' => array(),
'required' => true,
);
return $fields;
}
add_filter( 'woocommerce_checkout_fields', 'custom_woocommerce_checkout_fields' );
Шаг 3: Динамическое обновление выпадающих списков
Теперь мы добавим JavaScript, чтобы управлять изменением опций в выпадающих списках в зависимости от выбранной страны.
function enqueue_custom_scripts() {
if (is_checkout()) {
// Добавляем свой скрипт
wp_enqueue_script('custom-checkout-script', get_template_directory_uri() . '/js/custom-checkout.js', array('jquery'), null, true);
wp_localize_script('custom-checkout-script', 'customData', get_states_and_cities());
}
}
add_action('wp_enqueue_scripts', 'enqueue_custom_scripts');
Шаг 4: JavaScript для изменения выпадающих списков
Создайте файл custom-checkout.js
в вашей папке JavaScript темы с следующим содержанием:
jQuery(document).ready(function($){
$('#billing_country').change(function(){
var country = $(this).val();
var states = customData[country] ? customData[country].states : {};
var $stateField = $('#billing_state');
var $cityField = $('#billing_city');
// Очистить состояния и города
$stateField.empty();
$cityField.empty();
// Добавить состояния
$.each(states, function (code, cities) {
$stateField.append($('<option>').val(code).text(code)); // Можно заменить на реальные названия
});
// Обновить города
$stateField.change(function() {
var selectedState = $(this).val();
var cities = states[selectedState] || [];
$cityField.empty();
$.each(cities, function (index, city) {
$cityField.append($('<option>').val(city).text(city));
});
});
});
});
Заключение
Эта инструкция предоставляет полное решение для замены полей состояния и города на выпадающие списки в WooCommerce, основанные на выборе страны. Вы можете адаптировать код под свои нужды, добавляя больше стран и их соответствующие города. Убедитесь, что после внесения изменений вы тщательно протестировали их на своем сайте, чтобы гарантировать корректное функционирование.