В современных условиях часто возникает задача синхронизации или обмена данными между несколькими сайтами на WordPress. Например, это может быть необходимость передать новые записи, комментарии или пользовательские данные с одного сайта на другой без использования базы данных напрямую или дополнительного программного обеспечения. Лучшим решением для такой задачи является использование REST API WordPress.
Что такое REST API в WordPress и как он работает
REST API — это интерфейс взаимодействия, встроенный в ядро WordPress, позволяющий выполнять операции с данными сайта через HTTP-запросы. Он поддерживает стандартные методы GET, POST, PUT, DELETE и позволяет работать с постами, пользователями, таксономиями и другими объектами WordPress.
REST API работает по принципу клиент-сервер: один сайт выступает в роли клиента, который отправляет запросы, другой — в роли сервера, который эти запросы принимает и обрабатывает.
Для безопасного обмена данными нужно использовать аутентификацию — например, JWT, OAuth или базовую авторизацию.
Пример: создание REST API endpoint для приема данных на сайте-получателе
Для начала на сайте, который будет принимать данные, создадим собственный endpoint. Это позволит принимать POST-запросы с нужной информацией.
Добавим следующий код в файл functions.php темы или в свой плагин:
add_action('rest_api_init', function () {
register_rest_route('wphow/v1', '/receive-data', array(
'methods' => 'POST',
'callback' => 'wphow_receive_data_callback',
'permission_callback' => function () {
return current_user_can('edit_posts'); // простой пример проверки прав
}
));
});
function wphow_receive_data_callback(WP_REST_Request $request) {
$params = $request->get_json_params();
if (empty($params['title']) || empty($params['content'])) {
return new WP_REST_Response(['error' => 'Не переданы обязательные поля'], 400);
}
$post_id = wp_insert_post([
'post_title' => sanitize_text_field($params['title']),
'post_content' => sanitize_textarea_field($params['content']),
'post_status' => 'publish',
'post_type' => 'post'
]);
if (is_wp_error($post_id)) {
return new WP_REST_Response(['error' => 'Ошибка при создании поста'], 500);
}
return new WP_REST_Response(['success' => true, 'post_id' => $post_id], 201);
}Этот код регистрирует новый маршрут /wp-json/wphow/v1/receive-data, который принимает POST-запрос с JSON, содержащим поля title и content. В ответ сервер создаёт новый пост с полученными данными.
Отправка данных с другого сайта WordPress на endpoint
Теперь на сайте-источнике нам нужно отправить данные на созданный endpoint. Для этого можно использовать функцию wp_remote_post с правильными заголовками.
function wphow_send_post_to_remote_site($post_id) {
$post = get_post($post_id);
if (!$post || $post->post_status !== 'publish') {
return;
}
$url = 'https://example.com/wp-json/wphow/v1/receive-data'; // URL сайта-получателя
$response = wp_remote_post($url, [
'headers' => [
'Content-Type' => 'application/json',
'Authorization' => 'Basic ' . base64_encode('username:password') // базовая авторизация
],
'body' => json_encode([
'title' => $post->post_title,
'content' => $post->post_content
])
]);
if (is_wp_error($response)) {
error_log('Ошибка отправки данных: ' . $response->get_error_message());
}
}
add_action('publish_post', 'wphow_send_post_to_remote_site');В этом примере мы отправляем заголовок и содержание поста сразу после его публикации на другой сайт. Для аутентификации используется базовая авторизация, но для продакшена рекомендуется JWT или OAuth.
Безопасность и аутентификация при работе с REST API
Очень важно обезопасить свой endpoint, чтобы на него не могли отправлять данные посторонние. В примерах выше мы использовали current_user_can('edit_posts') и базовую авторизацию. Это простые методы, которые подходят для демонстрации.
Для реального проекта лучше использовать JWT Authentication для WordPress или OAuth 2.0, которые обеспечивают надежную защиту и удобство.
Плагин Clearfy Pro на сайте https://wpshop.ru/plugins/clearfy-pro/ помогает оптимизировать работу REST API и повысить безопасность сайта.
Практические советы по организации обмена данными между сайтами
- Используйте минимально необходимые права доступа для API-ключей.
- Обрабатывайте и проверяйте все входящие данные, чтобы избежать XSS и SQL-инъекций.
- Логируйте ошибки и неудачные попытки доступа для последующего анализа.
- Если передаются большие объемы данных, реализуйте пакетную отправку.
- Для удобства можно создать административный интерфейс на сайте-получателе для отображения и управления импортированными данными.
Заключение
Использование REST API для организации обмена данными между двумя сайтами WordPress — мощный и гибкий подход. Он позволяет настроить автоматическую синхронизацию, интеграцию с внешними сервисами и расширить функциональность сайтов без лишних нагрузок.
Если вы хотите углубиться в тему, рекомендуем изучить возможности плагина WPGPT для автоматизации запросов и Expert Review для организации отзывов, которые также могут взаимодействовать через REST API.