Автоматический импорт контента — частая задача для сайтов на WordPress, особенно если нужно регулярно получать статьи, новости или обзоры из внешних источников. В этой статье разберём, как настроить такой импорт без использования громоздких плагинов, а также с примерами, которые можно адаптировать под свои нужды.
Почему нужен автоматический импорт постов в WordPress
Часто владельцы сайтов хотят обновлять контент без ручного копирования и вставки. Это актуально для:
- Новостных сайтов — получать свежие новости с партнерских API или RSS.
- Блогов с гостевым контентом — импортировать материалы от авторов.
- Информационных порталов — обновлять обзоры, прайс-листы, каталоги.
Ручной импорт занимает много времени и может привести к ошибкам. Автоматизация сэкономит время и обеспечит регулярность публикаций.
Основные способы автоматического импорта
Использование RSS-каналов
RSS — самый простой способ получать контент из внешних источников. WordPress умеет работать с RSS, но встроенные возможности ограничены. Для автоматического создания постов из RSS лучше использовать плагины или собственный код.
Импорт через API
Если сайт-поставщик контента предоставляет REST API, можно написать скрипт, который будет обращаться к API, получать данные и создавать посты в WordPress.
Плагины для автоматического импорта
Вот несколько популярных плагинов для этой задачи:
- WP Automatic — позволяет импортировать статьи из RSS, API, социальных сетей и других источников.
- WP All Import — мощный инструмент для импорта данных в любые типы записей.
Но иногда удобнее написать легковесный скрипт под конкретную задачу.
Пример: автоматический импорт постов из RSS с помощью WP Cron
Ниже пример функции, которая раз в час будет проверять RSS-ленту и создавать новые посты из новых элементов.
function wp3ru_import_posts_from_rss() {
$rss = fetch_feed('https://example.com/feed/');
if (is_wp_error($rss)) {
return;
}
$maxitems = $rss->get_item_quantity(5);
$items = $rss->get_items(0, $maxitems);
foreach ($items as $item) {
$title = $item->get_title();
$link = $item->get_link();
$content = $item->get_content();
// Проверяем, есть ли уже такой пост
$existing = get_posts(array(
'title' => $title,
'post_type' => 'post',
'post_status' => 'publish'
));
if (!empty($existing)) {
continue; // пост уже есть
}
// Создаём новый пост
$post_data = array(
'post_title' => $title,
'post_content' => $content . '<br><a href="'.esc_url($link).'" target="_blank">Источник</a>',
'post_status' => 'publish',
'post_author' => 1,
'post_category' => array(1),
);
wp_insert_post($post_data);
}
}
// Регистрируем событие cron
if (!wp_next_scheduled('wp3ru_hourly_import')) {
wp_schedule_event(time(), 'hourly', 'wp3ru_hourly_import');
}
add_action('wp3ru_hourly_import', 'wp3ru_import_posts_from_rss');В этом примере мы используем WP Cron для запуска функции каждый час. Функция берет последние пять элементов из RSS и добавляет их как новые посты, если таких ещё нет.
Особенности и рекомендации при автоматическом импорте
Обработка дубликатов
Очень важно проверять, не импортирован ли уже материал — иначе будут дубли. В примере выше мы проверяем по заголовку. Для более точной проверки можно использовать уникальные идентификаторы из RSS или мета-поля.
Форматирование контента
Контент из внешних источников часто требует очистки или доработки. Можно использовать функции wp_strip_all_tags() для удаления HTML, или наоборот, парсить и форматировать в соответствии с требованиями вашего сайта.
Авторизация и безопасность
Если используете API с авторизацией, храните ключи в wp-config.php или в защищенных опциях. Никогда не вставляйте ключи напрямую в шаблоны.
Интеграция с WPShop
Для управления импортом и расширенных возможностей можно использовать плагин WP Automatic. Он поддерживает множество источников и позволяет гибко настраивать расписание и фильтры.
Импорт из REST API: пример запроса и создания поста
Если источник предлагает REST API, можно получить данные так:
function wp3ru_import_posts_from_api() {
$response = wp_remote_get('https://api.example.com/posts?limit=5');
if (is_wp_error($response)) {
return;
}
$body = wp_remote_retrieve_body($response);
$data = json_decode($body, true);
if (empty($data)) {
return;
}
foreach ($data as $item) {
// Проверяем по уникальному идентификатору
$existing = get_posts(array(
'meta_key' => 'external_id',
'meta_value' => $item['id'],
'post_type' => 'post',
'post_status' => 'publish'
));
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
));
if (!is_wp_error($post_id)) {
update_post_meta($post_id, 'external_id', sanitize_text_field($item['id']));
}
}
}
// Запускаем по расписанию
if (!wp_next_scheduled('wp3ru_api_import')) {
wp_schedule_event(time(), 'hourly', 'wp3ru_api_import');
}
add_action('wp3ru_api_import', 'wp3ru_import_posts_from_api');Такой подход более гибкий и позволяет работать с любой структурой данных.
Как проверить и отладить автоматический импорт
Для отладки полезно вести логирование. Можно добавить запись в лог-файл или использовать встроенный журнал ошибок WordPress:
if (defined('WP_DEBUG') && WP_DEBUG) {
error_log('Импорт постов: добавлен пост с ID ' . $post_id);
}Также рекомендуем тестировать функцию на тестовом сайте перед запуском на продакшене, чтобы избежать ошибок и дублирования.
Выводы и советы
Автоматический импорт постов — мощный инструмент для наполнения сайта. Главное — правильно настроить фильтрацию, проверку дубликатов и расписание импорта. Начинайте с простых RSS и переходите к API, когда понадобится гибкость.
Если нужна готовая расширенная функциональность с удобным интерфейсом, обратите внимание на WP Automatic.