В этой статье мы подробно рассмотрим, как реализовать автоматическое создание записей в WordPress на основе данных из внешних источников, таких как RSS-ленты, API или другие форматы. Такая задача часто возникает при интеграции с новостными агрегаторами, партнёрскими сервисами или при импорте контента с других сайтов. Мы разберём подходы, лучшие практики и приведём примеры кода, которые помогут вам создать надёжное и масштабируемое решение.
Почему автоматизация создания записей важна
Ручное копирование и вставка контента — это неэффективно и чревато ошибками. Автоматизация позволяет:
- Сэкономить время и ресурсы редакторов
- Обеспечить своевременное обновление контента
- Избежать дублирования и ошибок при публикации
- Интегрировать сторонние данные без ручного вмешательства
Для WordPress доступны как готовые плагины, так и возможность написать собственное решение под конкретные задачи.
Основные подходы к импорту данных
Использование RSS-лент
RSS — самый простой способ получать обновления с других сайтов. WordPress изначально поддерживает RSS, но для автоматического создания записей нужно реализовать парсер и логику импорта.
Пример: используя fetch_feed() из WordPress, можно получить элементы ленты и сохранить их как записи.
function wpfind_import_from_rss() {
include_once( ABSPATH . WPINC . '/feed.php' );
$feed = fetch_feed('https://example.com/feed');
if (is_wp_error($feed)) {
return;
}
$maxitems = $feed->get_item_quantity(5);
$items = $feed->get_items(0, $maxitems);
foreach ($items as $item) {
$title = $item->get_title();
$content = $item->get_content();
$link = $item->get_link();
// Проверяем, что запись ещё не создана
$existing = get_page_by_title($title, OBJECT, 'post');
if (!$existing) {
wpfind_insert_post_from_rss($title, $content, $link);
}
}
}
function wpfind_insert_post_from_rss($title, $content, $link) {
$post_data = [
'post_title' => $title,
'post_content' => $content . '\n\nИсточник: <a href="' . esc_url($link) . '">' . esc_html($link) . '</a>',
'post_status' => 'publish',
'post_author' => 1,
];
wp_insert_post($post_data);
}Такой код можно запускать по крону или вручную, чтобы обновлять сайт новыми записями из ленты.
Получение данных через API
Если источник предоставляет REST API или GraphQL, можно получить структурированные данные напрямую. Это надёжнее и даёт больше контроля.
Пример запроса к REST API с использованием wp_remote_get():
function wpfind_import_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['posts'])) {
foreach ($data['posts'] as $item) {
$title = sanitize_text_field($item['title']);
$content = wp_kses_post($item['content']);
// Проверяем дубли
$existing = get_page_by_title($title, OBJECT, 'post');
if (!$existing) {
wpfind_insert_post_from_api($title, $content);
}
}
}
}
function wpfind_insert_post_from_api($title, $content) {
$post_data = [
'post_title' => $title,
'post_content' => $content,
'post_status' => 'publish',
'post_author' => 1,
];
wp_insert_post($post_data);
}Как избежать проблем с дублированием и безопасностью
При автоматическом импорте важно не создавать дубли и не публиковать вредоносный контент. Вот несколько советов:
- Используйте проверку существующих записей по заголовку или уникальному идентификатору
- Очистите и отфильтруйте входящие данные с помощью
sanitize_text_field(),wp_kses_post()и других функций безопасности - Ограничивайте количество импортируемых записей за один запуск скрипта
- Используйте nonce и проверку прав пользователя, если добавляете интерфейс в админку
Автоматизация процесса с помощью WP-Cron
Чтобы импорт происходил регулярно, можно настроить WP-Cron. Для этого:
- Зарегистрируйте своё событие в хуках
- Создайте функцию-обработчик импорта
- Запланируйте периодический запуск
add_action('wpfind_cron_import', 'wpfind_import_from_rss');
function wpfind_activate_cron() {
if (!wp_next_scheduled('wpfind_cron_import')) {
wp_schedule_event(time(), 'hourly', 'wpfind_cron_import');
}
}
register_activation_hook(__FILE__, 'wpfind_activate_cron');
function wpfind_deactivate_cron() {
$timestamp = wp_next_scheduled('wpfind_cron_import');
wp_unschedule_event($timestamp, 'wpfind_cron_import');
}
register_deactivation_hook(__FILE__, 'wpfind_deactivate_cron');Так вы будете получать свежие записи без ручного вмешательства.
Готовые плагины для импорта контента
Если не хотите писать свой код, рассмотрите эти плагины:
- Feedzy RSS Feeds Lite — удобный парсер RSS с настройками фильтрации
- WP All Import Pro — мощный импортёр CSV, XML с поддержкой API
- Clearfy Pro — оптимизация и настройка автоматизации WordPress
Эти инструменты помогают быстро настроить импорт без программирования.
Пример расширения: добавление метаданных и таксономий при импорте
Часто нужно не только создать запись, но и добавить к ней метаданные или категории. Расширим пример:
function wpfind_insert_post_from_api($title, $content, $category_slug = 'news') {
$post_data = [
'post_title' => $title,
'post_content' => $content,
'post_status' => 'publish',
'post_author' => 1,
'post_category' => [get_category_by_slug($category_slug)->term_id],
];
$post_id = wp_insert_post($post_data);
if ($post_id && !is_wp_error($post_id)) {
// Добавляем метаданные
update_post_meta($post_id, '_wpfind_source', 'API Example');
update_post_meta($post_id, '_wpfind_imported_at', current_time('mysql'));
}
}Такой подход помогает организовать импортированный контент и использовать метаданные для фильтрации или отображения.
Отладка и логирование
Для стабильной работы важно вести лог ошибок и успешных импортов. Используйте файл журнала или системный лог WordPress.
function wpfind_log($message) {
if (defined('WP_DEBUG') && WP_DEBUG) {
error_log('[wpfind-import] ' . $message);
}
}<Добавляйте вызовы wpfind_log() в ключевые места кода, чтобы отслеживать процесс.