Изменение страницы оформления заказа в 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;
}