В наши дни раздел «Отзывы» является почти обязательным для каждого веб-сайта электронной коммерции. Будучи социальными существами, мы склонны обращать внимание на мнение других людей о продуктах, которые мы собираемся купить. WooCommerce имеет встроенную функцию, которая позволяет вашим клиентам оставлять отзывы о продуктах, которые вы продаете, и даже давать им оценки. Однако форма WooCommerce по умолчанию довольно проста, поэтому многие владельцы магазинов WooCommerce ищут способы ее расширить.

Итак, здесь вы найдете следующие разделы:

  1. Введение
  2. Проблема
  3. Как добавить поле в начало формы отзыва
  4. Как добавить поле после текстового поля комментария
  5. Как сохранить пользовательские данные
  6. Как отобразить комментарий с пользовательскими данными
  7. Как сделать настраиваемые поля редактируемыми из панели администратора

Введение

По умолчанию форма отзыва WooCommerce имеет всего два поля: «Ваша оценка» и «Ваш отзыв». Неавторизованные пользователи также должны указать свое имя и адрес электронной почты. Если вы не устанавливали какие-либо плагины, изменяющие форму отзыва, или если ваша тема не делает этого из коробки, форма отзыва на вашем сайте должна выглядеть так:

woocommerce форма отзыва по умолчанию
В этой статье я покажу вам, как добавить в форму отзыва два дополнительных поля: «Плюсы» и «Минусы» (“Pros” and “Cons”). Держу пари, вы видели что-то подобное на других сайтах. Краткий обзор положительных и отрицательных сторон продукта позволяет быстро понять, стоит ли он своих денег. Вот пример того, как может выглядеть расширенный блок отзывов, который я взял с одной из  онлайн-площадок.

Отзыв с дополнением
Думаю, вы понимаете, чего мы сегодня постараемся добиться, так что давайте начнем писать код.

Проблема

Прежде всего, нужно понимать, что форма отзыва WooCommerce — это модифицированная форма комментариев WordPress. Под капотом WooCommerce используется функция  comment_form() 

При исследовании этого вопроса обнаружилось, что нет простого и простого способа добавить настраиваемые поля в форму комментариев WordPress. Не существует единого хука, который можно было бы легко использовать для добавления настраиваемых полей в форму. Вместо этого есть много действий и фильтров, которые вам придется использовать, если вы решите изменить форму комментариев WordPress.

Давайте рассмотрим, как добавить настраиваемое поле в начало формы комментария и после текстового поля комментария.

Как добавить поле в начало формы отзыва

Если вы хотите добавить настраиваемое поле в начале формы отзыва (до поля рейтинга и после уведомления об авторизации для анонимных пользователей), вам придется использовать два разных хука для одного и того же поля. Это связано с тем, что WordPress по-разному обрабатывает отображение формы в зависимости от того, авторизован пользователь или нет.

Для анонимных пользователей мы будем использовать хук comment_form_defaults . Используя этот хук, мы можем изменить аргументы формы комментариев по умолчанию. Нам нужен этот хук, чтобы показывать наши настраиваемые поля после уведомления «Ваш адрес электронной почты не будет опубликован». Точнее, мы просто добавим наши поля HTML к аргументу формы comment_notes_before .

Для авторизованных пользователей мы будем использовать хук comment_form_top . Этот хук « срабатывает в верхней части формы комментария, внутри тега формы», как сказано в документации.

Чтобы убедиться, что мы изменяем только форму обзора WooCommerce, мы собираемся использовать условный тег is_product() . И чтобы убедиться, что мы не будем дублировать поля, мы собираемся использовать функцию i s_user_logged_in() .

Вот код, который можно использовать:

Кроме того, я добавил немного CSS, чтобы новые поля выглядели лучше на страницах сайта:

Давайте проверим, как выглядят наши новые поля для авторизованного пользователя.

Поля перед формой отзыва

Как и ожидалось, новые поля отображаются прямо перед полем рейтинга.

Это работает и для анонимных пользователей? Да, так и есть - наши новые поля отображаются сразу после уведомления о том, что emai не будет опубликован.

Поля формы отзывов для анонимного пользователя

Как добавить поле после текстового поля комментария

Если вы хотите, чтобы ваши настраиваемые поля отображались после поля «Ваш отзыв», вам придется использовать другой хук. К счастью, на этот раз мы можем использовать только один хук, потому что текстовое поле комментария отображается одинаково как для авторизованных, так и для анонимных пользователей. Мы собираемся использовать хук comment_form_field_comment . Этот хук позволяет нам изменить HTML-код поля комментария.

Вот код, который вы можете использовать для достижения этой цели:

Давайте теперь посмотрим, что у нас есть в форме обзора:

