WooCommerce - условные поля оформления заказа для настраиваемого статуса разных людей

Мне нужно изменить процесс оформления заказа для веб-сайта woocommere. Процесс определяется статусом человека, который может быть одним из следующих:
- 'legal entity'
- 'individual'

Мне нужен селектор 'User status' (или радиокнопки) сразу после 'billing_first_name' и 'billing_last_name'.

Селектор должен работать следующим образом:

  1. If 'legal entity' is selected, it should display 3 fields:
    • 'phone_number'
    • 'Эл. адрес'
    • 'serial_id'
  2. If 'individual' is selected, it should display 3 other fields:
    • 'custom_field1'
    • 'пользовательское_поле2'
    • 'пользовательское_поле3'

Я попробовал WooCommerce Checkout Manager и другой плагин, но проблема в том, что я не могу сделать соответствующие условия.

Как я могу этого добиться?

Спасибо.


person Panait Andrei Alexandru    schedule 16.08.2016    source источник
comment
после того, как пользователь введет фамилию. структура такая: - имя - фамилия - статус лица а) юридическое лицо: б) физическое лицо, если оно а), будет отображаться: номер телефона, электронная почта и серийный номер, если будет б) будет появляются: другие 3 поля и после этого классические поля.   -  person Panait Andrei Alexandru    schedule 17.08.2016
comment
Поскольку ваш вопрос слишком широк, я помог бы, только если вы разделите свои вопросы: Часть 1 (СЕЙЧАС) Создание новых настраиваемых полей выставления счетов и изменение порядка полей выставления счетов (чтобы они соответствовали тому, что вы хотите)… Затем (ПОСЛЕ) по другому вопросу: Создание условной части (для которой нужен jQuery (javascript) и, возможно, ajax). Поэтому, пожалуйста, отредактируйте свой вопрос, чтобы была только часть 1.   -  person LoicTheAztec    schedule 18.08.2016
comment
Мне нужно изменить процесс оформления заказа для веб-сайта woocommere. Процесс определяется статусом человека, который может быть одним из следующих: - 'юридическое лицо' - 'физическое лицо' Мне нужен селектор 'Статус пользователя' (или переключатели), сразу после 'имя_биллинга' и ' биллинг_фамилия». Селектор должен работать следующим образом: если выбрано «юридическое лицо», он должен отображать 3 поля: «номер_телефона», «электронная почта», «серийный_идентификатор».   -  person Panait Andrei Alexandru    schedule 24.08.2016
comment
Я понял ваш вопрос (не нужно объяснять), но ваш вопрос слишком широк для одного вопроса… Прочитайте еще раз мой Первый комментарий, пожалуйста… Если вы одобрите, я опубликую здесь только часть 1. После этого, с кодом моего Ответьте, вы зададите еще один вопрос в новой теме для части 2… ВЫ СОГЛАСНЫ… Если вы согласны, просто прокомментируйте здесь, с Я согласен разделить мой вопрос. Как только закончу, я отвечу на часть 1 ЗДЕСЬ…   -  person LoicTheAztec    schedule 24.08.2016
comment
оо, теперь я понял, я думал, что вы хотите опубликовать еще один вопрос.. конечно, я согласен разделить свой вопрос   -  person Panait Andrei Alexandru    schedule 24.08.2016


Ответы (1)


Для WooCommerce 3+ (обновление):

Поскольку поля оформления заказа WooCommerce 3.0 немного изменились, невозможно изменить порядок полей, как раньше.

Существует новый аргумент 'priority', который управляет порядком полей, а также для полей проверки и полей моей учетной записи.

Ниже я просто обновляю часть, связанную с полями заказа:

## 3. Ordering the billing fields

// Set the order of the fields
$billing_fields_new_order = array(
    'billing_first_name', 'billing_last_name', 'billing_status',
    'billing_email',      'billing_phone',     'billing_serial_id',
    'billing_custom1',    'billing_custom2',   'billing_custom3',
    'billing_company',    'billing_address_1', 'billing_address_2',
    'billing_postcode',   'billing_city',      'billing_country',
);

$count = 0;
$priority = 10;

// Updating the 'priority' argument
foreach($billing_fields_new_order as $field_name){
    $count++;
    $fields['billing'][$field_name]['priority'] = $count * $priority;
}

// END: returning the customized checkout fields
return $fields;

Ссылка: Изменение порядка полей проверки в WooCommerce 3< /а>


Исходный ответ:

Вам нужно использовать хук woocommerce_checkout_fields. Затем сначала создайте новые поля. После настройки некоторых классов полей. Чтобы закончить, измените порядок поля в соответствии с вашим желанием.

Вот код:

