Автоматический импорт постов в WordPress — востребованная задача для сайтов новостной тематики, агрегаторов и блогов, которым нужно регулярно обновлять контент из внешних источников. В этой статье разберём, как организовать автоматический импорт постов, используя популярные плагины, а также рассмотрим пример кастомного решения на PHP с использованием встроенных функций WordPress.
Почему важен автоматический импорт постов
Ручное добавление большого объёма контента — трудоёмкий и затратный по времени процесс. Автоматизация позволяет:
- Экономить время редакторов и администраторов сайта.
- Обеспечить стабильное обновление контента, что положительно влияет на SEO и удержание посетителей.
- Интегрировать данные из различных источников — RSS, CSV, JSON, API.
Однако важно настроить импорт так, чтобы избежать дублирования, корректно обработать медиафайлы и сохранить структуру данных.
Популярные плагины для автоматического импорта постов в WordPress
1. WP All Import
Один из самых мощных инструментов для импорта данных из CSV и XML. Позволяет гибко настраивать сопоставления полей, загружать изображения, создавать любые типы записей, а также запускать импорт по расписанию.
Плюсы:
— Интуитивный интерфейс
— Возможность импорта больших объёмов данных
— Множество дополнений (WooCommerce, ACF и др.)
Минусы:
— Премиум-версия платная, но есть бесплатная с ограничениями
2. Feedzy RSS Feeds
Отличный плагин для импорта статей из RSS-лент. Поддерживает автообновление по расписанию, фильтры по ключевым словам, интеграцию с ACF и т.д.
Используется для новостных сайтов, агрегаторов и блогов.
3. WP RSS Aggregator
Простой и мощный плагин для сбора контента из RSS-лент с возможностью импортировать статьи как записи WordPress. Имеет платные дополнения для расширения функционала.
Как настроить автоматический импорт с помощью WP All Import
Рассмотрим настройку на примере CSV-файла с постами.
- Установите и активируйте плагин WP All Import.
- Перейдите в раздел "All Import" > "New Import" и загрузите CSV или XML файл с данными.
- Выберите тип записи (например, "Посты").
- Настройте сопоставление полей файла с полями WordPress — заголовок, содержание, дата, категория.
- Если есть ссылки на изображения, настройте импорт медиафайлов.
- Задайте расписание для автоматического обновления импорта.
- Запустите импорт и проверьте результаты.
WP All Import позволяет запускать PHP-код для обработки данных перед импортом, что дает широкие возможности кастомизации.
Пример простого кастомного скрипта для импорта постов из JSON с использованием WP Cron
Если нужно сделать импорт из нестандартного источника без плагинов, можно написать собственное решение. Ниже пример функции для импорта постов из JSON с удалённого URL.
function wpzoom_import_posts_from_json() {
$response = wp_remote_get('https://example.com/api/posts.json');
if (is_wp_error($response)) {
return;
}
$body = wp_remote_retrieve_body($response);
$data = json_decode($body, true);
if (empty($data) || !is_array($data)) {
return;
}
foreach ($data as $item) {
// Проверим, что пост с таким внешним ID ещё не импортирован
$existing = get_posts(array(
'meta_key' => 'wpzoom_external_id',
'meta_value' => $item['id'],
'post_type' => 'post',
'post_status' => 'any',
'numberposts' => 1
));
if (!empty($existing)) {
continue; // Уже импортирован
}
$post_id = wp_insert_post(array(
'post_title' => sanitize_text_field($item['title']),
'post_content' => wp_kses_post($item['content']),
'post_status' => 'publish',
'post_author' => 1,
'post_date' => sanitize_text_field($item['date'])
));
if (!is_wp_error($post_id)) {
// Сохраняем внешний ID для предотвращения дублирования
update_post_meta($post_id, 'wpzoom_external_id', sanitize_text_field($item['id']));
// Если есть изображение, загружаем и прикрепляем
if (!empty($item['image_url'])) {
media_sideload_image($item['image_url'], $post_id, null, 'id');
}
}
}
}
// Добавим задачу в WP Cron для запуска каждые 6 часов
if (!wp_next_scheduled('wpzoom_import_posts_cron')) {
wp_schedule_event(time(), 'six_hours', 'wpzoom_import_posts_cron');
}
add_action('wpzoom_import_posts_cron', 'wpzoom_import_posts_from_json');
// Регистрируем интервал 6 часов
add_filter('cron_schedules', function($schedules) {
$schedules['six_hours'] = array(
'interval' => 21600,
'display' => 'Every 6 Hours'
);
return $schedules;
});
Этот код можно добавить в файл functions.php вашей темы или создать отдельный плагин. Он загружает данные из JSON, проверяет наличие постов с таким же внешним ID, чтобы избежать дубликатов, импортирует новые записи и прикрепляет изображения.
Обработка медиафайлов при импорте
Очень важно правильно загружать изображения при автоматическом импорте, чтобы они корректно отображались в постах и не создавали нагрузку на сервер.
Функция media_sideload_image() упрощает загрузку изображений из внешних URL и привязку к постам. Она автоматически скачивает файл, помещает в библиотеку медиафайлов и создаёт необходимые размеры.
Если нужно получить ID загруженного изображения для дальнейшей работы, используйте так:
function wpzoom_sideload_image_get_id($file_url, $post_id) {
require_once(ABSPATH . 'wp-admin/includes/media.php');
require_once(ABSPATH . 'wp-admin/includes/file.php');
require_once(ABSPATH . 'wp-admin/includes/image.php');
$tmp = download_url($file_url);
if (is_wp_error($tmp)) {
return 0;
}
$file = array(
'name' => basename($file_url),
'tmp_name' => $tmp
);
$id = media_handle_sideload($file, $post_id);
if (is_wp_error($id)) {
@unlink($tmp);
return 0;
}
return $id;
}
Советы по предотвращению проблем при автоматическом импорте
- Проверяйте дублирование. Всегда используйте уникальные идентификаторы, чтобы не создавать одинаковые записи.
- Обрабатывайте ошибки. Логируйте неудачные попытки импорта для дальнейшего анализа.
- Используйте кэширование. Для API-запросов применяйте кэширование, чтобы снизить нагрузку на внешние сервисы.
- Настраивайте расписание. Запускайте импорт в часы низкой нагрузки на сервер.
- Оптимизируйте медиа. Автоматически сжимайте изображения и удаляйте неиспользуемые файлы.
Интеграция с плагинами WPShop
Для сайтов на базе WPShop можно использовать плагин Clearfy Pro для оптимизации производительности при больших объёмах импортируемого контента, а также Expert Review для автоматического создания отзывов на основе импортируемых данных.
Эти инструменты помогут не только импортировать контент, но и сделать его максимально полезным и удобным для пользователей.