Вопрос или проблема
У меня есть скрипт, который генерирует контент в формате JSON, и его можно получить с помощью GET-запроса к определенному URL. URL, из которого нужно извлечь информацию, следующий: https://api.webscraper.io/api/v1/scraping-job/4851593/json?api_token=aLXQWr2IbQCefgiLc1PfIjfx7GqvsBd3APVbU1pHchszzzFIFa6HFKsNmpft
Я хотел бы иметь возможность подключить это к моему WP, чтобы контент публиковался автоматически.
Вы можете использовать wp_insert_post(), чтобы программно добавить новый пост. Например,
$my_post = array(
'post_title' => wp_strip_all_tags( $json->title ),
'post_content' => $json->body,
'post_status' => 'publish',
'post_author' => 1,
'post_category' => $json->categories
);
// Вставьте пост в базу данных
wp_insert_post( $my_post );
Ваша ссылка истекла, поэтому я не смог увидеть структуру JSON-данных. Но ответ будет тем же. Настройте cron-задачу или используйте их вебхук (если он есть), чтобы вызвать страницу, на которой вы настроили wp_insert_post()
для автоматической публикации.
Напишите собственный простой скрипт, который извлекает данные JSON и создает посты WP с использованием REST API WP, и замените переменную $json_url
на URL вашего конечного JSON-адреса
Мы добавили функцию post_exists()
, чтобы проверить, существует ли пост с таким же заголовком в базе данных WP
// URL конечного JSON-адреса
$json_url="https://api.webscraper.io/api/v1/scraping-job/4851593/json?api_token=aLXQWr2IbQCefgiLc1PfIjfx7GqvsBd3APVbU1pHchszzzFIFa6HFKsNmpft";
// Извлечение данных JSON
$response = file_get_contents($json_url);
// Проверка, были ли данные успешно извлечены
if ($response === false) {
die('Не удалось получить данные JSON.');
}
// Преобразование данных JSON в ассоциативный массив
$data = json_decode($response, true);
// Проверка, была ли декодировка JSON успешной
if ($data === null) {
die('Не удалось декодировать данные JSON.');
}
// Функция для проверки, существует ли пост
function post_exists($title) {
global $wpdb;
$query = $wpdb->prepare("SELECT ID FROM $wpdb->posts WHERE post_title = %s AND post_type="post"", $title);
$post_id = $wpdb->get_var($query);
return $post_id;
}
// Итерация по каждому элементу данных JSON
foreach ($data as $item) {
// Проверка, существует ли пост
if (post_exists($item['title'])) {
echo 'Пост с заголовком "' . $item['title'] . '" уже существует. Пропускаем...<br>';
continue;
}
// Создание нового поста
$post_data = array(
'post_title' => $item['title'], // Предполагая, что поле 'title' существует в ваших данных JSON
'post_content' => $item['content'], // Предполагая, что поле 'content' существует в ваших данных JSON
'post_status' => 'publish', // Публикация поста немедленно
// Вы можете включить другие поля, такие как 'post_excerpt', 'post_category', 'tags_input' и т.д. по мере необходимости
);
// Вставка поста в WordPress
$post_id = wp_insert_post($post_data);
// Проверка, был ли пост успешно вставлен
if (is_wp_error($post_id)) {
echo 'Не удалось вставить пост: ' . $post_id->get_error_message();
} else {
echo 'Пост успешно вставлен с ID: ' . $post_id . '<br>';
}
}
Ответ или решение
Автоматический импорт контента в WordPress из JSON файла
Введение
Импорт контента в WordPress из внешних источников, таких как JSON файлы, является распространенной задачей для владельцев сайтов, стремящихся автоматизировать создание и обновление контента. В этом руководстве мы обсудим, как настроить автоматический импорт данных в WordPress, используя API и заданный URL-адрес для получения JSON.
Шаг 1: Получение данных из API
Для начала вам нужно получить ваши данные в формате JSON. Ваша ссылка на API:
https://api.webscraper.io/api/v1/scraping-job/4851593/json?api_token=aLXQWr2IbQCefgiLc1PfIjfx7GqvsBd3APVbU1pHchszzzFIFa6HFKsNmpft
Мы будем использовать file_get_contents
для извлечения JSON данных. Вот пример кода:
$json_url = "https://api.webscraper.io/api/v1/scraping-job/4851593/json?api_token=aLXQWr2IbQCefgiLc1PfIjfx7GqvsBd3APVbU1pHchszzzFIFa6HFKsNmpft";
// Получаем данные JSON
$response = file_get_contents($json_url);
// Проверка успешности получения данных
if ($response === false) {
die('Не удалось получить данные JSON.');
}
// Декодируем JSON данные в ассоциативный массив
$data = json_decode($response, true);
// Проверка успешности декодирования JSON
if ($data === null) {
die('Не удалось декодировать данные JSON.');
}
Шаг 2: Проверка существования постов
Перед добавлением нового поста, необходимо проверить, существует ли уже пост с таким названием. Для этого создадим функцию post_exists
:
function post_exists($title) {
global $wpdb;
$query = $wpdb->prepare("SELECT ID FROM $wpdb->posts WHERE post_title = %s AND post_type = 'post'", $title);
$post_id = $wpdb->get_var($query);
return $post_id;
}
Шаг 3: Импорт данных
Теперь мы можем пройтись по каждому элементу в нашем массиве $data и добавить новый пост с помощью функции wp_insert_post()
:
foreach ($data as $item) {
// Проверяем существование поста
if (post_exists($item['title'])) {
echo 'Пост с заголовком "' . $item['title'] . '" уже существует. Пропускаем...<br>';
continue;
}
// Данные для нового поста
$post_data = array(
'post_title' => $item['title'], // Предполагаем, что поле 'title' существует в ваших данных JSON
'post_content' => $item['content'], // Предполагаем, что поле 'content' существует в ваших данных JSON
'post_status' => 'publish', // Публикуем пост сразу
);
// Вставляем пост в WordPress
$post_id = wp_insert_post($post_data);
// Проверка на успешность вставки поста
if (is_wp_error($post_id)) {
echo 'Не удалось вставить пост: ' . $post_id->get_error_message();
} else {
echo 'Пост успешно вставлен с ID: ' . $post_id . '<br>';
}
}
Шаг 4: Автоматизация с помощью Cron
Чтобы автоматизировать процесс импорта, вы можете использовать WP-Cron. Создайте задачу cron, которая будет вызывать ваш скрипт через определенные промежутки времени. Для этого добавьте следующий код в файл functions.php вашей темы:
if (!wp_next_scheduled('my_custom_import_event')) {
wp_schedule_event(time(), 'hourly', 'my_custom_import_event');
}
add_action('my_custom_import_event', 'my_custom_import_function');
function my_custom_import_function() {
// Здесь поместите код для импорта данных
}
Заключение
Импорт контента в WordPress из JSON файла – это процесс, который можно успешно автоматизировать, следуя простым шагам. Использование WP REST API в сочетании с проверкой существующих постов и автоматизацией через Cron позволит вам эффективно управлять контентом вашего сайта. Надеюсь, это руководство поможет вам успешно произвести настройку!