Установите плагин Customer Reviews for WooCommerce
Чтобы добавить форму отзывов на страницу товара, вставьте шорткод
[ cusrev_all_reviews sort=»DESC»
sort_by=»date»
per_page=»10″
show_summary_bar=»true»
show_media=»true»
show_products=»false»
categories=»»
product_tags=»»
tags=»»
products=»current»
product_reviews=»true»
shop_reviews=»false»
inactive_products=»true»
show_replies=»true»
show_more=»8″
min_chars=»0″
avatars=»standard»
users=»all»
add_review=»true» ]
В плагине на странице шорткоды есть подробная инструкция.
Я добавила немного css, чтобы сделать симпатичнее. Вот так это будет выглядеть.


Чтобы добавить Вопросы о товаре, вставьте шорткод [ cusrev_qna ]
Если добавить немного css, вот так это будет выглядеть:


Есть тут небольшая хитрость! В настройках плагина, кто может оставлять отзывы и вопросы, обычно выбирают только авторизованные клиенты. Но вот в форме оставить отзыв есть поле Имя Фамилия и email, данные подтягиваются из аккаунта, но их можно поменять. Также клиент может не так понять и не удалить свою фамилию, а она отобразиться. Ну кому это понравится.
Поэтому css просто скройте поля с именем и почтой. А чтобы вместо фамилии отображалась только буква с точкой, например, Саша А., добавьте в дочернюю тему код. Можно конечно и на страницу товара js-код добавить, но лучше в дочернюю, так как у вас же много страниц товаров.
Создайте в дочерней теме файл ../public_html/wp-content/themes/hello-elementor-child/js/cr-name-format.js
Назовём файл cr-name-format.js и вставьте туда код:
(function(){
function formatName(full){
full = (full || '').trim();
if (!full) return '';
var p = full.split(/\s+/);
var first = p[0], last = p.length > 1 ? p[p.length - 1] : '';
return last ? (first + ' ' + last.charAt(0) + '.') : first; // Саша А.
}
function normalizeInput(inp){
if (!inp) return;
var v = formatName(inp.value);
if (v && inp.value !== v) inp.value = v;
var def = inp.getAttribute('data-defval');
if (def !== null) {
var vDef = formatName(def);
if (def !== vDef) inp.setAttribute('data-defval', vDef);
}
}
function apply(scope){
(scope || document).querySelectorAll(
'input[name="cr_review_form_name"], input[name="cr_qna_form_name"]'
).forEach(normalizeInput);
}
// Первичный запуск
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', function(){ apply(document); });
} else {
apply(document);
}
// Подстраховка (если плагин подставит позже)
setTimeout(function(){ apply(document); }, 300);
// Повторяем при кликах, которые обычно открывают/перерисовывают форму
document.addEventListener('click', function(e){
if (e.target.closest('.cr-qna-ask-button, .cr-review-form-submit, .cr-qna-list-block button, .cr-qna-list-block a')) {
setTimeout(function(){ apply(document); }, 0);
setTimeout(function(){ apply(document); }, 300);
}
});
})();Подключим этот код. В файле functions.php добавьте
<?php
// Подключаем стили родителя
add_action('wp_enqueue_scripts', function () {
wp_enqueue_style('parent-style', get_template_directory_uri() . '/style.css');
}, 5);
// Подключаем скрипт форматирования имени ТОЛЬКО на странице товара
add_action('wp_enqueue_scripts', function () {
if ( function_exists('is_product') && ! is_product() ) {
return; // грузим только на single product
}
$path = get_stylesheet_directory() . '/js/cr-name-format.js';
wp_enqueue_script(
'cr-name-format',
get_stylesheet_directory_uri() . '/js/cr-name-format.js',
array(),
file_exists($path) ? filemtime($path) : '1.0.0',
true // в футер
);
}, 20);Есть ещё небольшая хитрость. Можно убрать «Обозреватель» в отзывах, если клиент написал отзыв, но не было покупки. Добавьте просто сниппет-код:
//-----Убираем текст "Обозреватель" в отзывах-----
add_filter('gettext', function($translated, $text, $domain){
if ($domain === 'customer-reviews-woocommerce') {
if ($text === 'Reviewer' || $translated === 'Обозреватель') {
return '';
}
}
return $translated;
}, 10, 3);Как будет отображаться надпись «Реальный покупатель» можно задать в настройках плагина.
Также в данном плагине можно настроить уведомление оставить отзыв на почту, например, через 5 дней после покупки и т.д.