Изменение страницы оформления заказа в Woocommerce
Создание страницы оформления заказа
Для создания страницы оформления заказа Woocommerce нужно создать обычную страницу и вставить на ней такой шорткод:
[woocommerce_checkout]
По умолчанию страница оформления заказа выглядит таком образом:

Просмотр текущих полей для оформления заказа
Для вывода текущих полей при оформлении заказа можно использовать следующий код, который нужно разместить в файле functions.php своей темы:
add_action( 'wp_footer', 'custom_print_checkout_fields' );
function custom_print_checkout_fields() {
if ( is_checkout() ) {
echo '<pre>';
print_r( WC()->checkout->get_checkout_fields() );
echo '</pre>';
}
}
Этот фрагмент кода выведет на странице оформления заказа массив, состоящий из используемых полей:
Array
(
[billing] => Array
(
[billing_first_name] => Array
(
[label] => Имя
[required] => 1
[class] => Array
(
[0] => form-row-first
)
[autocomplete] => given-name
[priority] => 10
)
[billing_last_name] => Array
(
[label] => Фамилия
[required] => 1
[class] => Array
(
[0] => form-row-last
)
[autocomplete] => family-name
[priority] => 20
)
[billing_company] => Array
(
[label] => Название компании
[class] => Array
(
[0] => form-row-wide
)
[autocomplete] => organization
[priority] => 30
[required] =>
)
[billing_country] => Array
(
[type] => country
[label] => Страна/регион
[required] => 1
[class] => Array
(
[0] => form-row-wide
[1] => address-field
[2] => update_totals_on_change
)
[autocomplete] => country
[priority] => 40
)
[billing_address_1] => Array
(
[label] => Адрес
[placeholder] => Номер дома и название улицы
[required] => 1
[class] => Array
(
[0] => form-row-wide
[1] => address-field
)
[autocomplete] => address-line1
[priority] => 50
)
[billing_address_2] => Array
(
[label] => Крыло, подъезд, этаж и т.д.
[label_class] => Array
(
[0] => screen-reader-text
)
[placeholder] => Крыло, подъезд, этаж и т.д. (необязательно)
[class] => Array
(
[0] => form-row-wide
[1] => address-field
)
[autocomplete] => address-line2
[priority] => 60
[required] =>
)
[billing_city] => Array
(
[label] => Населённый пункт
[required] => 1
[class] => Array
(
[0] => form-row-wide
[1] => address-field
)
[autocomplete] => address-level2
[priority] => 70
)
[billing_state] => Array
(
[type] => state
[label] => Область / район
[required] => 1
[class] => Array
(
[0] => form-row-wide
[1] => address-field
)
[validate] => Array
(
[0] => state
)
[autocomplete] => address-level1
[priority] => 80
[country_field] => billing_country
[country] => RU
)
[billing_postcode] => Array
(
[label] => Почтовый индекс
[required] => 1
[class] => Array
(
[0] => form-row-wide
[1] => address-field
)
[validate] => Array
(
[0] => postcode
)
[autocomplete] => postal-code
[priority] => 90
)
[billing_phone] => Array
(
[label] => Телефон
[required] => 1
[type] => tel
[class] => Array
(
[0] => form-row-wide
)
[validate] => Array
(
[0] => phone
)
[autocomplete] => tel
[priority] => 100
)
[billing_email] => Array
(
[label] => Email
[required] => 1
[type] => email
[class] => Array
(
[0] => form-row-wide
)
[validate] => Array
(
[0] => email
)
[autocomplete] => email
[priority] => 110
)
)
[shipping] => Array
(
[shipping_first_name] => Array
(
[label] => Имя
[required] => 1
[class] => Array
(
[0] => form-row-first
)
[autocomplete] => given-name
[priority] => 10
)
[shipping_last_name] => Array
(
[label] => Фамилия
[required] => 1
[class] => Array
(
[0] => form-row-last
)
[autocomplete] => family-name
[priority] => 20
)
[shipping_company] => Array
(
[label] => Название компании
[class] => Array
(
[0] => form-row-wide
)
[autocomplete] => organization
[priority] => 30
[required] =>
)
[shipping_country] => Array
(
[type] => country
[label] => Страна/регион
[required] => 1
[class] => Array
(
[0] => form-row-wide
[1] => address-field
[2] => update_totals_on_change
)
[autocomplete] => country
[priority] => 40
)
[shipping_address_1] => Array
(
[label] => Адрес
[placeholder] => Номер дома и название улицы
[required] => 1
[class] => Array
(
[0] => form-row-wide
[1] => address-field
)
[autocomplete] => address-line1
[priority] => 50
)
[shipping_address_2] => Array
(
[label] => Крыло, подъезд, этаж и т.д.
[label_class] => Array
(
[0] => screen-reader-text
)
[placeholder] => Крыло, подъезд, этаж и т.д. (необязательно)
[class] => Array
(
[0] => form-row-wide
[1] => address-field
)
[autocomplete] => address-line2
[priority] => 60
[required] =>
)
[shipping_city] => Array
(
[label] => Населённый пункт
[required] => 1
[class] => Array
(
[0] => form-row-wide
[1] => address-field
)
[autocomplete] => address-level2
[priority] => 70
)
[shipping_state] => Array
(
[type] => state
[label] => Область / район
[required] => 1
[class] => Array
(
[0] => form-row-wide
[1] => address-field
)
[validate] => Array
(
[0] => state
)
[autocomplete] => address-level1
[priority] => 80
[country_field] => shipping_country
[country] => RU
)
[shipping_postcode] => Array
(
[label] => Почтовый индекс
[required] => 1
[class] => Array
(
[0] => form-row-wide
[1] => address-field
)
[validate] => Array
(
[0] => postcode
)
[autocomplete] => postal-code
[priority] => 90
)
)
[account] => Array
(
[account_username] => Array
(
[type] => text
[label] => Имя пользователя аккаунта
[required] => 1
[placeholder] => Имя пользователя
[autocomplete] => username
)
[account_password] => Array
(
[type] => password
[label] => Создать пароль учетной записи
[required] => 1
[placeholder] => Пароль
[autocomplete] => new-password
)
)
[order] => Array
(
[order_comments] => Array
(
[type] => textarea
[class] => Array
(
[0] => notes
)
[label] => Примечание к заказу
[placeholder] => Примечания к вашему заказу, например, особые пожелания отделу доставки.
)
)
)
Теперь, зная состав полей, можно их изменять.
Пример отключения некоторых полей оформления заказа
Например, для отключения некоторых полей можно добавить в файл functions.php следующий код:
add_filter( 'woocommerce_checkout_fields', 'custom_remove_woocommerce_checkout_fields' );
function custom_remove_woocommerce_checkout_fields( $fields ) {
// Удаление поля компании
unset($fields['billing']['billing_company']);
// Удаление поля второго адреса
unset($fields['billing']['billing_address_2']);
// Удаление поля заметки к заказу
unset($fields['order']['order_comments']);
return $fields;
}
Пример для оставление полей Фамилия, Имя, Телефон, Электронная поста
Обычно для оформления заказа достаточно полей Фамилия, Имя, Телефон, Электронная почта. Для того чтобы оставить только эти поля при оформлении заказа, а остальные скрыть, можно воспользоваться следующим кодом, который нужно разместить в файле functions.php своей темы:
add_filter( 'woocommerce_checkout_fields' , 'customize_checkout_fields' );
function customize_checkout_fields( $fields ) {
// Удаление всех полей, кроме Фамилия, Имя, Телефон и Электронная почта
$fields['billing'] = array(
'billing_first_name' => $fields['billing']['billing_first_name'],
'billing_last_name' => $fields['billing']['billing_last_name'],
'billing_phone' => $fields['billing']['billing_phone'],
'billing_email' => $fields['billing']['billing_email'],
);
// Если не нужно отображать поля для доставки
unset($fields['shipping']);
// Если не нужно отображать поля аккаунта
unset($fields['account']);
// Если не нужно отображать примечания к заказу
unset($fields['order']);
return $fields;
}

