Добавление оценок и отзывов к заказам WooCommerce с примерами кода

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

Почему стоит добавлять отзывы и оценки к заказам WooCommerce

Отзывы к товарам — классика, но они не всегда показывают реальный опыт взаимодействия с магазином, доставкой и сервисом. Отзывы к заказам дают владельцу магазина возможность получить детальную обратную связь по каждому этапу покупки. Это помогает улучшить работу службы доставки, обслуживание клиентов и выявить проблемные точки.

Кроме того, сбор отзывов по заказам помогает формировать более точные отчёты и аналитику, основанную на комплексном восприятии покупок.

Добавление отзывов к заказам можно использовать и для автоматизации: например, отправлять клиенту письмо с просьбой оценить заказ через определённое время после его завершения.

Как добавить пользовательское поле для оценки и отзыва к заказу в WooCommerce

Для начала нужно добавить дополнительные поля к объекту заказа, чтобы пользователь мог оставить оценку и отзыв. Для этого используем хуки WooCommerce и WordPress.

Добавление полей оценки и отзыва в страницу просмотра заказа для клиента

Используем хук woocommerce_order_details_after_order_table, чтобы вывести форму отзыва на странице просмотра заказа в личном кабинете.

add_action('woocommerce_order_details_after_order_table', 'wporders_add_review_fields_to_order', 10, 1);
function wporders_add_review_fields_to_order($order) {
    if (!$order->has_status('completed')) return; // Показываем форму только для завершённых заказов
    $order_id = $order->get_id();
    $rating = get_post_meta($order_id, '_wporders_order_rating', true);
    $review = get_post_meta($order_id, '_wporders_order_review', true);
    ?>
    <h2>Оставить отзыв о заказе</h2>
    <form method="post">
        <p>
            <label for="wporders_order_rating">Оценка (1-5):</label>
            <select name="wporders_order_rating" id="wporders_order_rating" required>
                <option value="">Выберите оценку</option>
                <?php for ($i = 1; $i <= 5; $i++): ?>
                    <option value="<?php echo $i; ?>" <?php selected($rating, $i); ?>><?php echo $i; ?></option>
                <?php endfor; ?>
            </select>
        </p>
        <p>
            <label for="wporders_order_review">Отзыв:</label><br />
            <textarea name="wporders_order_review" id="wporders_order_review" rows="5" cols="50" required><?php echo esc_textarea($review); ?></textarea>
        </p>
        <p>
            <input type="submit" name="wporders_submit_review" value="Отправить отзыв" />
        </p>
        <?php wp_nonce_field('wporders_save_order_review', 'wporders_order_review_nonce'); ?>
    </form>
    <?php
}

Обработка и сохранение отзыва после отправки формы

Подключаем обработчик на отправку формы, проверяем nonce и права пользователя, затем сохраняем данные в мета поля заказа.

add_action('template_redirect', 'wporders_save_order_review');
function wporders_save_order_review() {
    if (!isset($_POST['wporders_submit_review'])) return;
    if (!isset($_POST['wporders_order_review_nonce']) || !wp_verify_nonce($_POST['wporders_order_review_nonce'], 'wporders_save_order_review')) return;

    $current_user = wp_get_current_user();
    if (!$current_user->exists()) return;

    if (!isset($_GET['order'])) return;
    $order_id = intval($_GET['order']);
    $order = wc_get_order($order_id);
    if (!$order) return;

    // Проверяем, что заказ принадлежит текущему пользователю
    if ($order->get_user_id() !== $current_user->ID) return;

    $rating = intval($_POST['wporders_order_rating']);
    $review = sanitize_textarea_field($_POST['wporders_order_review']);

    if ($rating < 1 || $rating > 5) return; // Валидация рейтинга

    update_post_meta($order_id, '_wporders_order_rating', $rating);
    update_post_meta($order_id, '_wporders_order_review', $review);

    // Перенаправляем для предотвращения повторной отправки формы
    wp_redirect(add_query_arg('review_submitted', 'true', wc_get_account_endpoint_url('view-order') . $order_id));
    exit;
}

Отображение отзывов и оценок в админке WooCommerce

Чтобы видеть отзывы и оценки прямо в списке заказов или на странице редактирования заказа, добавим кастомные колонки и мета-блоки.

Добавление колонки с рейтингом в таблицу заказов

