Автоматический импорт отзывов – популярная задача для сайтов, где необходимо регулярно обновлять раздел отзывов клиентов без ручного ввода. В WordPress это можно реализовать несколькими способами: через подключение к внешнему API, импорт CSV-файлов или парсинг данных с других ресурсов. В этой статье рассмотрим, как сделать автоматический импорт отзывов с примерами плагинов и кодом, который можно адаптировать под свои задачи.
Почему важен автоматический импорт отзывов в WordPress
Отзывы – важная часть сайта, повышающая доверие пользователей и улучшая SEO. Вручную добавлять отзывы неудобно и долго, особенно при большом объеме или частой смене данных. Автоматизация позволяет:
- Экономить время на обновлении контента.
- Своевременно отображать свежие отзывы.
- Снижать человеческие ошибки при вводе.
- Интегрировать отзывы с внешними системами (например, CRM, маркетплейсы).
Далее рассмотрим популярные методы реализации.
Импорт отзывов с помощью плагинов
Плагин WP All Import для отзывов
Плагин WP All Import – универсальный инструмент для импорта данных из CSV или XML в любой тип записи, включая отзывы. Его преимущество – гибкость настройки, возможность расписать маппинг полей и автоматизировать импорт расписанием через CRON.
Пример базовой настройки:
- Создайте CSV с полями: Имя пользователя, Отзыв, Оценка, Дата.
- Настройте импорт в тип записи «Отзывы» (custom post type) или комментарии.
- Установите расписание для регулярного обновления.
Это решение подойдет, если отзывы собираются из внешних файлов.
Плагин WP Review Pro и интеграция с внешними источниками
Если вы используете WP Review Pro для вывода отзывов с рейтингами, можно подключить внешний API и записывать отзывы в его формат. Для этого понадобится создать скрипт, который через wp_remote_get() получает JSON, парсит отзывы и добавляет их в базу.
Пример кода для автоматического импорта отзывов из JSON API
Рассмотрим пример функции для импорта отзывов с внешнего API в кастомный тип записи 'wptask_review'.
function wptask_import_reviews_from_api() {
$response = wp_remote_get('https://example.com/api/reviews');
if (is_wp_error($response)) {
error_log('Ошибка запроса отзывов');
return;
}
$body = wp_remote_retrieve_body($response);
$data = json_decode($body, true);
if (empty($data) || !is_array($data)) {
error_log('Пустой или неверный формат данных');
return;
}
foreach ($data as $review) {
// Проверяем, есть ли уже отзыв с таким ID
$existing = get_posts(array(
'post_type' => 'wptask_review',
'meta_key' => 'external_review_id',
'meta_value' => $review['id'],
'posts_per_page' => 1
));
if ($existing) {
continue; // Отзыв уже импортирован
}
// Добавляем новый отзыв
$post_id = wp_insert_post(array(
'post_title' => sanitize_text_field($review['author']),
'post_content' => sanitize_textarea_field($review['content']),
'post_type' => 'wptask_review',
'post_status' => 'publish'
));
if ($post_id) {
update_post_meta($post_id, 'external_review_id', intval($review['id']));
update_post_meta($post_id, 'review_rating', floatval($review['rating']));
update_post_meta($post_id, 'review_date', sanitize_text_field($review['date']));
}
}
}
// Запускаем импорт раз в сутки
if (!wp_next_scheduled('wptask_daily_import_reviews')) {
wp_schedule_event(time(), 'daily', 'wptask_daily_import_reviews');
}
add_action('wptask_daily_import_reviews', 'wptask_import_reviews_from_api');Этот пример можно адаптировать под свой API и поля. Используйте кастомный тип записи для удобного управления отзывами в админке.
Импорт отзывов из CSV с использованием WP-CLI
Для опытных пользователей удобен импорт через WP-CLI. Например, скрипт на PHP для импорта отзывов из CSV:
function wptask_cli_import_reviews($csv_file) {
if (!file_exists($csv_file)) {
WP_CLI::error('Файл не найден');
}
$handle = fopen($csv_file, 'r');
if (!$handle) {
WP_CLI::error('Не удалось открыть файл');
}
$headers = fgetcsv($handle);
while (($row = fgetcsv($handle)) !== false) {
$data = array_combine($headers, $row);
$post_id = wp_insert_post(array(
'post_title' => sanitize_text_field($data['author']),
'post_content' => sanitize_textarea_field($data['content']),
'post_type' => 'wptask_review',
'post_status' => 'publish'
));
if ($post_id) {
update_post_meta($post_id, 'review_rating', floatval($data['rating']));
update_post_meta($post_id, 'review_date', sanitize_text_field($data['date']));
}
}
fclose($handle);
WP_CLI::success('Импорт завершен');
}
if (defined('WP_CLI') && WP_CLI) {
WP_CLI::add_command('wptask import_reviews', function($args) {
wptask_cli_import_reviews($args[0]);
});
}Запускайте команду из терминала: wp wptask import_reviews путь_к_файлу.csv
Рекомендации по безопасности и производительности
При импорте отзывов важно учитывать несколько факторов:
- Проверять и фильтровать все входящие данные, чтобы избежать XSS и SQL-инъекций.
- Обрабатывать большие объемы данных партиями, чтобы не перегружать сервер.
- Кэшировать результаты и использовать транзиенты для оптимизации.
- Использовать CRON-задания для планового запуска импорта.
- Логировать ошибки и результаты для отладки.
Пример использования транзиентов для кеширования ответа API:
function wptask_get_reviews_cache() {
$cache_key = 'wptask_reviews_cache';
$cached = get_transient($cache_key);
if ($cached !== false) {
return $cached;
}
$response = wp_remote_get('https://example.com/api/reviews');
if (is_wp_error($response)) {
return false;
}
$body = wp_remote_retrieve_body($response);
set_transient($cache_key, $body, HOUR_IN_SECONDS);
return $body;
}