Почему важна синхронизация отзывов WooCommerce
Владельцы нескольких сайтов на WordPress с магазином WooCommerce часто сталкиваются с необходимостью поддерживать единый пул отзывов о товарах. Отзывы – важный элемент доверия пользователей и повышения конверсии. Если отзывы не синхронизированы, на каждом сайте отображается разная информация, что может запутать покупателей и снизить авторитет каждого из магазинов.
Автоматическая синхронизация отзывов позволяет не только экономить время администраторов, но и улучшить пользовательский опыт. В статье разберем, как реализовать такую синхронизацию с минимальными затратами и при помощи готовых решений.
Обзор плагинов для синхронизации отзывов WooCommerce
К сожалению, готовых плагинов для синхронизации отзывов WooCommerce между сайтами очень мало. Но можно использовать универсальные инструменты для синхронизации данных, а также API WooCommerce для создания собственного решения.
Рассмотрим несколько вариантов:
- WP Remote Users Sync – плагин для синхронизации пользователей, иногда его можно настроить для отзывов, но функционал ограничен.
- Custom API + WP-Cron
- Использование плагина WP All Import/Export
Как реализовать автоматическую синхронизацию отзывов WooCommerce через REST API
Основная идея – на одном из сайтов (источнике) создавать REST API эндпоинт, который возвращает новые отзывы, а на другом (приемнике) – регулярно запрашивать эти данные и добавлять их в базу.
Создание API-эндпоинта на сайте-источнике
Добавим в functions.php или в собственный плагин код для создания кастомного REST API маршрута:
add_action('rest_api_init', function () {
register_rest_route('wpsync/v1', '/reviews', array(
'methods' => 'GET',
'callback' => 'wpsync_get_new_reviews',
'permission_callback' => function () {
return current_user_can('read');
},
));
});
function wpsync_get_new_reviews(WP_REST_Request $request) {
$last_sync = $request->get_param('last_sync');
$args = array(
'post_type' => 'product',
'meta_query' => array(
array(
'key' => 'review_date',
'value' => $last_sync,
'compare' => '>',
'type' => 'DATETIME'
)
),
'posts_per_page' => -1
);
$reviews = get_comments(array(
'status' => 'approve',
'post_type' => 'product',
'date_query' => array(
'after' => $last_sync
)
));
$data = array();
foreach ($reviews as $review) {
$data[] = array(
'comment_ID' => $review->comment_ID,
'comment_post_ID' => $review->comment_post_ID,
'comment_author' => $review->comment_author,
'comment_content' => $review->comment_content,
'comment_date' => $review->comment_date,
'comment_approved' => $review->comment_approved,
'rating' => get_comment_meta($review->comment_ID, 'rating', true)
);
}
return rest_ensure_response($data);
}Этот код создает маршрут /wp-json/wpsync/v1/reviews, который возвращает отзывы, добавленные после даты, переданной в параметре last_sync.
Получение и сохранение отзывов на сайте-приемнике
На втором сайте нужно настроить скрипт, который будет регулярно получать отзывы и добавлять их в базу. Вот пример функции для получения и добавления отзывов:
function wpsync_fetch_and_insert_reviews() {
$last_sync = get_option('wpsync_last_reviews_sync', '1970-01-01 00:00:00');
$response = wp_remote_get('https://source-site.ru/wp-json/wpsync/v1/reviews?last_sync=' . urlencode($last_sync));
if (is_wp_error($response)) {
return;
}
$reviews = json_decode(wp_remote_retrieve_body($response), true);
if (empty($reviews)) {
return;
}
foreach ($reviews as $review) {
// Проверяем, нет ли уже такого отзыва
if (get_comment($review['comment_ID'])) {
continue;
}
$commentdata = array(
'comment_ID' => $review['comment_ID'],
'comment_post_ID' => $review['comment_post_ID'],
'comment_author' => $review['comment_author'],
'comment_content' => $review['comment_content'],
'comment_date' => $review['comment_date'],
'comment_approved' => $review['comment_approved'],
'comment_type' => '',
);
$comment_id = wp_insert_comment($commentdata);
if ($comment_id && isset($review['rating'])) {
add_comment_meta($comment_id, 'rating', intval($review['rating']), true);
}
}
update_option('wpsync_last_reviews_sync', current_time('mysql'));
}
// Запускаем синхронизацию раз в час
if (!wp_next_scheduled('wpsync_hourly_reviews_sync')) {
wp_schedule_event(time(), 'hourly', 'wpsync_hourly_reviews_sync');
}
add_action('wpsync_hourly_reviews_sync', 'wpsync_fetch_and_insert_reviews');Этот код получает новые отзывы и добавляет их на сайт-приемник, избегая дублирования. Синхронизация запускается автоматически каждый час через WP-Cron.
Обработка возможных ошибок и нюансы синхронизации
Реализация синхронизации отзывов имеет свои подводные камни:
- Совпадение ID комментариев. В примере мы используем оригинальные ID комментариев с сайта-источника. Если на сайте-приемнике уже есть комментарии с такими ID, возможны конфликты. Чтобы избежать этого, можно генерировать новые ID или хранить связь через мета-поля.
- Безопасность API. В примере простой permission_callback, но для защиты можно использовать ключи API, OAuth или JWT.
- Синхронизация удалений и обновлений. В приведенном примере только добавляются новые отзывы. Для полной синхронизации нужно обработать удаление и обновление отзывов.
Использование плагина Clearfy Pro для оптимизации процесса
Плагин Clearfy Pro поможет оптимизировать работу WordPress, очистить базу данных от мусора и повысить производительность во время синхронизации. Это особенно важно при работе с большим количеством отзывов.
Итог
Автоматическая синхронизация отзывов WooCommerce между сайтами WordPress – задача, которую можно решить с помощью кастомных REST API и WP-Cron. Такой подход дает гибкость и контроль над процессом, а при правильной реализации позволит поддерживать актуальность отзывов на всех сайтах одновременно.
Для упрощения работы и повышения стабильности рекомендуется использовать дополнительные инструменты оптимизации, например, Clearfy Pro.