Автоматический импорт постов из внешних источников в WordPress — востребованная задача для сайтов, которые агрегируют контент, публикуют новости или обновляют информацию без ручного копирования. В этой статье подробно разберём, как реализовать такой импорт на уровне кода и с помощью плагинов, а также расскажем о нюансах и возможных проблемах.
Зачем нужен автоматический импорт постов в WordPress
Импорт с внешних RSS, JSON или XML позволяет значительно сэкономить время на публикации, поддерживать актуальность контента и расширять тематику сайта. Например, новостные проекты могут автоматически подтягивать свежие материалы, тематические блоги — обновлять подборки, а агрегаторы — собирать контент с разных площадок.
Но чтобы импорт работал корректно и безопасно, нужно продумать структуру, фильтрацию и обновление уже импортированных записей, а также обеспечить совместимость с используемой темой и плагинами SEO.
Выбор источника и формата данных для импорта
Самые популярные форматы — RSS и JSON API. RSS проще парсить, он стандартизирован, но JSON API может дать более гибкую информацию и больше полей для импорта.
Перед началом надо удостовериться, что внешний источник позволяет автоматический импорт и не нарушает авторские права.
Также важно учитывать частоту обновления контента и ограничения по запросам, чтобы не перегружать сервер и не получить блокировку.
Реализация автоматического импорта через WP-Cron и парсинг RSS
Создание функции импорта и расписания задачи
Начнём с написания функции, которая будет скачивать RSS и создавать записи в WordPress. Используем встроенный класс SimplePie для парсинга RSS.
function wpmentor_import_posts_from_rss() {
$feed_url = 'https://example.com/feed'; // URL RSS вашего источника
include_once( ABSPATH . WPINC . '/feed.php' );
$rss = fetch_feed($feed_url);
if (is_wp_error($rss)) {
return;
}
$maxitems = $rss->get_item_quantity(5); // Импортируем максимум 5 новых записей
$rss_items = $rss->get_items(0, $maxitems);
foreach ($rss_items as $item) {
$title = $item->get_title();
$content = $item->get_content();
$link = $item->get_link();
// Проверяем, не импортирована ли запись ранее
$existing = get_posts(array(
'title' => $title,
'post_type' => 'post',
'post_status' => 'publish',
'numberposts' => 1
));
if ($existing) continue;
// Создаём новую запись
$post_data = array(
'post_title' => $title,
'post_content' => $content . '<p>Источник: <a href="' . esc_url($link) . '" target="_blank" rel="nofollow">' . esc_url($link) . '</a></p>',
'post_status' => 'publish',
'post_author' => 1,
'post_category' => array(1),
);
wp_insert_post($post_data);
}
}
// Запускаем импорт ежечасно
if (!wp_next_scheduled('wpmentor_hourly_import')) {
wp_schedule_event(time(), 'hourly', 'wpmentor_hourly_import');
}
add_action('wpmentor_hourly_import', 'wpmentor_import_posts_from_rss');Этот код добавляет задачу в WP-Cron, которая будет запускаться каждый час и импортировать до 5 новых постов из RSS. Мы проверяем, чтобы не дублировать записи по заголовку.
Обработка ошибок и оптимизация
Рекомендуется добавить логирование ошибок и успешных импортов, чтобы контролировать работу. Также можно расширить проверку по уникальным ID, а не только заголовку.
Для больших сайтов стоит использовать внешние CRON-задачи, чтобы не зависеть от посещений сайта.
Использование JSON API для импорта постов в WordPress
Если ваш источник предоставляет JSON API, например, REST, импорт можно сделать более гибким — подтягивать дополнительные поля, метаданные, картинки.
Пример функции для запроса JSON и импорта:
function wpmentor_import_posts_from_json() {
$response = wp_remote_get('https://example.com/api/posts');
if (is_wp_error($response)) {
return;
}
$body = wp_remote_retrieve_body($response);
$data = json_decode($body, true);
if (!$data || !isset($data['posts'])) {
return;
}
foreach ($data['posts'] as $item) {
// Проверка на дубликаты по уникальному ID
$existing = get_posts(array(
'meta_key' => 'wpmentor_external_id',
'meta_value' => $item['id'],
'post_type' => 'post',
'numberposts' => 1
));
if ($existing) continue;
$post_data = array(
'post_title' => sanitize_text_field($item['title']),
'post_content' => wp_kses_post($item['content']),
'post_status' => 'publish',
'post_author' => 1
);
$post_id = wp_insert_post($post_data);
if ($post_id && !is_wp_error($post_id)) {
update_post_meta($post_id, 'wpmentor_external_id', sanitize_text_field($item['id']));
}
}
}
add_action('wpmentor_hourly_import', 'wpmentor_import_posts_from_json');Такой подход позволяет импортировать только новые посты, используя уникальный идентификатор из внешней системы.
Полезные плагины для автоматического импорта контента в WordPress
Если вы не хотите писать код с нуля, можно использовать плагины:
- WP All Import — мощный конструктор импортов из XML, CSV с возможностью расписания и обработки кастомных полей.
- Feedzy RSS Feeds — удобный плагин для импорта и вывода RSS-ленты с возможностью фильтрации и настройки шаблонов.
- WP RSS Aggregator — профессиональное решение для агрегации RSS с расширениями для импорта в записи.
Все эти плагины поддерживают автоматический запуск через WP-Cron, а также имеют дополнительные функции для работы с мультиязычностью, SEO и медиа.
Интеграция с WPShop: использование плагина WPRemark для отзывов после импорта
Если вы импортируете отзывы или материалы с пользовательским откликом, полезно автоматизировать сбор отзывов. Плагин WPRemark позволяет собирать отзывы и рейтинг прямо под импортированными постами, улучшая вовлечённость и доверие.
Практические советы и рекомендации
Безопасность и авторские права
При импорте контента обязательно проверяйте права на публикацию. Используйте корректные ссылки на источник и не копируйте контент целиком без разрешения.
Производительность
Импорт больших объёмов данных может нагрузить сервер. Используйте отложенный импорт, разбивайте данные на части, кешируйте результаты и применяйте CRON вне WordPress, если нужно.
SEO и уникальность контента
Добавляйте уникальные описания, используйте canonical ссылки на оригинал, чтобы не получить штрафы от поисковиков за дублирование.
Заключение
Автоматический импорт постов — мощный инструмент для сайтов на WordPress, позволяющий экономить время и расширять контент. Реализация может быть как через код с использованием WP-Cron и парсинга данных, так и с помощью готовых плагинов. Важно соблюдать баланс между автоматизацией и качеством контента, следить за безопасностью и производительностью.