woocommerce отзыв - поля после текстового поля комментария

Кстати, вы можете немного переписать функцию render_pros_cons_fields , чтобы отрисовывать поля ДО поля комментария. В этом случае вам нужно будет вернуть это:

Но я хочу отметить, что этот код не гарантирует, что ваши настраиваемые поля будут отображаться в начале формы, потому что один из используемых вами плагинов или используемая вами тема могут модифицировать форму комментария с помощью описанных мной хуков. выше или другие хуки, которые срабатывают раньше, чем comment_form_field_comment . В любом случае, не стесняйтесь экспериментировать с этим крючком, чтобы найти наиболее подходящий способ для вашего случая.

Как сохранить пользовательские данные

Хорошо, у нас есть настраиваемые поля. Проблема в том, что они не будут сохранены автоматически: вам нужно написать код для сохранения значений пользовательских полей. Для этого нужно использовать хук comment_post . Этот хук срабатывает сразу после добавления комментария в базу данных, но:

  1. У вас все еще есть доступ к переменным $_POST
  2. Вы можете получить доступ к идентификатору нового сообщения

Комментарии WordPress могут иметь свои метаданные точно так же, как сообщения и пользователи. Таким образом, мы собираемся хранить плюсы и минусы, представленные пользователем, в качестве мета-комментария. Давайте посмотрим, как мы можем это сделать:

Комментарии WordPress могут иметь свои метаданные точно так же, как сообщения и пользователи. Таким образом, мы собираемся хранить плюсы и минусы, представленные пользователем, в качестве мета-комментария. Давайте посмотрим, как мы можем это сделать:

Как отобразить комментарий с пользовательскими данными

Вы можете просто поверить мне, что приведенный выше код работает, но вы не можете проверить его, не открывая базу данных. Давайте добавим плюсы и минусы, которые пользователь отправил в тексте своего комментария. Для этого мы можем использовать фильтр-хук comment_text . Этот хук позволяет нам изменять текст комментария, поэтому мы можем добавлять плюсы и минусы непосредственно перед основным текстом комментария.

You can just believe me that the code above works, but you can’t check it without opening the database. Let’s add the pros and cons a user has submitted to their comment’s text. To do this, we can utilize the comment_text filter hook. This hook allows us to modify a comment’s text, so we can add the pros and cons just before the comment’s main text.

По умолчанию наши новые блоки будут выглядеть немного беспорядочно, поэтому давайте добавим нижнее поле, чтобы они выглядели немного лучше:

Теперь, если я оставлю отзыв о продукте, заполнив поля «за» и «против», я увижу их как часть своего отзыва:

Отображение woocommerce отзыва с доп. полями

Как сделать настраиваемые поля редактируемыми из панели администратора

Хорошие новости: мы почти закончили. Последнее, что нам нужно сделать, это сделать метаполя «за» и «против» изменяемыми с панели администратора. Это отличная функция, если вы хотите модерировать то, что ваши пользователи вводят в эти поля.

Если вы перейдете на страницу «Комментарии» и нажмете ссылку «Изменить» под новым комментарием, вы увидите что-то вроде этого:

Форма редактирования комментария по умолчанию

Вы можете редактировать любое поле по умолчанию, но вы можете редактировать настраиваемые поля, которые вы добавили ранее. Давайте добавим новое мета-поле, которое позволит нам редактировать поля из панели администратора.

Мы можем сделать это, используя хук add_meta_boxes_comment вместе с функцией add_meta_box .

Теперь, если я снова открою редактор комментариев, я увижу новый метабокс под метабоксом «Рейтинг»:

Произвольные поля в форме отзыва woocommerce

Значения настраиваемых полей теперь видны в редакторе комментариев, но если вы попытаетесь отредактировать их и сохранить изменения, вы не увидите их после перезагрузки страницы. Чтобы это исправить, воспользуемся хуком edit_comment для обработки обновлений полей:

Перевод статьи How to add custom fields to the WooCommerce review form?

 

Автор: Админ

4 комментария

  1. Сделал, как указано в Вашей статье. Все работает.

    Скажите, как сделать доп поля обязательными ?

    • У полей формы есть атрибут required, который и делает поле обязательным. Соответственно, вы добавляете этот атрибут в нужное поле, например:

  2. Приведенный вами пример не работает. Вылетает с ошибкой.
    Просто скопировал для теста. в
    он ломаеться с ошибкой. Можете перепроверить, и в конце статьи привести полностью рабочий код ?
    Нак же был благодарен если бы коказали как в поментарии дать возможность пользователю прикреплять файлы с картинками...

    • Это перевод статьи. К сожалению, времени перепроверить сейчас нет.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *