• Никакой политики на форуме. Иначе - бан!
  • Вопрос без рабочей ссылки на проблему считается риторическим. Без ссылки и скриншота - провокацией!
  • Темы озаглавленные с маленькой буквы или капсом удаляются без предупреждения!

Проблема с редактированием полей на странице checkout, прошу совета

Ivan5576

Новичок
Здравствуйте! Установил плагин и возникла необходимость изменить поля на странице подтверждения заказа. Убрать required с ненужных полей получилось без проблем, все работает, проверки не требует. Вот все фильтры, которые применил:

// Hook in
add_filter( 'woocommerce_default_address_fields' , 'custom_override_default_address_fields' );

// Our hooked in function - $address_fields is passed via the filter!
function custom_override_default_address_fields( $address_fields ) {
$address_fields['country']['required'] = false;
$address_fields['first_name']['required'] = false;
$address_fields['last_name']['required'] = false;
$address_fields['address_1']['required'] = false;
$address_fields['address_2']['required'] = false;
$address_fields['city']['required'] = false;
$address_fields['state']['required'] = false;
$address_fields['postcode']['required'] = false;

return $address_fields;
}

Но когда привел страницу к окончательному виду, удалив ненужное и отредактировав оставшееся, при подтверждении выдает "Пожалуйста, введите адрес для продолжения" . Вот фильтры, которые добавил:

// Хук
add_filter( 'woocommerce_checkout_fields' , 'custom_override_checkout_fields' );
// Все $fields в этой функции будут пропущены через фильтр
function custom_override_checkout_fields( $fields ) {
unset($fields['billing']['billing_last_name']);
unset($fields['billing']['billing_company']);
unset($fields['billing']['billing_address_2']);
unset($fields['billing']['billing_city']);
unset($fields['billing']['billing_postcode']);
unset($fields['billing']['billing_country']);
unset($fields['billing']['billing_state']);
unset($fields['billing']['billing_email']);
$fields['billing']['billing_email']['required'] = false;
$fields['billing']['billing_first_name']['placeholder'] = 'Ваше имя';
$fields['billing']['billing_first_name']['label'] = 'Имя:';
$fields['billing']['billing_address_1']['placeholder'] = 'Улица, номер дома и квартира';
$fields['billing']['billing_address_1']['label'] = 'Адрес доставки:';
$fields['billing']['billing_phone']['placeholder'] = 'Ваш номер';
$fields['billing']['billing_phone']['label'] = 'Номер телефона:';
$fields['order']['order_comments']['placeholder'] = '';
$fields['order']['order_comments']['label'] = 'Для комментариев к заказу:';

return $fields;
}

То есть без удаления полей заказ спокойно подтверждается без адреса, а после добавления вышеуказанного кода адрес начинает требовать.
Подскажите, где я ошибся?
Спасибо!
 
Последнее редактирование:

Ivan5576

Новичок
Определил, что проблема в поле country, это селектор, при удалении которого и всплывает "Пожалуйста, введите адрес для продолжения". Не подскажете, как обойти его?
 

tuxfighter

Гуру
Местный
а чем вам так не нравятся плагины, что вы решили воспользоваться непонятно откуда взятым кодом?
 
  • Like
Реакции: D&B

Ivan5576

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

tuxfighter

Гуру
Местный
попробуйте внятно объяснить, как код, написанный специалистом, оформленный как плагин, который постоянно поддерживается и обновляется, дает большую "дополнительную нагрузку" , чем код, вставленный в function.php, который к тому же не работает?
 

Ivan5576

Новичок
в смысле не работает? работает прекрасно, как и должен. Да и было бы странно иное, ведь инструкция с кодом написана специалистами, разработчиками плагина вукомерс, который постоянно ими поддерживается и обновляется.
Там не выполняется условие выбора страны. Из-за того что удаляется поле-селектор country, плагин не получает ответ, какая страна доставки выбрана, и не регистрирует заказ.
 

tuxfighter