add_filter('manage_edit-shop_order_columns', 'wporders_add_rating_column');
function wporders_add_rating_column($columns) {
    $new_columns = array();
    foreach ($columns as $key => $column) {
        $new_columns[$key] = $column;
        if ('order_total' === $key) {
            $new_columns['order_rating'] = 'Оценка заказа';
        }
    }
    return $new_columns;
}

add_action('manage_shop_order_posts_custom_column', 'wporders_fill_rating_column');
function wporders_fill_rating_column($column) {
    global $post;
    if ('order_rating' === $column) {
        $rating = get_post_meta($post->ID, '_wporders_order_rating', true);
        if ($rating) {
            echo str_repeat('⭐', intval($rating));
        } else {
            echo '—';
        }
    }
}

Отображение отзыва в мета-боксе на странице редактирования заказа

add_action('add_meta_boxes', 'wporders_add_review_metabox');
function wporders_add_review_metabox() {
    add_meta_box('wporders_order_review', 'Отзыв и оценка заказа', 'wporders_display_review_metabox', 'shop_order', 'side', 'default');
}

function wporders_display_review_metabox($post) {
    $rating = get_post_meta($post->ID, '_wporders_order_rating', true);
    $review = get_post_meta($post->ID, '_wporders_order_review', true);

    echo '<p><strong>Оценка:</strong> ' . ($rating ? str_repeat('⭐', intval($rating)) : 'Нет') . '</p>';
    echo '<p><strong>Отзыв:</strong><br />' . nl2br(esc_html($review)) . '</p>';
}

Автоматизация запроса отзывов с помощью email уведомлений

Для автоматического напоминания клиенту об оставлении отзыва по заказу можно использовать стандартные хуки WooCommerce или специализированные плагины.

Например, через хук woocommerce_order_status_completed отправить email с ссылкой на страницу заказа и формой отзыва.

add_action('woocommerce_order_status_completed', 'wporders_send_review_request_email');
function wporders_send_review_request_email($order_id) {
    $order = wc_get_order($order_id);
    if (!$order) return;

    $to = $order->get_billing_email();
    $subject = 'Пожалуйста, оцените ваш заказ #' . $order_id;
    $review_link = wc_get_account_endpoint_url('view-order') . $order_id;
    $message = "Спасибо за ваш заказ! Пожалуйста, оставьте отзыв и оценку по ссылке: " . $review_link;

    wp_mail($to, $subject, $message);
}

Для более профессионального подхода можно использовать плагин Expert Review. Он позволяет создавать удобные формы отзывов, интегрировать их с заказами и настраивать автоматические напоминания.

Вывод отзывов и рейтингов в публичной части сайта

Для отображения отзывов на странице магазина или странице отдельного заказа можно создать шорткод, который будет выводить отзывы с рейтингами.

function wporders_show_order_reviews_shortcode($atts) {
    $atts = shortcode_atts(array('order_id' => 0), $atts);
    $order_id = intval($atts['order_id']);
    if (!$order_id) return 'Заказ не указан.';

    $rating = get_post_meta($order_id, '_wporders_order_rating', true);
    $review = get_post_meta($order_id, '_wporders_order_review', true);

    if (!$rating && !$review) return 'Отзывов по этому заказу нет.';

    ob_start();
    echo '<div class="wporders-order-review">';
    if ($rating) {
        echo '<p>Оценка: ' . str_repeat('⭐', intval($rating)) . '</p>';
    }
    if ($review) {
        echo '<p>Отзыв:<br>' . nl2br(esc_html($review)) . '</p>';
    }
    echo '</div>';
    return ob_get_clean();
}
add_shortcode('wporders_order_review', 'wporders_show_order_reviews_shortcode');

Используйте шорткод [wporders_order_review order_id="123"] для вывода отзыва по конкретному заказу.

Резюме и рекомендации

Добавление отзывов и оценок к заказам WooCommerce — мощный инструмент для повышения качества сервиса и сбора обратной связи. Реализация с помощью пользовательских мета-полей и хуков позволяет гибко настраивать функционал под конкретные задачи.

Для расширения возможностей стоит обратить внимание на плагин Expert Review, который существенно упрощает создание комплексных систем отзывов и оценок.

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

Как создать автоматический отчет по заказам в WordPress без WooCommerce
10.04.2026
Как сделать автоматическое сохранение заказов в WordPress без WooCommerce
23.01.2026
WooCommerce: автоматическое изменение статусов заказов при проблемах с платежами
10.05.2026
Автоматическая синхронизация заказов между WordPress и внешними системами
30.03.2026
Добавление оценок и отзывов к заказам WooCommerce с примерами кода
01.03.2026