add_filter( 'woocommerce_checkout_fields', 'custom_checkout_billing_fields' );
function custom_checkout_billing_fields( $fields ) {

// 1. Creating the additional custom billing fields

    // The "status" selector
    $fields['billing']['billing_status']['type'] = 'select';
    $fields['billing']['billing_status']['class'] = array('form-row-wide, status-select');
    $fields['billing']['billing_status']['required'] = true;
    $fields['billing']['billing_status']['label'] = __('User status', 'my_theme_slug');
    $fields['billing']['billing_status']['placeholder'] = __('Chose an option', 'my_theme_slug');
    $fields['billing']['billing_status']['options'] = array(
        '' => 'Chose an option',
        '1' => 'Legal entity',
        '2' => 'Individual'
    );

    // The "Serial ID" text field
    $fields['billing']['billing_serial_id']['type'] = 'text';
    $fields['billing']['billing_serial_id']['class'] = array('form-row-wide', 'status-group1');
    $fields['billing']['billing_serial_id']['required'] = true;
    $fields['billing']['billing_serial_id']['label'] = __('Serial ID', 'my_theme_slug');
    $fields['billing']['billing_serial_id']['placeholder'] = __('Enter your Serial ID', 'my_theme_slug');

    // The "Custom 1" text field
    $fields['billing']['billing_custom1']['type'] = 'text';
    $fields['billing']['billing_custom1']['class'] = array('form-row-wide', 'status-group2');
    $fields['billing']['billing_custom1']['required'] = true;
    $fields['billing']['billing_custom1']['label'] = __('Custom name 1', 'my_theme_slug');
    $fields['billing']['billing_custom1']['placeholder'] = __('Enter your custom1', 'my_theme_slug');

    // The "Custom 2" text field
    $fields['billing']['billing_custom2']['type'] = 'text';
    $fields['billing']['billing_custom2']['class'] = array('form-row-wide', 'status-group2');
    $fields['billing']['billing_custom2']['required'] = true;
    $fields['billing']['billing_custom2']['label'] = __('Custom name 2', 'my_theme_slug');
    $fields['billing']['billing_custom2']['placeholder'] = __('Enter your custom2', 'my_theme_slug');

    // The "Custom 3" text field
    $fields['billing']['billing_custom3']['type'] = 'text';
    $fields['billing']['billing_custom3']['class'] = array('form-row-wide', 'status-group2');
    $fields['billing']['billing_custom3']['required'] = true;
    $fields['billing']['billing_custom3']['label'] = __('Custom name 3', 'my_theme_slug');
    $fields['billing']['billing_custom3']['placeholder'] = __('Enter your custom3', 'my_theme_slug');


// 2. Customizing 'billing_email' and 'billing_phone' fields ['class']

    $fields['billing']['billing_email']['class'] = array('form-row-first', 'status-group1');
    $fields['billing']['billing_phone']['class'] = array('form-row-last', 'status-group1');


// 3. Ordering the billing fields

    $fields_order = array(
        'billing_first_name', 'billing_last_name', 'billing_status',
        'billing_email',      'billing_phone',     'billing_serial_id',
        'billing_custom1',    'billing_custom2',   'billing_custom3',
        'billing_company',    'billing_address_1', 'billing_address_2',
        'billing_postcode',   'billing_city',      'billing_country',
    );
    foreach($fields_order as $field) $ordered_fields[$field] = $fields['billing'][$field];

    $fields['billing'] = $ordered_fields;
    

// Returning Checkout customized billing fields

    return $fields;

}

Естественно, это происходит в файле function.php вашей активной дочерней темы или темы.

Этот код протестирован и полностью функционален.

Теперь с помощью этого кода вы можете задать вопрос, чтобы обработать условную часть этого вопроса (как я сказал вам в комментариях)…

Официальная ссылка: WooThemes — настройка полей проверки с помощью действия и фильтры

person LoicTheAztec    schedule 18.08.2016
comment
хорошо, я сделал это, как вы сказали мне, что мне делать дальше? чего я не понимаю, так это того, что у wocommerce уже есть номер телефона и электронная почта. Мне не нужно добавлять другие поля... это нормально? - person Panait Andrei Alexandru; 24.08.2016
comment
@BursucAndrei Мой код не создал электронную почту и телефон. Я только что переупорядочил существующий телефон и электронную почту. Теперь, используя код моего ответа, вы можете создать свой новый вопрос, сказав, что у вас есть этот код для создания/упорядочивания полей оформления заказа, который вы хотели бы иметь (вторая часть вашего вопроса). Когда закончите, разместите ссылку здесь, пожалуйста. - person LoicTheAztec; 24.08.2016