Автоматически импортировать контент в WordPress из файла JSON

Вопрос или проблема

У меня есть скрипт, который генерирует контент в формате 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 позволит вам эффективно управлять контентом вашего сайта. Надеюсь, это руководство поможет вам успешно произвести настройку!

Оцените материал
Добавить комментарий

Капча загружается...