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

Решено Как избавится от заполнения всех полей при Самовывозе?

Image CMS

vas555vas

Новичок
#1
Вопрос:
******
А еще, столкнулся с таким неприятным моментом как необходимость заполнения всех полей при самовывозе.

Я хочу от этого избавиться, вопрос - как этого добиться?

Чтобы посетитель сайта, выбирая Доставка -> САМОВЫВОЗ, не заполнял поля адрес, имя и т.п.

Спасибо.
 

galiulinr

Опытный
Местный
#2
Можно скрыть все поля с помощью данного кода:
Код:
add_filter ('woocommerce_checkout_fields', 'remove_fields_local');
function remove_fields_local($fields, $available_methods){
    unset($fields['billing']['billing_first_name']);
    unset($fields['billing']['billing_last_name']);
    unset($fields['billing']['billing_company']);
    unset($fields['billing']['billing_address_1']);
    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_phone']);
    unset($fields['order']['order_comments']);
    unset($fields['billing']['billing_address_2']);
    unset($fields['billing']['billing_postcode']);
    unset($fields['billing']['billing_company']);
    unset($fields['billing']['billing_last_name']);
    unset($fields['billing']['billing_email']);
    unset($fields['billing']['billing_city']);   
    return $fields;
}
но он скроет для всех способов оплаты, остается только придумать как проанализировать какой метод доставки выбран ($method) в нашем случае 'local_pickup' и активировать данный код для этого метода. Пробовал ставить if( $method->id == 'local_pickup' ) но это не прошло, может кто подскажет, а то тема актуальна.
 

Stork.71

Гуру
Местный
#3
Можно скрыть все поля с помощью данного кода:
но он скроет для всех способов оплаты, остается только придумать как проанализировать какой метод доставки выбран ($method) в нашем случае 'local_pickup' и активировать данный код для этого метода. Пробовал ставить if( $method->id == 'local_pickup' ) но это не прошло, может кто подскажет, а то тема актуальна.
А если попробовать действовать аналогичным способом, но не скрывать поля, а делать их необязательными?
 

vas555vas

Новичок
#4
Можно скрыть все поля с помощью данного кода:
Код:
add_filter ('woocommerce_checkout_fields', 'remove_fields_local');
function remove_fields_local($fields, $available_methods){
    unset($fields['billing']['billing_first_name']);
    unset($fields['billing']['billing_last_name']);
    unset($fields['billing']['billing_company']);
    unset($fields['billing']['billing_address_1']);
    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_phone']);
    unset($fields['order']['order_comments']);
    unset($fields['billing']['billing_address_2']);
    unset($fields['billing']['billing_postcode']);
    unset($fields['billing']['billing_company']);
    unset($fields['billing']['billing_last_name']);
    unset($fields['billing']['billing_email']);
    unset($fields['billing']['billing_city']);  
    return $fields;
}
но он скроет для всех способов оплаты, остается только придумать как проанализировать какой метод доставки выбран ($method) в нашем случае 'local_pickup' и активировать данный код для этого метода. Пробовал ставить if( $method->id == 'local_pickup' ) но это не прошло, может кто подскажет, а то тема актуальна.

В какой папке этот код располагается?
 

vas555vas

Новичок
#8
все предложенные коды и фильтры работают для ВСЕХ вариантов Доставки и для Самовывоза и для Курьера и т.п.
А задача - сделать фильтр только, когда посетитель выбирает пункт САМОВЫВОЗ.
т.е. чтобы человек не заполнял все поля.
Зачем ему заполнять, например, поле Адрес, Компания и т.п., если он сам забирает товар.
Для САМОВЫВОЗА достаточно заполнить поля: Имя, Тел.

Если сейчас применить предложенные фильтры или скрыть кодом поля, то поля скрываются для всех видов Доставки, а нужно только для САМОВЫВОЗА.

Как это можно сделать?
Спасибо.
 

ni4egonet

