Если у вас несколько сайтов на WordPress с установленным WooCommerce и нужно, чтобы каталоги товаров, заказы и остатки были синхронизированы, то стандартных возможностей WooCommerce для этого нет. В этой статье подробно разберём, как реализовать синхронизацию WooCommerce между сайтами, чтобы данные были актуальны на всех ресурсах без лишних ручных операций.
Почему нужна синхронизация WooCommerce между сайтами
Многие владельцы интернет-магазинов используют несколько сайтов для разных регионов, направлений или видов товаров. В таких случаях важно:
- Обеспечить одинаковую базу товаров и их описание на всех сайтах.
- Синхронизировать остатки, чтобы не продавать то, чего нет в наличии.
- Обрабатывать заказы централизованно или хотя бы иметь доступ к ним на всех ресурсах.
Без синхронизации приходится вручную переносить данные, что приводит к ошибкам и потерям денег.
Обзор методов синхронизации WooCommerce
Существует несколько подходов:
- Плагины синхронизации WooCommerce. Есть готовые решения, которые позволяют настроить обмен данными между сайтами через API или общую базу.
- Собственные скрипты на PHP с использованием REST API WooCommerce. Можно написать код, который будет периодически подтягивать товары и заказы с главного сайта на второстепенные.
- Общая база данных или репликация. Сложный вариант, когда сайты работают на одной базе, но это редко удобно и безопасно.
Рассмотрим самые практичные способы.
Плагины для синхронизации WooCommerce между сайтами
1. WooCommerce Multistore
Плагин WooCommerce Multistore позволяет объединить несколько магазинов WooCommerce в единую сеть с общей базой товаров, остатков и заказов. Он поддерживает:
- Синхронизацию товаров и их характеристик.
- Общий учёт остатков.
- Централизованную обработку заказов.
Преимущество — удобный интерфейс и минимальный код. Недостаток — платное решение и возможные ограничения в настройках.
2. WP All Import и WP All Export с дополнениями
Эти плагины позволяют экспортировать товары и заказы из одного сайта и импортировать их на другой. Для синхронизации можно настроить автоматический экспорт и импорт через cron.
Это не самая быстрая синхронизация, но подходит при небольшом числе изменений и когда нет необходимости в реальном времени.
Собственный код для синхронизации WooCommerce через REST API
WooCommerce предоставляет REST API для работы с товарами и заказами. Можно написать скрипт, который будет периодически подтягивать актуальные данные с главного сайта и обновлять локальную базу.
Пример функции для получения товаров с удалённого сайта
function wpsync_get_remote_products($remote_url, $consumer_key, $consumer_secret) {
$endpoint = $remote_url . '/wp-json/wc/v3/products';
$args = [
'headers' => [
'Authorization' => 'Basic ' . base64_encode($consumer_key . ':' . $consumer_secret),
],
];
$response = wp_remote_get($endpoint, $args);
if (is_wp_error($response)) {
return [];
}
$body = wp_remote_retrieve_body($response);
return json_decode($body, true);
}Эта функция обращается к REST API удалённого сайта и получает список товаров.
Обновление товаров на локальном сайте после получения
Далее нужно пробегать по полученному массиву и создавать или обновлять товары через WooCommerce CRUD объекты:
function wpsync_update_local_products($products) {
foreach ($products as $product_data) {
$product_id = wc_get_product_id_by_sku($product_data['sku']);
if (!$product_id) {
$product = new WC_Product_Simple();
} else {
$product = wc_get_product($product_id);
}
$product->set_name($product_data['name']);
$product->set_regular_price($product_data['regular_price']);
$product->set_sku($product_data['sku']);
$product->set_description($product_data['description']);
$product->save();
}
}Так можно регулярно обновлять локальный каталог из главного источника.
Синхронизация остатков и заказов
Для остатков можно в функцию обновления товара добавить логику, которая обновляет количество с помощью set_stock_quantity(). Важно следить за тем, чтобы изменения количества корректно отражались на всех сайтах.
Заказы можно синхронизировать похожим способом, используя REST API для заказов: /wp-json/wc/v3/orders. Для этого нужно настроить приём заказов на главном сайте и при необходимости создание дублей на других.
Пример получения заказов с удалённого сайта
function wpsync_get_remote_orders($remote_url, $consumer_key, $consumer_secret) {
$endpoint = $remote_url . '/wp-json/wc/v3/orders';
$args = [
'headers' => [
'Authorization' => 'Basic ' . base64_encode($consumer_key . ':' . $consumer_secret),
],
];
$response = wp_remote_get($endpoint, $args);
if (is_wp_error($response)) {
return [];
}
$body = wp_remote_retrieve_body($response);
return json_decode($body, true);
}Практические советы при реализации синхронизации WooCommerce
- Безопасность: Используйте HTTPS и ключи API с минимальными правами.
- Периодичность обновления: Не делайте синхронизацию слишком часто, чтобы не перегружать сервер.
- Логирование ошибок: Ведите логи, чтобы оперативно выявлять проблемы.
- Тестирование на копии сайта: Перед запуском на живом магазине проверяйте на тестовой среде.
Синхронизация WooCommerce — задача не из простых, но при правильном подходе и использовании API или специализированных плагинов можно добиться стабильной работы нескольких магазинов с общей базой данных товаров и заказов.