wphow.ru wordpress WPHow

Как создать беспроводную связь между двумя сайтами WordPress через REST API

В современных условиях часто возникает задача синхронизации или обмена данными между несколькими сайтами на 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.

×
Оптимизируй свой сайт!

Скидка -15% на премиум плагин Clearfy Pro

Купить плагин сейчас ⋙