В этой статье подробно разберём, как реализовать автоматический импорт данных из JSON в WordPress. Такая задача часто возникает при необходимости синхронизировать внешние сервисы с сайтом, загружать контент или обновлять данные без ручного вмешательства. Мы рассмотрим решение, которое можно адаптировать под различные виды данных — от постов до пользовательских типов записей (CPT).
Почему JSON? Преимущества формата для импорта
JSON — это универсальный формат для обмена данными, легко читаемый как человеком, так и машиной. Многие API возвращают данные именно в этом формате, что делает его идеальным для интеграций с WordPress.
Основные преимущества JSON:
- Лёгкость парсинга средствами PHP.
- Поддержка вложенных структур.
- Широкая совместимость с внешними сервисами.
В итоге, знание работы с JSON позволит создавать гибкие решения для импорта любой информации.
Подготовка к автоматическому импорту: архитектура решения
Рассмотрим ключевые этапы:
- Получение JSON-данных — из файла на сервере, по URL или из API.
- Парсинг JSON и валидация данных.
- Обработка и сохранение данных в WordPress.
- Автоматизация запуска импорта (cron, WP-Cron).
Для примера создадим плагин с функциями импорта, который можно расширять под свои задачи.
Получение и парсинг JSON
Если файл локальный, используем стандартные функции PHP. Для загрузки с удалённого сервера — wp_remote_get().
function wpcodex_get_json_data($url_or_path) {
if (filter_var($url_or_path, FILTER_VALIDATE_URL)) {
$response = wp_remote_get($url_or_path);
if (is_wp_error($response)) {
return false;
}
$body = wp_remote_retrieve_body($response);
} else {
if (!file_exists($url_or_path)) {
return false;
}
$body = file_get_contents($url_or_path);
}
$data = json_decode($body, true);
if (json_last_error() !== JSON_ERROR_NONE) {
return false;
}
return $data;
}Эта функция возвращает ассоциативный массив или false при ошибке.
Обработка и сохранение данных в WordPress
Предположим, в JSON содержатся данные постов с полями title, content и custom_field. Создадим функцию импорта:
function wpcodex_import_posts_from_json($data) {
if (empty($data) || !is_array($data)) {
return;
}
foreach ($data as $item) {
if (empty($item['title']) || empty($item['content'])) {
continue; // пропускаем некорректные записи
}
// Проверяем, существует ли пост с таким заголовком
$existing = get_page_by_title($item['title'], OBJECT, 'post');
if ($existing) {
// Обновляем существующий пост
$post_id = $existing->ID;
wp_update_post([
'ID' => $post_id,
'post_content' => $item['content'],
]);
} else {
// Создаём новый пост
$post_id = wp_insert_post([
'post_title' => $item['title'],
'post_content' => $item['content'],
'post_status' => 'publish',
'post_type' => 'post',
]);
}
if ($post_id && !is_wp_error($post_id) && !empty($item['custom_field'])) {
update_post_meta($post_id, 'custom_field', sanitize_text_field($item['custom_field']));
}
}
}Такая структура позволяет безопасно обновлять и добавлять записи.
Автоматизация запуска импорта с WP-Cron
Для регулярного обновления данных используем WP-Cron. Например, запускать импорт раз в сутки.
function wpcodex_schedule_import() {
if (!wp_next_scheduled('wpcodex_daily_json_import')) {
wp_schedule_event(time(), 'daily', 'wpcodex_daily_json_import');
}
}
add_action('wp', 'wpcodex_schedule_import');
function wpcodex_do_daily_import() {
$json_url = 'https://example.com/data.json';
$data = wpcodex_get_json_data($json_url);
wpcodex_import_posts_from_json($data);
}
add_action('wpcodex_daily_json_import', 'wpcodex_do_daily_import');Не забудьте очистить cron при деактивации плагина.
Рекомендации по плагинам для импорта JSON в WordPress
Если хочется готовое решение с визуальным интерфейсом, можно обратить внимание на плагины:
- WP Automatic — автоматический импорт из множества источников, включая JSON.
- Clearfy Pro — оптимизация и автоматизация, в том числе улучшение работы с API.
Оба плагина помогут сэкономить время и избежать рутинной работы, если проект требует регулярного импорта данных.
Особенности обработки вложенных данных JSON
Если JSON содержит сложные вложенные структуры — например, массивы для метаданных или таксономий — нужно расширить обработку.
Пример сохранения категории и метаданных:
function wpcodex_import_with_tax_and_meta($data) {
foreach ($data as $item) {
// Создание или обновление поста
$post_id = wp_insert_post([...]);
// Таксономии
if (!empty($item['categories'])) {
wp_set_post_terms($post_id, $item['categories'], 'category');
}
// Мета поля
if (!empty($item['meta'])) {
foreach ($item['meta'] as $key => $value) {
update_post_meta($post_id, sanitize_key($key), sanitize_text_field($value));
}
}
}
}Это даёт гибкость и позволяет импортировать комплексные данные.
Отладка и логирование при импорте
Для контроля процесса импорта полезно вести лог ошибок и успешных операций. Можно использовать встроенный error_log или создавать свой файл логов.
Пример простой записи ошибок:
function wpcodex_log($message) {
if (WP_DEBUG === true) {
error_log('[wpcodex-import] ' . $message);
}
}В ключевых местах добавьте вызовы wpcodex_log для отслеживания проблем.