В современных проектах на WordPress часто возникает необходимость автоматизировать публикацию контента на удалённых сайтах — будь то собственные проекты, клиенты или партнёрские ресурсы. В этой статье разберём, как организовать удалённую публикацию постов через REST API WordPress с помощью плагина WPGPT и собственного кода.
Что такое удалённая публикация в WordPress и зачем она нужна
Удалённая публикация — это процесс создания и размещения записей на другом сайте WordPress через программный интерфейс без прямого входа в админку. Такой подход позволяет:
- Автоматизировать публикации из внешних систем или сервисов.
- Поддерживать несколько сайтов с синхронизацией контента.
- Ускорить рабочие процессы редакторов и маркетологов.
Классический способ — использовать REST API WordPress, который позволяет создавать, обновлять и удалять записи по HTTP-запросам с авторизацией.
Обзор плагина WPGPT для интеграции с REST API WordPress
Плагин WPGPT изначально создан для интеграции WordPress с GPT-моделями, но его архитектура отлично подходит для расширения функционала публикации, включая автоматическую генерацию и отправку контента на удалённые сайты через REST API.
Преимущества использования WPGPT:
- Удобная настройка API-запросов.
- Гибкая фильтрация и подготовка контента перед отправкой.
- Возможность расширения функционала с помощью хуков и фильтров.
Как настроить удалённую публикацию через REST API WordPress
Шаг 1. Получение доступа к REST API удалённого сайта
Для работы с REST API необходимо авторизоваться. Рекомендуется использовать JWT-аутентификацию или Application Passwords, встроенные в WordPress 5.6+.
Пример настройки Application Password:
- В админке удалённого сайта перейдите в профиль пользователя.
- Найдите раздел «Пароли приложений» и создайте новый пароль.
- Сохраните сгенерированный пароль — он понадобится для запросов.
Шаг 2. Пример отправки POST-запроса для создания записи
Для отправки данных используем PHP с cURL или библиотеку Guzzle. Ниже пример функции wpbloger_send_post_to_remote для отправки статьи:
function wpbloger_send_post_to_remote($title, $content, $remote_url, $username, $app_password) {
$url = rtrim($remote_url, '/') . '/wp-json/wp/v2/posts';
$data = [
'title' => $title,
'content' => $content,
'status' => 'publish'
];
$args = [
'body' => json_encode($data),
'headers' => [
'Authorization' => 'Basic ' . base64_encode($username . ':' . $app_password),
'Content-Type' => 'application/json'
],
'method' => 'POST',
'data_format' => 'body',
];
$response = wp_remote_post($url, $args);
if (is_wp_error($response)) {
return $response->get_error_message();
}
return json_decode(wp_remote_retrieve_body($response), true);
}Эту функцию можно использовать для отправки любых постов с вашего сайта на удалённый.
Шаг 3. Интеграция с WPGPT для автоматической генерации и отправки постов
С помощью WPGPT можно автоматически генерировать контент и сразу отправлять его на нужный сайт.
Пример использования хука WPGPT для публикации после генерации:
add_action('wpgpt_after_generate_content', function($title, $content) {
$remote_url = 'https://remote-site.ru';
$username = 'remoteuser';
$app_password = 'app_password_here';
$result = wpbloger_send_post_to_remote($title, $content, $remote_url, $username, $app_password);
if (is_array($result) && isset($result['id'])) {
error_log('Пост успешно опубликован на удалённом сайте: ID ' . $result['id']);
} else {
error_log('Ошибка публикации: ' . print_r($result, true));
}
}, 10, 2);Обработка ошибок и безопасность при удалённой публикации
Важно грамотно обрабатывать ошибки сети и API:
- Проверяйте ответы сервера на успешное создание записи.
- Логируйте ошибки для последующего анализа.
- Используйте защищённые каналы (HTTPS) и безопасные методы аутентификации.
Также не стоит передавать чувствительные данные напрямую в коде — используйте константы или настройки в админке.
Дополнительные советы по расширению функционала
Автоматическая загрузка изображений в удалённый сайт
Для публикации статей с медиафайлами нужно отдельно отправлять изображения через REST API медиа:
function wpbloger_upload_media_to_remote($file_path, $remote_url, $username, $app_password) {
$url = rtrim($remote_url, '/') . '/wp-json/wp/v2/media';
$file_name = basename($file_path);
$file_data = file_get_contents($file_path);
$args = [
'headers' => [
'Authorization' => 'Basic ' . base64_encode($username . ':' . $app_password),
'Content-Disposition' => 'attachment; filename="' . $file_name . '"',
'Content-Type' => mime_content_type($file_path),
],
'body' => $file_data,
'method' => 'POST',
'data_format' => 'body',
];
$response = wp_remote_post($url, $args);
if (is_wp_error($response)) {
return $response->get_error_message();
}
return json_decode(wp_remote_retrieve_body($response), true);
}Синхронизация изменений и удаление записей
Для полного цикла управления контентом можно реализовать обновление и удаление через REST API, используя методы PUT и DELETE соответственно.
Плагин WPGPT позволяет расширять логику автоматизации и подстраивать её под ваши бизнес-задачи.