Как создать автоматический импорт отзывов в WordPress с подтверждением

Для многих сайтов на WordPress важна возможность автоматически импортировать отзывы клиентов из различных источников, например, из CSV, XML или внешних API, с последующим подтверждением и модерацией. Это помогает поддерживать актуальность отзывов и снижает ручную работу по их добавлению.

Почему важен импорт отзывов с подтверждением

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

Это особенно актуально для интернет-магазинов, сервисов и бизнесов, где отзывы влияют на доверие и конверсию.

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

Существует несколько способов автоматизировать импорт:

  • Использование готовых плагинов с поддержкой импорта и модерации;
  • Создание кастомного решения с помощью WP Cron и обработки данных;
  • Интеграция с внешними API через REST;
  • Использование плагинов для импорта CSV/XML с добавлением логики подтверждения.

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

Создание кастомного типа записи для отзывов с полем статуса подтверждения

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

function wpdesk_register_review_cpt() {
    $labels = array(
        'name'               => 'Отзывы',
        'singular_name'      => 'Отзыв',
        'add_new'            => 'Добавить отзыв',
        'add_new_item'       => 'Добавить новый отзыв',
        'edit_item'          => 'Редактировать отзыв',
        'new_item'           => 'Новый отзыв',
        'view_item'          => 'Просмотреть отзыв',
        'search_items'       => 'Поиск отзывов',
        'not_found'          => 'Отзывы не найдены',
        'not_found_in_trash' => 'Нет отзывов в корзине',
        'menu_name'          => 'Отзывы'
    );

    $args = array(
        'labels'             => $labels,
        'public'             => false,
        'show_ui'            => true,
        'capability_type'    => 'post',
        'supports'           => array('title', 'editor', 'author'),
        'menu_position'      => 20,
        'menu_icon'          => 'dashicons-format-chat',
        'exclude_from_search'=> true
    );

    register_post_type('wpdesk_review', $args);
}
add_action('init', 'wpdesk_register_review_cpt');

Далее добавим метабокс для статуса подтверждения и сохраним его:

function wpdesk_add_review_metabox() {
    add_meta_box('wpdesk_review_confirmed', 'Подтвержден', 'wpdesk_review_confirmed_cb', 'wpdesk_review', 'side');
}

function wpdesk_review_confirmed_cb($post) {
    $value = get_post_meta($post->ID, 'wpdesk_confirmed', true);
    wp_nonce_field('wpdesk_save_review_confirmed', 'wpdesk_review_confirmed_nonce');
    echo '<label><input type="checkbox" name="wpdesk_confirmed" value="1" ' . checked(1, $value, false) . ' /> Подтвержден</label>';
}

function wpdesk_save_review_confirmed($post_id) {
    if (!isset($_POST['wpdesk_review_confirmed_nonce']) || !wp_verify_nonce($_POST['wpdesk_review_confirmed_nonce'], 'wpdesk_save_review_confirmed')) {
        return;
    }
    if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
        return;
    }
    if (isset($_POST['wpdesk_confirmed'])) {
        update_post_meta($post_id, 'wpdesk_confirmed', 1);
    } else {
        update_post_meta($post_id, 'wpdesk_confirmed', 0);
    }
}

add_action('add_meta_boxes', 'wpdesk_add_review_metabox');
add_action('save_post', 'wpdesk_save_review_confirmed');

Реализация импорта отзывов из CSV с добавлением статуса "не подтвержден"

Чтобы не перегружать статью, рассмотрим упрощённый пример импорта из CSV-файла, который можно запускать вручную или по Cron.

function wpdesk_import_reviews_from_csv($file_path) {
    if (!file_exists($file_path)) {
        return 'Файл не найден';
    }

    if (($handle = fopen($file_path, 'r')) !== false) {
        $row = 0;
        while (($data = fgetcsv($handle, 1000, ',')) !== false) {
            if ($row === 0) { // Пропускаем заголовок
                $row++;
                continue;
            }

            $title = sanitize_text_field($data[0]);
            $content = sanitize_textarea_field($data[1]);
            $author = sanitize_text_field($data[2]);

            // Создаём отзыв с статусом 'черновик'
            $post_id = wp_insert_post(array(
                'post_title'   => $title,
                'post_content' => $content,
                'post_status'  => 'draft',
                'post_type'    => 'wpdesk_review',
                'post_author'  => 1,
            ));

            if (!is_wp_error($post_id)) {
                update_post_meta($post_id, 'wpdesk_confirmed', 0); // Не подтверждён
                // Можно добавить логику уведомления админа
            }
            $row++;
        }
        fclose($handle);
        return 'Импорт завершён';
    }
    return 'Ошибка при открытии файла';
}

Запускайте функцию с указанием пути к CSV. В реальном проекте лучше подключить WP Cron для регулярного запуска и обрабатывать ошибки.

Вывод на сайт только подтверждённых отзывов с пагинацией

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

function wpdesk_get_confirmed_reviews($paged = 1, $posts_per_page = 5) {
    $args = array(
        'post_type'      => 'wpdesk_review',
        'post_status'    => 'publish',
        'meta_key'       => 'wpdesk_confirmed',
        'meta_value'     => 1,
        'paged'          => $paged,
        'posts_per_page' => $posts_per_page
    );
    $query = new WP_Query($args);
    return $query;
}

Пример вывода в шаблоне:

$paged = get_query_var('paged') ? get_query_var('paged') : 1;
$reviews_query = wpdesk_get_confirmed_reviews($paged);

if ($reviews_query->have_posts()) :
    echo '<ul class="wpdesk-reviews">';
    while ($reviews_query->have_posts()) : $reviews_query->the_post();
        echo '<li><h3>' . get_the_title() . '</h3>' . get_the_content() . '</li>';
    endwhile;
    echo '</ul>';

    // Пагинация
    echo paginate_links(array(
        'total' => $reviews_query->max_num_pages,
        'current' => $paged,
    ));
    wp_reset_postdata();
else :
    echo '<p>Отзывы не найдены.</p>';
endif;

Полезные плагины для автоматизации и улучшения процесса

Если не хочется писать весь код, можно использовать плагины с поддержкой импорта и модерации:

  • WPRemark — плагин для отзывов с функциями модерации и импорта;
  • WP All Import — мощный инструмент для импорта CSV/XML с поддержкой кастомных полей;
  • Clearfy Pro — для оптимизации и безопасности, помогает блокировать спам;
  • My Popup — для уведомлений администратора о новых отзывах на модерацию.

Советы по безопасности и производительности

При автоматическом импорте обязательно фильтруйте и валидируйте данные, чтобы не допустить XSS и SQL-инъекций.

Используйте WP Nonces при работе с формами и AJAX. Для больших объёмов данных запускайте импорт через WP Cron, чтобы не блокировать сайт.

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

Как создать собственный виджет в WordPress
13.11.2025
Как создать автоматическое сохранение форм в WordPress с помощью AJAX
05.01.2026
WooCommerce: автоматическое изменение цен и скидок при импорте продуктов
10.05.2026
Как изменить URL структуру произвольно в WordPress: практическое руководство
03.04.2026
Автоподстановка данных в формах WordPress: практическое руководство с примерами
11.04.2026

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