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

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

Тема в разделе "Вопросы новичков", создана пользователем vas555vas, 22 авг 2014.

  1. vas555vas

    vas555vas

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

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

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

    Спасибо.
     
  2. galiulinr

    galiulinr Местный

    Сообщения:
    205
    Симпатии:
    76
    Баллы:
    28
    Можно скрыть все поля с помощью данного кода:
    Код:
    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' ) но это не прошло, может кто подскажет, а то тема актуальна.
     
  3. Stork.71

    Stork.71 Местный

    Сообщения:
    1.139
    Симпатии:
    313
    Баллы:
    83
    А если попробовать действовать аналогичным способом, но не скрывать поля, а делать их необязательными?
     
  4. vas555vas

    vas555vas

    Сообщения:
    16
    Симпатии:
    0
    Баллы:
    1

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

    kvo

    Сообщения:
    59
    Симпатии:
    6
    Баллы:
    8
    А как всё таки сделать поле E-mail необязательным? :)
     
  6. redjek

    redjek Местный

    Сообщения:
    155
    Симпатии:
    38
    Баллы:
    28
    Для управлением полей служит хороший плагин woocommerce checkout manager (удалениие полей, снятие звездочек и тд)
    http://wordpress.org/plugins/woocommerce-checkout-manager/
     
    • Согласен Согласен x 1
  7. galiulinr

    galiulinr Местный

    Сообщения:
    205
    Симпатии:
    76
    Баллы:
    28
    Это надо вставить в функцию темы файл functions.php
     
  8. vas555vas

    vas555vas

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

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

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

    ni4egonet

    Сообщения:
    2
    Симпатии:
    0
    Баллы:
    1
    Подскажите, вы решили этот вопрос?
    Сейчас над этим же мудрю)
     
  10. sergori

    sergori

    Сообщения:
    24
    Симпатии:
    10
    Баллы:
    3
    Я не программист, но попробуйте такой код
    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;
    }}
     
  11. 5541G

    5541G

    Сообщения:
    2
    Симпатии:
    0
    Баллы:
    1
    Добрый день. Так не работает. Подскажите пожалуйста как все таки скрывать поля при самовывозе. Спасибо
     
  12. D&B

    D&B Администратор Команда форума Местный

    Сообщения:
    3.699
    Симпатии:
    876
    Баллы:
    113
  13. leksus

    leksus

    Сообщения:
    10
    Симпатии:
    0
    Баллы:
    1
    Данный плагин не помогает в вопросе, заданном в начале топика. У него нет возможности изменять поля в зависимости от выбранного способа доставки. Таким образом, этот вопрос не решен.
     
  14. yaspis

    yaspis

    Сообщения:
    3
    Симпатии:
    2
    Баллы:
    3
    Во-первых надо убрать обязательность заполнения полей, которые требуется скрыть. А затем проанализировать какой метод доставки выбран ($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;}
     
    • Нравится Нравится x 2
  15. EliteWars

    EliteWars

    Сообщения:
    8
    Симпатии:
    1
    Баллы:
    3
    Saphali Wc Lite имеет данный функционал, ну это так если что)
     
  16. leksus

    leksus

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

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

    EliteWars

    Сообщения:
    8
    Симпатии:
    1
    Баллы:
    3
    Я тебе говорю есть! Вот тебе скрин!
    В правом столбце выбираешь какие поля и при каких методах доставки будут действовать!
    И точно так же как ты написал сначала показывает мельком полную форму а потом остаются те которые в настройке на данный вид доставки. otvetwc.jpg
     
    • Нравится Нравится x 1
  18. ADv

    ADv Местный

    Сообщения:
    692
    Симпатии:
    261
    Баллы:
    63
    Как раз понадобился такой функционал. Подтверждаю, что в Saphali WC Lite такая возможность есть. На скрине выше это прекрасно видно.
     
  19. leksus

    leksus

    Сообщения:
    10
    Симпатии:
    0
    Баллы:
    1
    Вы либо сговорились, либо оба плохо соображаете. На скрине выше прекрасно видно, что речь не про доставку, а про оплату. Про способы доставки в этом плагине ничего не сказано.
     
    • Это здорово! Это здорово! x 2
  20. EliteWars

    EliteWars

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