Автоматический импорт контента в WordPress из внешних источников — частая задача, которая помогает поддерживать сайт актуальным без постоянного ручного добавления записей. В этой статье мы подробно разберём, как реализовать автоматический импорт постов из RSS-ленты и REST API, используя кастомные решения с примерами кода, а также рассмотрим полезные плагины для упрощения процесса.
Почему нужен автоматический импорт постов в WordPress
Импорт контента из внешних источников помогает создавать агрегаторы новостей, тематические сайты с обновлениями, а также автоматизировать наполнение блога. Это экономит время и снижает вероятность ошибок при ручном добавлении контента. При этом важно правильно настроить импорт, чтобы избежать дублирования, корректно обрабатывать категории, теги и изображения.
Автоматический импорт из RSS с примерами кода
RSS-фиды — самый простой и распространённый источник для автоматического импорта. WordPress поддерживает парсинг RSS через встроенные функции, но для автоматизации потребуется написать функцию, которая будет регулярно запускаться и создавать записи из новых элементов фида.
Парсинг RSS и создание постов
Для начала создадим функцию wpsetup_import_rss_posts(), которая будет загружать RSS, проверять новые элементы и создавать посты:
function wpsetup_import_rss_posts() {
$rss = fetch_feed('https://example.com/feed/'); // URL RSS-ленты
if (is_wp_error($rss)) {
error_log('Ошибка при загрузке RSS: ' . $rss->get_error_message());
return;
}
$maxitems = $rss->get_item_quantity(10); // максимум 10 новых постов
$rss_items = $rss->get_items(0, $maxitems);
foreach ($rss_items as $item) {
$title = $item->get_title();
$link = $item->get_link();
$content = $item->get_content();
$date = $item->get_date('Y-m-d H:i:s');
// Проверяем, есть ли уже такой пост
$existing = get_posts(array(
'title' => $title,
'post_type' => 'post',
'post_status' => 'any',
'numberposts' => 1
));
if ($existing) continue;
// Создаём новый пост
$post_id = wp_insert_post(array(
'post_title' => $title,
'post_content' => $content,
'post_status' => 'publish',
'post_date' => $date,
'post_type' => 'post'
));
if (!is_wp_error($post_id)) {
// Можно добавить категории, теги и другие метаданные
}
}
}
Настройка регулярного запуска через WP-Cron
Чтобы импорт происходил автоматически, нужно добавить событие в планировщик задач WordPress:
function wpsetup_schedule_rss_import() {
if (!wp_next_scheduled('wpsetup_rss_import_hook')) {
wp_schedule_event(time(), 'hourly', 'wpsetup_rss_import_hook');
}
}
add_action('wp', 'wpsetup_schedule_rss_import');
add_action('wpsetup_rss_import_hook', 'wpsetup_import_rss_posts');
Это будет запускать функцию импорта каждый час. Для теста можно запускать вручную через вызов wpsetup_import_rss_posts().
Импорт через REST API внешнего сервиса
Многие современные сервисы предоставляют данные в формате JSON через REST API. Импорт из такого источника более гибкий, но требует работы с запросами и обработкой JSON.
Пример функции для импорта из JSON API
function wpsetup_import_json_api_posts() {
$response = wp_remote_get('https://api.example.com/posts');
if (is_wp_error($response)) {
error_log('Ошибка при запросе API: ' . $response->get_error_message());
return;
}
$body = wp_remote_retrieve_body($response);
$data = json_decode($body, true);
if (empty($data) || !is_array($data)) return;
foreach ($data as $item) {
$title = sanitize_text_field($item['title']);
$content = wp_kses_post($item['content']);
$date = sanitize_text_field($item['date']);
// Проверяем дубликаты по заголовку
$existing = get_posts(array(
'title' => $title,
'post_type' => 'post',
'post_status' => 'any',
'numberposts' => 1
));
if ($existing) continue;
wp_insert_post(array(
'post_title' => $title,
'post_content' => $content,
'post_status' => 'publish',
'post_date' => $date,
' post_type' => 'post'
));
}
}
Планирование автоматического запуска
Аналогично RSS, можно добавить крон-задачу для регулярного запуска импорта JSON:
function wpsetup_schedule_json_import() {
if (!wp_next_scheduled('wpsetup_json_import_hook')) {
wp_schedule_event(time(), 'hourly', 'wpsetup_json_import_hook');
}
}
add_action('wp', 'wpsetup_schedule_json_import');
add_action('wpsetup_json_import_hook', 'wpsetup_import_json_api_posts');
Полезные плагины для автоматического импорта
Если не хочется писать код с нуля, можно использовать готовые плагины. Вот несколько популярных решений с поддержкой RSS и API:
- WP All Import — мощный импортёр с поддержкой CSV, XML и JSON, позволяет гибко настраивать импорт, поддерживает планирование.
- WP RSS Aggregator — специализированный плагин для агрегации RSS лент с множеством дополнений для фильтрации и отображения контента.
- Feedzy RSS Feeds — простой плагин для импорта и отображения RSS с возможностью автоматизации и фильтрации.
Эти плагины можно найти и скачать на WPSHOP.ru.
Обработка изображений и метаданных при импорте
Часто в RSS или API приходят ссылки на изображения, которые нужно импортировать и прикреплять к постам. Для этого можно использовать функцию wpsetup_import_image_from_url():
function wpsetup_import_image_from_url($image_url, $post_id) {
require_once(ABSPATH . 'wp-admin/includes/file.php');
require_once(ABSPATH . 'wp-admin/includes/media.php');
require_once(ABSPATH . 'wp-admin/includes/image.php');
$tmp = download_url($image_url);
if (is_wp_error($tmp)) return false;
$file = array(
'name' => basename($image_url),
'tmp_name' => $tmp
);
$id = media_handle_sideload($file, $post_id);
if (is_wp_error($id)) {
@unlink($tmp);
return false;
}
set_post_thumbnail($post_id, $id);
return true;
}
Вызывайте эту функцию после создания поста, передавая ссылку на изображение из RSS или API.
Рекомендации по безопасности и производительности
При автоматическом импорте важно учитывать нагрузку на сервер и безопасность. Следуйте рекомендациям:
- Ограничивайте количество импортируемых постов за один запуск.
- Проверяйте и фильтруйте входящие данные, избегайте XSS и SQL-инъекций.
- Используйте WP-Cron или системный cron для стабильного запуска задач.
- Логируйте ошибки и исключения для отладки.
- Периодически очищайте устаревшие временные файлы и ненужные посты.
Автоматический импорт постов — мощный инструмент, который при правильной настройке значительно улучшит управление контентом вашего сайта на WordPress.