В крупных проектах на WordPress часто возникает задача синхронизации не только контента и пользовательских данных, но и системных или пользовательских уведомлений и оповещений. Особенно это актуально для сетей сайтов, где администраторы хотят централизованно управлять уведомлениями или быстро информировать пользователей на всех ресурсах.
Что такое оповещения WordPress и зачем их синхронизировать
Под оповещениями (уведомлениями) в WordPress понимают различные сообщения, которые появляются на сайте: системные предупреждения, уведомления плагинов, кастомные сообщения для пользователей, а также email-рассылки или push-уведомления.
Синхронизация таких оповещений между сайтами позволяет:
- Обеспечить единую информационную политику без дублирования усилий.
- Мгновенно оповещать пользователей на всех сайтах о важных событиях.
- Централизованно управлять настройками уведомлений.
Впрочем, автоматическая синхронизация оповещений — задача нетривиальная, так как разные сайты могут использовать разные плагины и настройки.
Подходы к синхронизации уведомлений между WordPress-сайтами
1. Синхронизация через REST API
WordPress имеет мощный REST API, который можно использовать для передачи данных об оповещениях между сайтами. Для этого нужно реализовать на стороне отправителя и получателя специальные endpoints, которые будут принимать и отдавать данные об уведомлениях.
Преимущества: гибкость, можно настроить передачу любых данных, безопасность (использование OAuth или ключей).
Недостатки: требует разработки и поддержки кастомного кода, настройка авторизации.
2. Использование плагинов для межсайтовой синхронизации
Существуют плагины, которые позволяют синхронизировать данные между сайтами, например, Clearfy Pro может помочь оптимизировать и управлять уведомлениями, а WPRemark — добавить отзывчивость и уведомления для пользователей.
Однако, для полной синхронизации уведомлений потребуется кастомизация и возможная интеграция нескольких решений.
3. Использование базы данных и крон-задач
Если сайты находятся на одном сервере или имеют доступ к общей базе данных, можно настроить синхронизацию уведомлений на уровне БД и периодических задач WP-Cron.
Это более рискованный путь, требует аккуратности с безопасностью и структурой данных.
Пример реализации синхронизации уведомлений через REST API
Рассмотрим простой пример создания REST API endpoint для отправки уведомления с одного сайта и приёма его на другом.
Регистрация REST API endpoint для приёма уведомления
add_action('rest_api_init', function () {
register_rest_route('wpsync/v1', '/notify', [
'methods' => 'POST',
'callback' => 'wpsync_receive_notification',
'permission_callback' => function () {
return current_user_can('manage_options');
}
]);
});
function wpsync_receive_notification(WP_REST_Request $request) {
$data = $request->get_json_params();
if (empty($data['message'])) {
return new WP_Error('no_message', 'Message is required', ['status' => 400]);
}
// Сохраняем уведомление, например, в опции или кастомной таблице
update_option('wpsync_last_notification', sanitize_text_field($data['message']));
return ['status' => 'success', 'message' => 'Notification received'];
}
Отправка уведомления с другого сайта
function wpsync_send_notification($message) {
$url = 'https://target-site.ru/wp-json/wpsync/v1/notify';
$args = [
'body' => json_encode(['message' => $message]),
'headers' => [
'Content-Type' => 'application/json',
'Authorization' => 'Basic ' . base64_encode('user:password')
],
'method' => 'POST',
'data_format' => 'body',
];
$response = wp_remote_post($url, $args);
if (is_wp_error($response)) {
error_log('Notification send error: ' . $response->get_error_message());
return false;
}
return true;
}
В данном примере используется базовая авторизация, но в продакшене рекомендуем OAuth или JWT для безопасности.
Вывод уведомлений на сайте-получателе
Чтобы показывать последнее полученное уведомление на сайте, можно вывести его в нужном месте шаблона:
function wpsync_show_last_notification() {
$message = get_option('wpsync_last_notification');
if ($message) {
echo '<div class="wpsync-notification">' . esc_html($message) . '</div>';
}
}
add_action('wp_footer', 'wpsync_show_last_notification');
Рекомендации и лучшие практики
- Используйте безопасные методы аутентификации при обмене уведомлениями.
- Минимизируйте объем передаваемых данных и фильтруйте их.
- Добейтесь идемпотентности — повторная отправка одного и того же уведомления не должна создавать дубли.
- Логируйте ошибки и неудачные попытки синхронизации для отладки.
- Для сложных сценариев рассмотрите использование очередей (например, RabbitMQ) или внешних сервисов синхронизации.
Автоматическая синхронизация оповещений — мощный инструмент для многосайтовых проектов на WordPress. Используя REST API и правильные архитектурные решения, вы сможете централизованно управлять уведомлениями, улучшая коммуникацию с пользователями и упрощая администрирование.