Новичок
#9
все предложенные коды и фильтры работают для ВСЕХ вариантов Доставки и для Самовывоза и для Курьера и т.п.
А задача - сделать фильтр только, когда посетитель выбирает пункт САМОВЫВОЗ.
т.е. чтобы человек не заполнял все поля.
Зачем ему заполнять, например, поле Адрес, Компания и т.п., если он сам забирает товар.
Для САМОВЫВОЗА достаточно заполнить поля: Имя, Тел.

Если сейчас применить предложенные фильтры или скрыть кодом поля, то поля скрываются для всех видов Доставки, а нужно только для САМОВЫВОЗА.

Как это можно сделать?
Спасибо.
Подскажите, вы решили этот вопрос?
Сейчас над этим же мудрю)
 

sergori

Новичок
#10
Я не программист, но попробуйте такой код
if ($WC_Shipping_Method == local_pickup) {
add_filter ('woocommerce_checkout_fields', 'remove_fields_local');
function remove_fields_local($fields, $available_methods){
unset($fields['billing']['billing_first_name']);
unset($fields['billing']['billing_last_name']);
unset($fields['billing']['billing_company']);
unset($fields['billing']['billing_address_1']);
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_phone']);
unset($fields['order']['order_comments']);
unset($fields['billing']['billing_address_2']);
unset($fields['billing']['billing_postcode']);
unset($fields['billing']['billing_company']);
unset($fields['billing']['billing_last_name']);
unset($fields['billing']['billing_email']);
unset($fields['billing']['billing_city']);
return $fields;
}}
 

5541G

Новичок
#11
Я не программист, но попробуйте такой код
if ($WC_Shipping_Method == local_pickup) {
add_filter ('woocommerce_checkout_fields', 'remove_fields_local');
function remove_fields_local($fields, $available_methods){
unset($fields['billing']['billing_first_name']);
unset($fields['billing']['billing_last_name']);
unset($fields['billing']['billing_company']);
unset($fields['billing']['billing_address_1']);
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_phone']);
unset($fields['order']['order_comments']);
unset($fields['billing']['billing_address_2']);
unset($fields['billing']['billing_postcode']);
unset($fields['billing']['billing_company']);
unset($fields['billing']['billing_last_name']);
unset($fields['billing']['billing_email']);
unset($fields['billing']['billing_city']);
return $fields;
}}
Добрый день. Так не работает. Подскажите пожалуйста как все таки скрывать поля при самовывозе. Спасибо
 

leksus

Новичок
#13

yaspis

Новичок
#14
Во-первых надо убрать обязательность заполнения полей, которые требуется скрыть. А затем проанализировать какой метод доставки выбран ($method) в нашем случае ‘local_pickup’ и активировать код скрывающий поля адреса для этого метода.

Уберем обязательность заполнения полей.
Это можно сделав переопределив необходимые вам поля в файле functions.php вашей темы:

// Хук
add_filter( 'woocommerce_checkout_fields' , 'custom_override_checkout_fields' );
// Все $fields в этой функции будут пропущены через фильтр
function custom_override_checkout_fields( $fields ) {
$fields['billing']['billing_state_name']['required'] = false;
$fields['billing']['billing_address_1']['required'] = false;
$fields['billing']['billing_address_2']['required'] = false;
return $fields; }

Теперь их можно беспрепятственно скрывать.
Для этого я использовала следующий скрипт (в файл со скриптами темы):


$( 'body' ).on('updated_checkout', function () {
var method = woocommerce_params.chosen_shipping_method;
$( 'select.shipping_method, input[name^=shipping_method][type=radio]:checked, input[name^=shipping_method][type=hidden]' ).each( function( index, input ) {
method = $( this ).val();
} );
if( method.indexOf('local_pickup') >= 0 ) {
//Если самовывоз
$( '#billing_address_1_field, #billing_state_name_field, #billing_address_2_field').hide().addClass('hidden'); //Прячем адрес
} else {
// Для всех остальных методов
$( '#billing_address_1_field, #billing_address_2_field, #billing_state_name_field').show().removeClass('hidden'); //Показываем адрес
}
} );

