Автоматический импорт постов в WordPress — востребованная задача, особенно для сайтов с большим объемом контента или тех, кто агрегирует материалы из разных источников. В этой статье разберем, как настроить импорт постов автоматически с помощью популярных плагинов, а также создадим собственное решение на PHP с использованием wp-cron и REST API.
Почему нужен автоматический импорт постов в WordPress
Вручную создавать записи — долго и неудобно. Автоматический импорт позволяет:
- Экономить время на публикации;
- Собирать контент с внешних сайтов или сервисов;
- Поддерживать актуальность сайта;
- Автоматизировать новостные ленты и тематические подборки.
При этом важно, чтобы импорт был надежным и не создавал дубли страниц, а также корректно обрабатывал изображения и метаданные.
Популярные плагины для автоматического импорта постов
1. WP All Import
Очень мощный плагин для импорта из CSV, XML и других форматов. Позволяет настраивать маппинг полей, импортировать пользовательские поля, изображения и таксономии.
Основные возможности:
- Импорт в произвольные типы записей;
- Поддержка отложенного импорта (cron);
- Обработка большого объема данных;
- Плагин совместим с WooCommerce для импорта товаров.
Для автоматизации можно настроить импорт по расписанию через WP Cron или системный cron.
2. Feedzy RSS Feeds
Если нужно импортировать посты из RSS-лент, этот плагин — лучший выбор. Он позволяет выбирать категории, автоматически публиковать записи, импортировать изображения из RSS.
Поддерживает кэширование и фильтрацию по ключевым словам. В PRO-версии есть поддержка кастомных полей и отложенного импорта.
3. WP RSS Aggregator
Еще один популярный плагин для агрегирования RSS-лент. Позволяет импортировать и отображать контент из множества источников, фильтровать и сортировать посты.
Можно настроить автоматический импорт по расписанию, что удобно для новостных сайтов.
Как создать собственный скрипт для автоматического импорта постов
Если готовые плагины не подходят или нужна гибкость, можно написать собственный код. Рассмотрим пример, как импортировать записи из внешнего JSON API и создавать посты в WordPress.
Шаг 1. Создаем функцию для получения данных
function wptest_fetch_external_posts() {
$response = wp_remote_get('https://example.com/api/posts');
if (is_wp_error($response)) {
return false;
}
$body = wp_remote_retrieve_body($response);
$data = json_decode($body, true);
if (!$data) {
return false;
}
return $data;
}Шаг 2. Функция для создания постов из полученных данных
function wptest_create_posts_from_data($posts_data) {
foreach ($posts_data as $item) {
// Проверяем, есть ли уже пост с таким внешним ID
$existing = new WP_Query(array(
'meta_key' => 'wptest_external_id',
'meta_value' => $item['id'],
'post_type' => 'post',
'fields' => 'ids'
));
if ($existing->have_posts()) {
// Пропускаем, если пост уже импортирован
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_category' => array(1)
));
if (!is_wp_error($post_id)) {
update_post_meta($post_id, 'wptest_external_id', sanitize_text_field($item['id']));
// Импорт изображения
if (!empty($item['image'])) {
wptest_set_featured_image($post_id, $item['image']);
}
}
}
}Шаг 3. Функция для установки миниатюры из URL
function wptest_set_featured_image($post_id, $image_url) {
require_once(ABSPATH . 'wp-admin/includes/image.php');
require_once(ABSPATH . 'wp-admin/includes/file.php');
require_once(ABSPATH . 'wp-admin/includes/media.php');
// Загружаем изображение во временную папку
$tmp = download_url($image_url);
if (is_wp_error($tmp)) {
return false;
}
// Параметры файла
$file_array = array(
'name' => basename($image_url),
'tmp_name' => $tmp
);
// Загружаем в медиабиблиотеку
$id = media_handle_sideload($file_array, $post_id);
if (is_wp_error($id)) {
@unlink($tmp);
return false;
}
set_post_thumbnail($post_id, $id);
return true;
}Шаг 4. Запускаем импорт через WP-Cron
Для автоматизации добавим крон-задачу, которая будет запускаться ежедневно:
function wptest_import_cron_schedule($schedules) {
if (!isset($schedules['daily'])) {
$schedules['daily'] = array(
'interval' => 86400,
'display' => __('Once Daily')
);
}
return $schedules;
}
add_filter('cron_schedules', 'wptest_import_cron_schedule');
function wptest_schedule_import() {
if (!wp_next_scheduled('wptest_daily_import')) {
wp_schedule_event(time(), 'daily', 'wptest_daily_import');
}
}
add_action('wp', 'wptest_schedule_import');
add_action('wptest_daily_import', function() {
$posts = wptest_fetch_external_posts();
if ($posts) {
wptest_create_posts_from_data($posts);
}
});Советы по безопасности и оптимизации импорта
При автоматическом импорте важно учитывать несколько моментов:
- Проверка данных. Всегда фильтруйте и очищайте получаемый контент, чтобы избежать внедрения вредоносного кода.
- Обработка дубликатов. Добавляйте уникальный идентификатор (например, внешнее ID) в метаполя, чтобы не создавать повторных записей.
- Ограничение нагрузки. Разбивайте импорт на части, если данных много, чтобы не перегружать сервер.
- Логирование ошибок. Добавьте логирование для отлова сбоев и ошибок при импорте.
Интеграция с плагинами WPShop
Если вы используете темы и плагины из WPShop.ru, то можете дополнительно улучшить автоматизацию и обработку импортируемого контента. Например:
- Clearfy Pro поможет оптимизировать сайт и ускорить обработку данных;
- Expert Review можно использовать для автоматического добавления отзывов к импортируемым товарам или записям;
- WPStories — для создания визуальных историй из импортируемого контента.
Такая связка позволит сделать процесс импорта максимально гибким и эффективным.