В WooCommerce формы играют ключевую роль в процессе взаимодействия с пользователями. Существует несколько видов форм, которые могут использоваться для различных задач, таких как регистрация пользователей, оформление заказа, добавление отзывов, и даже для получения дополнительной информации о заказах. Эти формы можно настроить, кастомизировать и расширить с помощью кода или специальных решений. Рассмотрим, как можно работать с формами в WooCommerce. 1. Форма регистрации и входа WooCommerce предоставляет форму регистрации и входа для пользователей через страницу Мой аккаунт. Эта форма позволяет пользователям создавать учетные записи, управлять заказами и редактировать личные данные. Настройка формы регистрации Форма регистрации по умолчанию включает базовые поля, такие как Email и Пароль, но вы можете добавить дополнительные поля (например, имя, телефон) или убрать ненужные. Пример кода для добавления поля "Имя" и "Телефон": Откройте файл functions.php вашей темы. Добавьте следующий код для добавления полей в форму регистрации: // Добавляем поля Имя и Телефон в форму регистрации add_action( 'woocommerce_register_form_start', 'add_custom_registration_fields' ); function add_custom_registration_fields() { ?> <p class="form-row form-row-wide"> <label for="reg_billing_first_name"><?php _e( 'Имя', 'woocommerce' ); ?> <span class="required">*</span></label> <input type="text" class="input-text" name="billing_first_name" id="reg_billing_first_name" value="<?php if ( ! empty( $_POST['billing_first_name'] ) ) echo esc_attr( $_POST['billing_first_name'] ); ?>" /> </p> <p class="form-row form-row-wide"> <label for="reg_billing_phone"><?php _e( 'Телефон', 'woocommerce' ); ?> <span class="required">*</span></label> <input type="text" class="input-text" name="billing_phone" id="reg_billing_phone" value="<?php if ( ! empty( $_POST['billing_phone'] ) ) echo esc_attr( $_POST['billing_phone'] ); ?>" /> </p> <?php } // Сохраняем данные add_action( 'woocommerce_created_customer', 'save_custom_registration_fields' ); function save_custom_registration_fields( $customer_id ) { if ( isset( $_POST['billing_first_name'] ) ) { update_user_meta( $customer_id, 'billing_first_name', sanitize_text_field( $_POST['billing_first_name'] ) ); } if ( isset( $_POST['billing_phone'] ) ) { update_user_meta( $customer_id, 'billing_phone', sanitize_text_field( $_POST['billing_phone'] ) ); } } Этот код добавляет поля Имя и Телефон в форму регистрации и сохраняет их в пользовательский профиль. 2. Форма оформления заказа Форма оформления заказа — это ключевая форма WooCommerce, через которую пользователи вводят свои данные для оплаты и доставки. Вы можете кастомизировать эту форму, добавлять новые поля или убирать ненужные, а также изменять порядок элементов. Удаление ненужных полей Иногда вам может понадобиться убрать ненужные поля из формы оформления заказа, такие как поле "Компания" или "Адрес 2". Это можно сделать с помощью фильтров WooCommerce. Пример кода для удаления поля "Компания": // Удаляем поле Компания из формы оформления заказа add_filter( 'woocommerce_checkout_fields', 'remove_checkout_fields' ); function remove_checkout_fields( $fields ) { unset( $fields['billing']['billing_company'] ); // Убираем поле компании return $fields; } Этот код удаляет поле Компания из формы оформления заказа. Добавление кастомных полей в форму заказа Вы также можете добавлять свои поля в форму заказа для сбора дополнительной информации, например, комментарии к заказу или предпочтения по доставке. Пример кода для добавления поля "Комментарий": // Добавляем поле комментария в форму заказа add_action( 'woocommerce_after_order_notes', 'custom_checkout_field' ); function custom_checkout_field( $checkout ) { echo '<div id="custom_checkout_field"><h2>' . __( 'Дополнительная информация' ) . '</h2>'; woocommerce_form_field( 'custom_comment', array( 'type' => 'textarea', 'class' => array( 'form-row-wide' ), 'label' => __( 'Введите комментарии к вашему заказу' ), 'placeholder' => __( 'Например, особые инструкции для курьера' ), ), $checkout->get_value( 'custom_comment' ) ); } // Сохраняем данные поля add_action( 'woocommerce_checkout_update_order_meta', 'save_custom_checkout_field' ); function save_custom_checkout_field( $order_id ) { if ( ! empty( $_POST['custom_comment'] ) ) { update_post_meta( $order_id, 'custom_comment', sanitize_text_field( $_POST['custom_comment'] ) ); } } // Отображение комментария в админке add_action( 'woocommerce_admin_order_data_after_billing_address', 'display_custom_checkout_field_in_admin' ); function display_custom_checkout_field_in_admin( $order ) { $custom_comment = get_post_meta( $order->get_id(), 'custom_comment', true ); if ( $custom_comment ) { echo '<p><strong>' . __( 'Комментарий:' ) . '</strong> ' . esc_html( $custom_comment ) . '</p>'; } } Этот код добавляет поле Комментарий в форму оформления заказа и сохраняет введенные пользователем данные в заказ. 3. Форма обратной связи В WooCommerce может потребоваться форма обратной связи для клиентов, чтобы они могли связаться с вами. Это не встроенная функция WooCommerce, но такие формы можно легко добавить с помощью плагинов или кастомных решений. Добавление формы обратной связи вручную: Если вы не хотите использовать плагины для создания формы обратной связи, можно добавить простую HTML-форму и обрабатывать её через PHP. Пример простой формы обратной связи: <form method="post" action=""> <p> <label for="name">Имя:</label> <input type="text" name="name" id="name" required> </p> <p> <label for="email">Email:</label> <input type="email" name="email" id="email" required> </p> <p> <label for="message">Сообщение:</label> <textarea name="message" id="message" required></textarea> </p> <p> <button type="submit" name="send_contact_form">Отправить</button> </p> </form> PHP-код для обработки формы: if ( isset( $_POST['send_contact_form'] ) ) { $name = sanitize_text_field( $_POST['name'] ); $email = sanitize_email( $_POST['email'] ); $message = sanitize_textarea_field( $_POST['message'] ); wp_mail( 'your-email@example.com', 'Новое сообщение с сайта', $message, array( 'From: ' . $name . ' <' . $email . '>' ) ); echo '<p>Спасибо за ваше сообщение!</p>'; } 4. Отзывы и форма для оставления отзывов WooCommerce включает возможность оставления отзывов на товары. Форма для отзывов отображается на страницах товаров, и вы можете её настроить. Настройка отзывов По умолчанию WooCommerce включает возможность оставления отзывов для всех товаров. Чтобы включить или выключить отзывы: Перейдите в WooCommerce > Настройки > Продукты. В разделе Отзывы включите или отключите возможность оставления отзывов. Пример кода для изменения порядка полей в форме отзыва: // Изменяем порядок полей в форме для отзывов add_filter( 'woocommerce_product_review_comment_form_args', 'customize_review_form' ); function customize_review_form( $args ) { $args['comment_field'] = '<p class="comment-form-comment"><label for="comment">' . __( 'Ваш отзыв' ) . '</label><textarea id="comment" name="comment" cols="45" rows="8" required></textarea></p>'; return $args; } 5. Кастомные формы с помощью woocommerce_form_field WooCommerce предоставляет функцию woocommerce_form_field, которая позволяет добавлять пользовательские поля в различные формы, такие как форма заказа, регистрация и другие. Вы можете создавать текстовые поля, чекбоксы, выпадающие списки и другие элементы формы. Пример кода для добавления выпадающего списка в форму: woocommerce_form_field( 'custom_dropdown', array( 'type' => 'select', 'class' => array( 'form-row-wide' ), 'label' => __( 'Выберите вариант' ), 'options' => array( '' => __( 'Выберите', 'woocommerce' ), 'option1' => __( 'Вариант 1', 'woocommerce' ), 'option2' => __( 'Вариант 2', 'woocommerce' ), ), ), '' ); Этот код создаст выпадающий список с двумя вариантами. Заключение В WooCommerce есть множество возможностей для работы с формами. Вы можете кастомизировать существующие формы (регистрации, оформления заказа, отзывов) или создать свои собственные с помощью стандартных инструментов WooCommerce, используя хуки и функции, такие как woocommerce_form_field. Это позволяет настроить ваш интернет-магазин под любые бизнес-задачи и собирать необходимую информацию от пользователей.