Автоматический импорт контента из JSON файлов в WordPress — частая задача, особенно при миграции данных или интеграции с внешними сервисами. В этой статье подробно разберём, как реализовать такой импорт с помощью собственного кода и рассмотрим полезные плагины для упрощения процесса.
Почему полезен автоматический импорт постов из JSON
JSON — универсальный формат обмена данными, который широко используется в API и для хранения структурированной информации. Если у вас есть внешний источник с постами в формате JSON, автоматизация импорта позволит:
- Экономить время: не нужно вручную копировать и вставлять контент.
- Обеспечить регулярное обновление сайта свежими материалами.
- Гарантировать корректность и структурированность данных на сайте.
Для примера рассмотрим, как настроить импорт из локального JSON файла и из внешнего URL.
Создание функции для импорта постов из JSON: пример кода
Ниже пример функции wpbloger_import_posts_from_json(), которая читает JSON, парсит записи и добавляет их в WordPress как посты типа post. Код нужно разместить в файле вашего дочернего шаблона или в отдельном плагине.
function wpbloger_import_posts_from_json($json_path) {
if (!file_exists($json_path)) {
return new WP_Error('file_not_found', 'JSON файл не найден');
}
$json_data = file_get_contents($json_path);
$posts = json_decode($json_data, true);
if (json_last_error() !== JSON_ERROR_NONE) {
return new WP_Error('json_error', 'Ошибка разбора JSON: ' . json_last_error_msg());
}
foreach ($posts as $post_data) {
// Проверяем обязательные поля
if (empty($post_data['title']) || empty($post_data['content'])) {
continue;
}
// Подготовка массива для wp_insert_post
$new_post = array(
'post_title' => sanitize_text_field($post_data['title']),
'post_content' => wp_kses_post($post_data['content']),
'post_status' => 'publish',
'post_author' => 1, // ID автора, можно параметризовать
'post_type' => 'post'
);
// Вставляем пост
$post_id = wp_insert_post($new_post);
// Если есть категории
if (!empty($post_data['categories']) && is_array($post_data['categories'])) {
wp_set_post_categories($post_id, $post_data['categories']);
}
// Если есть теги
if (!empty($post_data['tags']) && is_array($post_data['tags'])) {
wp_set_post_tags($post_id, $post_data['tags']);
}
}
return true;
}Чтобы запустить импорт, вызовите функцию, например:
wpbloger_import_posts_from_json(get_template_directory() . '/data/posts.json');Это позволит загрузить записи из файла posts.json в папке темы.
Импорт из внешнего URL с проверкой данных
Если JSON доступен по URL, используйте wp_remote_get() с обработкой ошибок:
function wpbloger_import_posts_from_url($url) {
$response = wp_remote_get($url);
if (is_wp_error($response)) {
return $response;
}
$body = wp_remote_retrieve_body($response);
$posts = json_decode($body, true);
if (json_last_error() !== JSON_ERROR_NONE) {
return new WP_Error('json_error', 'Ошибка разбора JSON: ' . json_last_error_msg());
}
// Далее можно использовать тот же цикл, что и в предыдущей функции
foreach ($posts as $post_data) {
// Аналогично вставляем посты
}
return true;
}Плагины для импорта JSON в WordPress
Если хотите готовое решение, можно рассмотреть плагины с поддержкой JSON-импорта:
- WP All Import — мощный импортёр с поддержкой любых форматов, включая JSON. Позволяет настраивать поля, фильтры, обновления существующих записей.
- JSON Content Importer — бесплатный плагин для вставки данных из JSON с помощью шорткодов. Подходит для простых задач.
- WP Ultimate CSV Importer — поддерживает CSV и JSON, умеет работать с таксономиями и метаполями.
Для примера, WP All Import предоставляет интуитивный интерфейс и мощные возможности, которые могут сэкономить время и снизить количество ошибок.
Автоматизация импорта через CRON и WP-Cron
Часто импорт нужно запускать регулярно. Для этого можно добавить задачу в WP-Cron. Пример регистрации и обработки CRON задачи:
add_action('wpbloger_cron_import_json', 'wpbloger_cron_import_function');
function wpbloger_cron_import_function() {
$result = wpbloger_import_posts_from_url('https://example.com/posts.json');
if (is_wp_error($result)) {
error_log('Ошибка импорта: ' . $result->get_error_message());
}
}
// Регистрация события при активации плагина или темы
if (!wp_next_scheduled('wpbloger_cron_import_json')) {
wp_schedule_event(time(), 'hourly', 'wpbloger_cron_import_json');
}Так вы сможете автоматически обновлять контент, не заходя вручную.
Обработка ошибок и безопасность при импорте JSON
При работе с внешними данными всегда учитывайте следующие моменты:
- Проверяйте корректность JSON через
json_last_error(). - Фильтруйте и очищайте полученный контент через
sanitize_text_field(),wp_kses_post(). - Ограничивайте права пользователя, под которым выполняется импорт.
- Используйте nonce и другие методы защиты, если импорт запускается через интерфейс.
Это поможет избежать взломов и ошибок в работе сайта.