Почему важна синхронизация виджетов
Виджеты являются неотъемлемой частью оформления и функционала сайта на WordPress. Если у вас несколько сайтов, поддерживающих единый бренд или структуру, важно, чтобы боковые панели и другие области с виджетами выглядели и работали одинаково. Ручное дублирование настроек виджетов на каждом сайте занимает много времени и чревато ошибками.
Автоматическая синхронизация виджетов позволяет централизованно управлять содержимым и оформлением, экономит время и поддерживает консистентность. Особенно актуально это для агентств, мультисайтов на WordPress и проектов с несколькими поддоменами.
В этой статье разберём, как реализовать такую синхронизацию с помощью готовых плагинов и кастомных решений.
Стандартные способы экспорта и импорта виджетов
Экспорт через Tools > Export
WordPress по умолчанию позволяет экспортировать содержимое, включая виджеты, через Инструменты > Экспорт. Однако этот метод не гарантирует точную копию всех настроек виджетов и требует ручного импорта на другом сайте.
Плагины для миграции виджетов
Существуют плагины, которые упрощают эту задачу:
- Widget Importer & Exporter — позволяет экспортировать настройки виджетов в файл JSON и импортировать их на другом сайте.
- Widget Options — расширяет возможности управления виджетами и поддерживает экспорт/импорт.
Но эти решения всё равно предполагают ручное действие и не подходят для регулярной синхронизации.
Автоматическая синхронизация виджетов между сайтами с помощью REST API
Для автоматизации процесса можно использовать REST API WordPress, который позволяет получать и обновлять настройки виджетов программно.
Основы работы с REST API для виджетов
В WordPress данные виджетов хранятся в опциях базы данных: sidebars_widgets и отдельных опциях каждого виджета (например, widget_text для текстовых виджетов).
Через REST API можно получить эти опции и передать на другой сайт для установки. Для этого нужно создать свои REST маршруты или использовать существующие методы.
Пример создания REST API эндпоинта для получения виджетов на сайте-источнике
add_action('rest_api_init', function () {
register_rest_route('wpsync/v1', '/widgets', array(
'methods' => 'GET',
'callback' => 'wpsync_get_widgets',
'permission_callback' => function () {
return current_user_can('manage_options');
},
));
});
function wpsync_get_widgets() {
$sidebars_widgets = get_option('sidebars_widgets');
$widget_options = [];
foreach ($sidebars_widgets as $sidebar => $widgets) {
if (is_array($widgets)) {
foreach ($widgets as $widget_id) {
if (preg_match('/([a-zA-Z0-9_-]+)-(\d+)/', $widget_id, $matches)) {
$widget_base = $matches[1];
if (!isset($widget_options[$widget_base])) {
$widget_options[$widget_base] = get_option('widget_' . $widget_base);
}
}
}
}
}
return [
'sidebars_widgets' => $sidebars_widgets,
'widget_options' => $widget_options,
];
}Пример установки виджетов на сайте-получателе
На другом сайте нужно написать функцию, которая по расписанию или вручную будет запрашивать эти данные и обновлять локальные опции:
function wpsync_update_widgets_from_remote($remote_url) {
$response = wp_remote_get($remote_url);
if (is_wp_error($response)) {
return false;
}
$data = json_decode(wp_remote_retrieve_body($response), true);
if (empty($data['sidebars_widgets']) || empty($data['widget_options'])) {
return false;
}
update_option('sidebars_widgets', $data['sidebars_widgets']);
foreach ($data['widget_options'] as $widget_base => $options) {
update_option('widget_' . $widget_base, $options);
}
return true;
}Такой подход позволяет полностью синхронизировать виджеты программно, без участия администратора.
Настройка автоматической синхронизации по расписанию
Чтобы поддерживать синхронизацию актуальной, используйте WP-Cron для регулярного запуска функции обновления:
add_action('wpsync_cron_update_widgets', function() {
$remote_url = 'https://source-site.ru/wp-json/wpsync/v1/widgets';
wpsync_update_widgets_from_remote($remote_url);
});
if (!wp_next_scheduled('wpsync_cron_update_widgets')) {
wp_schedule_event(time(), 'hourly', 'wpsync_cron_update_widgets');
}Таким образом, виджеты будут обновляться каждый час. Интервал можно менять в зависимости от потребностей.
Плагины для упрощения синхронизации виджетов и сайтов
Если хочется готовые решения с расширенными возможностями, обратите внимание на:
- Clearfy Pro — плагин для оптимизации и управления WordPress, в том числе с опциями для синхронизации и управления виджетами.
- WPCommunity — для мультисайтов и синхронизации пользователей и контента, может помочь в комплексном управлении.
Важные нюансы и рекомендации
Перед внедрением синхронизации виджетов убедитесь, что:
- Структура тем и поддержка виджетов совпадает на обоих сайтах, иначе виджеты могут отображаться некорректно.
- Настройки каждого виджета совместимы и не зависят от уникальных данных (например, ID постов, которые могут отличаться).
- Резервное копирование настроек сделано, чтобы быстро откатить изменения при ошибках.
Также рекомендуется ограничить доступ к REST API эндпоинтам только авторизованным администраторам и использовать SSL для безопасности передачи данных.