Автоматический импорт постов из RSS-лент — востребованная задача для многих сайтов на WordPress, особенно если нужно добавлять контент с внешних источников без ручного копирования. В этой статье мы разберём, как создать собственный функционал импорта RSS-ленты с помощью PHP-кода и стандартных возможностей WordPress, а также рассмотрим полезные плагины для автоматизации и оптимизации процесса.
Почему стоит создавать свой функционал импорта RSS
Готовые плагины часто содержат лишние функции или могут не подходить под конкретные задачи. Создавая собственный импорт, вы получаете полный контроль над процессом: фильтрация контента, форматирование, обработка медиа и автоматизация публикации.
Кроме того, встроенный код можно легко адаптировать под особенности сайта и интегрировать с другими плагинами, например, для SEO оптимизации или кастомных типов записей.
Основы работы с RSS в WordPress: класс SimplePie
WordPress включает в ядро библиотеку SimplePie, с помощью которой можно разбирать RSS и Atom-ленты. Она упрощает получение и обработку элементов ленты — заголовков, ссылок, описаний, даты и медиа.
Для начала создадим функцию wpcoder_import_rss_posts, которая будет загружать и импортировать новые записи из заданной RSS-ленты.
Пример базовой функции импорта RSS
function wpcoder_import_rss_posts($feed_url) {
include_once(ABSPATH . WPINC . '/feed.php');
$rss = fetch_feed($feed_url);
if (is_wp_error($rss)) {
error_log('WPCODER: Ошибка загрузки 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_permalink();
$content = $item->get_content();
$date = $item->get_date('Y-m-d H:i:s');
// Проверяем, импортировалась ли уже запись с таким заголовком
$existing = get_posts([
'title' => $title,
'post_type' => 'post',
'post_status' => 'any',
'numberposts' => 1
]);
if ($existing) continue;
// Создаём новую запись
wp_insert_post([
'post_title' => $title,
'post_content' => $content,
'post_date' => $date,
'post_status' => 'publish',
'post_author' => 1
]);
}
}
Эта функция загружает ленту, получает максимум 10 элементов, проверяет наличие похожих записей и вставляет новые. Однако в реальном проекте нужно доработать проверку, обработку медиа и форматы.
Обработка изображений из RSS и добавление в медиа-библиотеку
Часто RSS-посты содержат изображения, которые важно загрузить и прикрепить к записи. Для этого можно воспользоваться функцией wpcoder_download_and_attach_image, которая скачивает файл и добавляет его в медиа-библиотеку WordPress.
Пример функции для загрузки и прикрепления изображения
function wpcoder_download_and_attach_image($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)) {
error_log('WPCODER: Ошибка загрузки изображения: ' . $tmp->get_error_message());
return false;
}
// Создаём массив для функции media_handle_sideload
$file = [
'name' => basename($image_url),
'tmp_name' => $tmp
];
// Загружаем файл в медиа-библиотеку
$id = media_handle_sideload($file, $post_id);
if (is_wp_error($id)) {
@unlink($tmp);
error_log('WPCODER: Ошибка добавления изображения в медиа: ' . $id->get_error_message());
return false;
}
// Устанавливаем изображение как миниатюру записи
set_post_thumbnail($post_id, $id);
return true;
}
Эту функцию стоит вызывать внутри цикла импорта, если в RSS есть ссылка на изображение. Обычно URL картинки можно получить через $item->get_enclosure() или искать в содержимом.
Автоматизация импорта с помощью WP-Cron
Чтобы импорт происходил регулярно, создадим задачу cron, которая будет запускать функцию импорта по расписанию.
Добавление cron-задачи и хука
add_action('wpcoder_rss_import_cron', 'wpcoder_rss_import_cron_handler');
function wpcoder_rss_import_cron_handler() {
$feed_url = 'https://example.com/feed'; // Замените на свою RSS-ленту
wpcoder_import_rss_posts($feed_url);
}
// Планируем задачу раз в час
if (!wp_next_scheduled('wpcoder_rss_import_cron')) {
wp_schedule_event(time(), 'hourly', 'wpcoder_rss_import_cron');
}
Такой подход позволит автоматически импортировать новые статьи ежечасно. Для отмены cron используйте wp_clear_scheduled_hook('wpcoder_rss_import_cron').
Полезные плагины для импорта RSS
Если вы хотите готовое решение с расширенными возможностями, рекомендуем обратить внимание на плагины:
- WP-GPT — для генерации описаний и автоматизации контента;
- My Popup — для сбора подписок после публикации импортированных постов;
- WPRemark — для сбора отзывов на контент.
Эти плагины помогут расширить функционал и улучшить взаимодействие с пользователями.
Советы по оптимизации и безопасности
Импорт RSS может создавать нагрузку, особенно на больших сайтах. Рекомендуется:
- Ограничивать количество импортируемых записей за один запуск;
- Кэшировать результаты загрузки RSS, чтобы не делать много запросов;
- Использовать nonce и права пользователей, если запускаете импорт из админки;
- Проверять и фильтровать контент, чтобы избежать XSS и нежелательных тегов.
Также полезно логировать ошибки и успешные импорты для удобства отладки.