Диагностика задачи: зачем кастомизировать отзывы WooCommerce
Отзывы о товарах в WooCommerce — важный элемент доверия клиентов и SEO. Однако стандартный вывод отзывов не всегда подходит под дизайн или бизнес-логику магазина. Часто необходимо изменить форму отзыва, добавить новые поля, изменить порядок или внешний вид комментариев, либо изменить текстовые сообщения. Для этого WooCommerce и WordPress предоставляют гибкие хуки и фильтры.
Какие хуки WooCommerce отвечают за отзывы
Основные хуки для кастомизации отзывов находятся в шаблоне single-product/review.php, а также используются стандартные WordPress хуки комментариев. Вот ключевые из них:
woocommerce_product_review_list_args— фильтр аргументов вывода списка отзывов.comment_form_defaults— фильтр для настройки формы комментариев.comment_form_fields— позволяет изменить поля в форме отзыва.woocommerce_review_before_comment_metaиwoocommerce_review_after_comment_meta— добавление контента вокруг мета отзывов.woocommerce_review_before_comment_textиwoocommerce_review_after_comment_text— добавление контента вокруг текста отзыва.
Пошаговое решение: добавляем поле "Плюсы и минусы" в форму отзыва
Для примера добавим два новых поля — "Плюсы" и "Минусы" — в форму отзыва и сохраним их как мета-данные комментария.
Шаг 1. Добавляем поля в форму отзыва
add_filter('comment_form_fields', function($fields) {
$fields['pros'] = '<p class="comment-form-pros"><label for="pros">Плюсы</label><textarea id="pros" name="pros" cols="45" rows="2"></textarea></p>';
$fields['cons'] = '<p class="comment-form-cons"><label for="cons">Минусы</label><textarea id="cons" name="cons" cols="45" rows="2"></textarea></p>';
// Перемещаем новые поля в конец формы
$new_fields = [];
foreach (['author', 'email', 'pros', 'cons', 'comment'] as $key) {
if (isset($fields[$key])) {
$new_fields[$key] = $fields[$key];
}
}
return $new_fields;
});Шаг 2. Сохраняем данные при отправке отзыва
add_action('comment_post', function($comment_id) {
if (isset($_POST['pros'])) {
update_comment_meta($comment_id, 'pros', sanitize_textarea_field($_POST['pros']));
}
if (isset($_POST['cons'])) {
update_comment_meta($comment_id, 'cons', sanitize_textarea_field($_POST['cons']));
}
});Шаг 3. Выводим новые поля в списке отзывов
add_action('woocommerce_review_before_comment_text', function($comment) {
$pros = get_comment_meta($comment->comment_ID, 'pros', true);
$cons = get_comment_meta($comment->comment_ID, 'cons', true);
if ($pros) {
echo '<p class="review-pros"><strong>Плюсы:</strong> ' . esc_html($pros) . '</p>';
}
if ($cons) {
echo '<p class="review-cons"><strong>Минусы:</strong> ' . esc_html($cons) . '</p>';
}
});Проверка результата
- Откройте страницу товара с активными отзывами.
- Нажмите кнопку оставить отзыв — форма должна содержать новые поля "Плюсы" и "Минусы".
- Отправьте отзыв, заполнив новые поля.
- В блоке отзывов под товаром у нового отзыва должны появиться введённые плюсы и минусы.
Частые ошибки и их исправление
- Поле не сохраняется: Проверьте, что
comment_postхук зарегистрирован правильно и данные передаются с полями с совпадающими именами (name="pros" и name="cons"). - Новые поля не отображаются в форме: убедитесь, что фильтр
comment_form_fieldsне перезаписывается другими плагинами или темой. Попробуйте временно отключить сторонние расширения. - HTML-теги в отзывах отображаются некорректно: используйте
esc_html()при выводе, чтобы избежать XSS и сохранить безопасность.
Практические советы по безопасности и производительности
- Всегда очищайте пользовательский ввод через
sanitize_textarea_field()или аналогичные функции, чтобы избежать XSS и инъекций. - Для вывода используйте
esc_html()илиesc_attr()в зависимости от контекста. - Добавляйте новые поля только при необходимости, чтобы не перегружать форму и базу данных.
- Используйте кеширование отзывов, если на сайте много комментариев, чтобы снизить нагрузку на сервер.
Сравнение способов кастомизации отзывов WooCommerce
| Способ | Плюсы | Минусы | Когда использовать |
|---|---|---|---|
| Использование хуков и фильтров (код) | Гибкость, контроль, отсутствие зависимостей | Требует знаний PHP, возможны ошибки при неправильном коде | Для сложных или уникальных изменений |
| Плагины для отзывов | Простота настройки, готовые функции | Могут конфликтовать, дополнительные нагрузки | Для быстрых изменений без программирования |
| Редактирование шаблонов темы | Полный контроль над выводом | Требует поддержки при обновлениях | Когда нужна глубокая кастомизация дизайна |