Гуру
Местный
Там не выполняется условие выбора страны. Из-за того что удаляется поле-селектор country, плагин не получает ответ, какая страна доставки выбрана, и не регистрирует заказ.
т.е. это вы называете прекрасной работой?
 

Ivan5576

Новичок
т.е. это вы называете прекрасной работой?
Это как раз не прекрасно, но это уже НЕ относится к работе тех фильтров, которые, как вы говорите, не работают. Это должно регулироваться другими командами, а фильтры выполняют свою функцию прекрасно, о чем я и написал.
 

Marauder

Новичок
Здравствуйте! Установил плагин и возникла необходимость изменить поля на странице подтверждения заказа. Убрать required с ненужных полей получилось без проблем, все работает, проверки не требует. Вот все фильтры, которые применил:

// Hook in
add_filter( 'woocommerce_default_address_fields' , 'custom_override_default_address_fields' );

// Our hooked in function - $address_fields is passed via the filter!
function custom_override_default_address_fields( $address_fields ) {
$address_fields['country']['required'] = false;
$address_fields['first_name']['required'] = false;
$address_fields['last_name']['required'] = false;
$address_fields['address_1']['required'] = false;
$address_fields['address_2']['required'] = false;
$address_fields['city']['required'] = false;
$address_fields['state']['required'] = false;
$address_fields['postcode']['required'] = false;

return $address_fields;
}

Но когда привел страницу к окончательному виду, удалив ненужное и отредактировав оставшееся, при подтверждении выдает "Пожалуйста, введите адрес для продолжения" . Вот фильтры, которые добавил:

// Хук
add_filter( 'woocommerce_checkout_fields' , 'custom_override_checkout_fields' );
// Все $fields в этой функции будут пропущены через фильтр
function custom_override_checkout_fields( $fields ) {
unset($fields['billing']['billing_last_name']);
unset($fields['billing']['billing_company']);
unset($fields['billing']['billing_address_2']);
unset($fields['billing']['billing_city']);
unset($fields['billing']['billing_postcode']);
unset($fields['billing']['billing_country']);
unset($fields['billing']['billing_state']);
unset($fields['billing']['billing_email']);
$fields['billing']['billing_email']['required'] = false;
$fields['billing']['billing_first_name']['placeholder'] = 'Ваше имя';
$fields['billing']['billing_first_name']['label'] = 'Имя:';
$fields['billing']['billing_address_1']['placeholder'] = 'Улица, номер дома и квартира';
$fields['billing']['billing_address_1']['label'] = 'Адрес доставки:';
$fields['billing']['billing_phone']['placeholder'] = 'Ваш номер';
$fields['billing']['billing_phone']['label'] = 'Номер телефона:';
$fields['order']['order_comments']['placeholder'] = '';
$fields['order']['order_comments']['label'] = 'Для комментариев к заказу:';

return $fields;
}

То есть без удаления полей заказ спокойно подтверждается без адреса, а после добавления вышеуказанного кода адрес начинает требовать.
Подскажите, где я ошибся?
Спасибо!
Возможно ошибка в том, что сначала вы удаляете переменную unset, и только потом пытаетесь изменить свойство required
У меня такой код работает отлично:
 

Ivan5576

Новичок
Вобщем пишу для тех, кто, как и я, столкнулся с этой проблемой, ошибки "пожалуйста введите адрес для продолжения" при оформлении заказа. Если у вас даже после применения вышеперечисленных хуков, отменяющих обязательное заполнение поля "Адрес", данная ошибка вылезает и не дает сделать заказ, значит вам нужно перейти в панель управления, раздел "Woocommerce" - настройки - основные - стандартное местоположение клиента и выбрать "Адрес магазина".

Таким образом, вы подключаете автоматическое заполнение этой графы адресом своего магазина, и система позволяет завершить заказ. По умолчанию же графа должна быть заполнена клиентом, и даже если вы удалите ее и сделаете необязательной с помощью хуков, все равно система не даст завершить вам заказ, показав ошибку "пожалуйста введите адрес для продолжения", так как адрес не заполнен.
 
  • Like
Реакции: ADv
Сверху Снизу