И не забудьте добавить в css стиль (в файле стилей темы):
.hidden{display:none;}
 

leksus

Новичок
#16
Saphali Wc Lite имеет данный функционал, ну это так если что)
Нет, он не имеет данный функционал, как и куча других плагинов - редакторов форм. Ни у одного плагина нет возможности изменять форму оформления заказа в зависимости от типа доставки. Ну это так, если что ) Я перепробовал:
- Woo Checkout Field Editor Pro
- WooCommerce Advanced Shipping
- WooCommerce Checkout Field Editor
- WooCommerce Checkout Manager
- WooCommerce Local Pickup Plus
- Saphali Woocommerce Lite

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

EliteWars

Новичок
#17
Нет, он не имеет данный функционал, как и куча других плагинов - редакторов форм. Ни у одного плагина нет возможности изменять форму оформления заказа в зависимости от типа доставки. Ну это так, если что ) Я перепробовал:
- Woo Checkout Field Editor Pro
- WooCommerce Advanced Shipping
- WooCommerce Checkout Field Editor
- WooCommerce Checkout Manager
- WooCommerce Local Pickup Plus
- Saphali Woocommerce Lite

Теперь касаемо того, что написала yaspis. Да, я в итоге примерно так и сделал, спасибо, Екатерина. Немного напрягает то, что переписывание формы происходит уже после полной загрузки страницы, то есть, на секунду появляется сначала полная форма, а затем уже перерисовывается. Но это мелочи :)
Я тебе говорю есть! Вот тебе скрин!
В правом столбце выбираешь какие поля и при каких методах доставки будут действовать!
И точно так же как ты написал сначала показывает мельком полную форму а потом остаются те которые в настройке на данный вид доставки. otvetwc.jpg
 

ADv

Гуру
Местный
#18
Нет, он не имеет данный функционал, как и куча других плагинов - редакторов форм. Ни у одного плагина нет возможности изменять форму оформления заказа в зависимости от типа доставки. Ну это так, если что ) Я перепробовал:
- Woo Checkout Field Editor Pro
- WooCommerce Advanced Shipping
- WooCommerce Checkout Field Editor
- WooCommerce Checkout Manager
- WooCommerce Local Pickup Plus
- Saphali Woocommerce Lite

Теперь касаемо того, что написала yaspis. Да, я в итоге примерно так и сделал, спасибо, Екатерина. Немного напрягает то, что переписывание формы происходит уже после полной загрузки страницы, то есть, на секунду появляется сначала полная форма, а затем уже перерисовывается. Но это мелочи :)
Как раз понадобился такой функционал. Подтверждаю, что в Saphali WC Lite такая возможность есть. На скрине выше это прекрасно видно.
 

leksus

Новичок
#19
Как раз понадобился такой функционал. Подтверждаю, что в Saphali WC Lite такая возможность есть. На скрине выше это прекрасно видно.
В правом столбце выбираешь какие поля и при каких методах доставки будут действовать!
Вы либо сговорились, либо оба плохо соображаете. На скрине выше прекрасно видно, что речь не про доставку, а про оплату. Про способы доставки в этом плагине ничего не сказано.
 

EliteWars

Новичок
#20
Вы либо сговорились, либо оба плохо соображаете. На скрине выше прекрасно видно, что речь не про доставку, а про оплату. Про способы доставки в этом плагине ничего не сказано.
Да чего ты споришь) 1 +2 = 3 и 2 + 1 = 3 роль то не играет.
Что ты для "доставки способ оплаты" хотел сделать определенный, что для "оплаты сделать способ доставки" определенный.
Тебе же главное чтобы при выборе доставки у тебя отображало определенные поля для заполнения.
Ну вот и настраивай как показали, так и делается)
 
Сверху Снизу