Здравствуйте
Хочу на странице оформления заказа уйти от введения индекса для расчета доставки. Задумка такая, пользователь выбирает улицу из раскрывающегося списка и на основании этого выбора billing_postcode должно присвоиться значение индекса улицы. Магазин работает в одном городе и стоимость доставки рассчитывается по улицам. Искал готовые решения, но ничего не нашел. Хотя, думаю, многие хотели бы убрать заполнение индекса для облегчения процесса оформления заказа.
В functions.php добавил следующий код. Подскажите, пожалуйста, как billing_postcode присвоить значение улицы, которую выбрал покупатель? Т.е. покупатель выбрал, например, Ленина и billing_postcode автоматически стал 452000 и доставка рассчиталась для этого индекса
Хочу на странице оформления заказа уйти от введения индекса для расчета доставки. Задумка такая, пользователь выбирает улицу из раскрывающегося списка и на основании этого выбора billing_postcode должно присвоиться значение индекса улицы. Магазин работает в одном городе и стоимость доставки рассчитывается по улицам. Искал готовые решения, но ничего не нашел. Хотя, думаю, многие хотели бы убрать заполнение индекса для облегчения процесса оформления заказа.
В functions.php добавил следующий код. Подскажите, пожалуйста, как billing_postcode присвоить значение улицы, которую выбрал покупатель? Т.е. покупатель выбрал, например, Ленина и billing_postcode автоматически стал 452000 и доставка рассчиталась для этого индекса
Код:
// Добавляем новые поля
// Добавляем поля
add_action( 'woocommerce_after_checkout_billing_form', 'wpbl_text_field' );
// Сохраняем поля
add_action( 'woocommerce_checkout_update_order_meta', 'wpbl_save_fields' );
// // Поле text
function wpbl_text_field( $checkout ){
// Описываем поле name2
woocommerce_form_field( 'name2', array(
'type' => 'text', // Тип поля. Можно любое - text, textarea, select, radio, checkbox, password. В нашем случае это select
'required' => false, // этот параметр добавляет звездочку "*" к полю
'class' => array('wpbl-field', 'form-row-wide'), // Массив CSS классов
'label' => 'Имя получателя', // Заголовок поля
'label_class' => 'wpbl-label', // CSS класс заголовка
), $checkout->get_value( 'name2' ) );
// Описываем поле tel2
woocommerce_form_field( 'tel2', array(
'type' => 'text', // Тип поля. Можно любое - text, textarea, select, radio, checkbox, password. В нашем случае это select
'required' => false, // этот параметр добавляет звездочку "*" к полю
'class' => array('wpbl-field', 'form-row-wide'), // Массив CSS классов
'label' => 'Телефон получателя', // Заголовок поля
'label_class' => 'wpbl-label', // CSS класс заголовка
), $checkout->get_value( 'tel2' ) );
}
// Функция сохранения
function wpbl_save_fields( $order_id ){
// Сохраняем select
if( !empty( $_POST['name2'] ) ){
update_post_meta( $order_id, 'name2', sanitize_text_field( $_POST['name2'] ) );
}
// Сохраняем select
if( !empty( $_POST['tel2'] ) ){
update_post_meta( $order_id, 'tel2', sanitize_text_field( $_POST['tel2'] ) );
}
// Сохраняем select
if( !empty( $_POST['ulizza'] ) ){
update_post_meta( $order_id, 'ulizza', sanitize_text_field( $_POST['ulizza'] ) );
}
}
// конец добавленя полей
// добавляем раскрывающийся список городов
add_filter( 'woocommerce_checkout_fields' , 'override_checkout_city_fields' );
function override_checkout_city_fields( $fields ) {
// Define here in the array your desired cities (Here an example of cities)
$option_cities = array(
'' => __( 'Выберите улицу' ),
'Karachi' => 'Karachi',
'452000' => 'Ленина',
'Faisalabad' => 'Faisalabad',
'Rawalpindi' => 'Rawalpindi',
'Gujranwala' => 'Gujranwala',
'Peshawar' => 'Peshawar',
'Multan' => 'Multan',
'Hyderabad' => 'Hyderabad',
'Islamabad' => 'Islamabad'
);
$fields['billing']['billing_city']['type'] = 'select';
$fields['billing']['billing_city']['options'] = $option_cities;
$fields['shipping']['shipping_city']['type'] = 'select';
$fields['shipping']['shipping_city']['options'] = $option_cities;
return $fields;
}
$fields['billing']['billing_postcode']['options'] = array(
'Karachi' => 'Karachi',
'452600' => 'Гаражная',
'Faisalabad' => 'Faisalabad',
'Rawalpindi' => 'Rawalpindi',
'Gujranwala' => 'Gujranwala',
'Peshawar' => 'Peshawar',
'Multan' => 'Multan',
'Hyderabad' => 'Hyderabad',
'Islamabad' => 'Islamabad'
);
// скрываем ненужные поля
add_filter( 'woocommerce_checkout_fields', 'wpbl_remove_some_fields', 9999 );
function wpbl_remove_some_fields( $array ) {
//unset( $array['billing']['billing_first_name'] ); // Имя
//unset( $array['billing']['billing_phone'] ); // Телефон
//unset( $array['billing']['billing_city'] ); // Населённый пункт
////unset( $array['billing']['billing_ulizza'] ); // Улица
//unset( $array['billing']['billing_address_1'] ); // 1-ая строка адреса
//unset( $array['billing']['billing_address_2'] ); // 2-ая строка адреса
//unset( $array['order']['order_comments'] ); // Примечание к заказу
//unset( $array['billing']['name2'] ); // Имя получателя
//unset( $array['billing']['tel2'] ); // Телефон получателя
//unset( $array['billing']['billing_postcode'] ); // Почтовый индекс
unset( $array['billing']['billing_last_name'] ); // Фамилия
unset( $array['billing']['billing_email'] ); // Email
unset( $array['billing']['billing_company'] ); // Компания
unset( $array['billing']['billing_country'] ); // Страна
unset( $array['billing']['billing_state'] ); // Область / район
// Возвращаем обработанный массив
return $array;
}
// меняем поля местами
add_filter( 'woocommerce_checkout_fields', 'wplb_phone_first' );
function wplb_phone_first( $array ) {
// Меняем приоритет
$array['billing']['billing_phone']['priority'] = 14;
// назначаем ширину
$array['billing']['billing_phone']['class'][0] = 'form-row-last';
// Возвращаем обработанный массив
return $array;
}