Задача: требуется внести правку в поля формы на странице «Оформление заказа» в WooCommerce.
У меня есть 2 решения изменения полей формы на странице:
- Воспользоваться плагином (Checkout Field Editor for WooCommerce)
- Воспользоваться головой и внести изменения через хуки в файле function.php (разумеется в дочерней теме).
Если мне требуется задействовать динамические поля, то есть подключить условия к полям, пример: одно поле появляется, если заполнено другое, или поле появляется, если установлен чек бокс и т.д., то выбор очевиден, это будет всем известный модуль «Checkout Field Editor for WooCommerce«, при чем коммерческой его частью, т.к. обычная free версия не поддерживает логику, а значит она бесполезна в данном случае и будет только создавать дополнительную нагрузку на проект. У меня задача, произвести простое отключение лишних полей, значит для отключения полей, просто добавим несколько хуков в наш файл function.php
add_filter( 'woocommerce_checkout_fields' , 'custom_override_checkout_fields' ); function custom_override_checkout_fields( $fields ) { //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']); // Поле адрес 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_email']); // Поле email адрес //unset($fields['account']['account_username']); // Поле имя пользователя (логин) //unset($fields['account']['account_password']); // Поле пароль (регистрация) //unset($fields['account']['account_password-2']); // Поле повтор пароля (регистрация) unset($fields['billing']['billing_company']); // Поле компания unset($fields['billing']['billing_postcode']); // Поле индекс return $fields; }
Если вспомнить курс по PHP, то обозначения «//» — это комментирование строки, следовательно в данной функции строки которые имеют двойной слеш «//» — за комментированы, следовательно функция на них не распространяется.
Для примера:
unset($fields['billing']['billing_company']); // Поле компания unset($fields['billing']['billing_postcode']); // Поле индекс
Строки указанные выше — не закомментированы, следовательно из формы на странице «Оформление заказа» будут исключены поля: название компании, и индекс.
Собственно следуя данной логике, можно удалять или на оборот подключать нужные поля.
Обратите внимание на то, что некоторые поля являются обязательными для оформления заказа, такие как адрес, или страна, или город, по этому, даже если вы их удалите из формы, WooCommerce не даст вам оформить заказ. Для отключения обязательных полей, необходимо воспользоваться дополнительной функцией:
function custom_my_fields($fields) { $fields["billing"]["billing_last_name"]["required"] = false; // Фамилия не обязательна $fields["billing"]["billing_phone"]["required"] = true; // Телефон обязателен return $fields; } add_filter("woocommerce_checkout_fields", "custom_my_fields");
Как видите, здесь применяется булевское значение:
- Значение: (True — «Правда»)
- Значение: (False — «Ложь»)
- Параметр ( required — обязательно)
Наша задача выставить параметр в нужное положение, чтобы WooCommerce понимал, какие поля будут обязательными для заполнения, а какие нет. Следовательно, если в строке прописать false (ложь), то поле не будет обязательным, а если прописать значение True (правда), то данное поле будет обязательным, и простое его исключение без отключения обязательного параметра, просто удалит поле, при этом оформить заказ будет не возможно.
Ниже представлены возможные варианты отключения параметра «Обязательное поле» в форме, на странице «Оформление заказа» в WooCommerce
Оплата
$fields["billing"]["billing_first_name"]["required"] $fields["billing"]["billing_last_name"]["required"] $fields["billing"]["billing_company"]["required"] $fields["billing"]["billing_address_1"]["required"] $fields["billing"]["billing_address_2"]["required"] $fields["billing"]["billing_city"]["required"] $fields["billing"]["billing_postcode"]["required"] $fields["billing"]["billing_country"]["required"] $fields["billing"]["billing_state"]["required"] $fields["billing"]["billing_email"]["required"] $fields["billing"]["billing_phone"]["required"]
Доставка
$fields["shipping"]["shipping_first_name"]["required"] $fields["shipping"]["shipping_last_name"]["required"] $fields["shipping"]["shipping_company"]["required"] $fields["shipping"]["shipping_address_1"]["required"] $fields["shipping"]["shipping_address_2"]["required"] $fields["shipping"]["shipping_city"]["required"] $fields["shipping"]["shipping_postcode"]["required"] $fields["shipping"]["shipping_country"]["required"] $fields["shipping"]["shipping_state"]["required"]
Заказ
$fields["order"]["order_comments"]["required"]
Резюмируя все сказанное выше:
Хотите динамические поля, используйте плагины, хотите простую корректировку, используйте обычные функции — это просто, это быстро, это не нагружает проект дополнительными скриптами, хуками, стилями и прочим мусором, которого в WP великое множество в связи с его универсальностью.
Всем спасибо за внимание, не забываем поддерживать проект, тыкаем на рекламку, может что то понравится.
Успехов на нашем тернистом пути веб девелопмента!