Динамическое создание постов через XML-файл

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

Я новичок в WordPress/PHP и пытаюсь динамически создавать новые посты через xml файл.

XML, с которым я работаю, это один.

Файл периодически обновляется в течение дня по принципу FILO (новые элементы добавляются сверху, а нижние перемещаются вниз) и сейчас у нас есть человек, который вручную создает новые посты каждые несколько часов, извлекая несколько значений из каждого элемента.

Так что я хочу узнать, могу ли я автоматизировать этот процесс?

Когда этот файл обновляется, WordPress будет создавать новый пост только с новым элементом.

Я могу извлекать значения из xml файла, но у меня возникают проблемы с динамическим созданием поста и с тем, чтобы он создавал только новые элементы, чтобы избежать дубликатов.

Также я не уверен, повлияет ли это на большую часть кода, но я использую плагин ACF, так что в посте также есть несколько пользовательских полей.

Спасибо заранее.

Да. Судя по вашему описанию, все условия для автоматизации этого процесса выполнены.

Данные предоставляются в формате XML, который можно распарсить с помощью PHP, чтобы получить необходимые заголовок, тело и мета-компоненты. [поиск]

WordPress поддерживает программные функции вставки/удаления/редактирования постов, так что эта часть довольно проста. [WP Codex]

Теперь вам просто нужен PHP-разработчик, чтобы написать код по вашим спецификациям.

Я выяснил, как динамически создавать посты. Не знаю, оптимально ли это, но это работает.

Я поместил всю необходимую информацию в переменные/массивы и добавил их в цикл for, который выполняет вставку. Он проходит через весь xml файл, но останавливается и выходит из цикла, если находит пост с тем же заголовком (я знаю, что это, вероятно, не лучший уникальный идентификатор), так что он не создаст несколько одинаковых постов. Как только он прерывается, он сообщает пользователю, сколько постов было создано:

$flag = true;
for($i=0; $i<24; $i++){
if(!get_page_by_title($b[$i]->title, OBJECT, post)){

    //проверяем, в какой категории он находится.
    if(stristr($feedKeywordsArray[$i],"news")){
        $category = 3;
    }
    elseif(stristr($feedKeywordsArray[$i], "live")){
        $category =4;
    }
    elseif(stristr($feedKeywordsArray[$i], "insider")){
        $category =5;
    }
    elseif(stristr($feedKeywordsArray[$i], "local")){
        $category =6;
    }
    elseif(stristr($feedKeywordsArray[$i], "spotlight")){
        $category =7;
    }
    else{
        $category=1;
    }

    $my_post = array(
        'post_title'    => $b[$i]->title,
        'post_content'  => $b[$i]->description,
        'post_status'   => 'publish',
        'post_author'   => 1,
        'post_category' => array($category),
        'tags_input' => $feedKeywordsArray[$i]
    );

// Вставляем пост в базу данных.
    $post_id = wp_insert_post( $my_post );
    echo "<h1> Пост: '" . $b[$i]->title . "' добавлен</h1>";

    if($post_id>0){
        update_field('excerpt', (string)($b[$i]->description), $post_id);
        update_field('vamp-thumbnail', (string)($thumbnail[$i]), $post_id);
        update_field('vamp-video', str_replace("#autostart=on;", "#autostart=off;hidecompanion=on;autoadv=off;",(string)($a[$i][0])), $post_id);

    }
}
else{
    $flag = false;
    echo "<h2> Выход из цикла for после создания " . $i . " успешных постов.</h2>";
    break;
}
}

if($flag){
echo "Созданы все посты";
}

?>

.

Ответ или решение

Создание постов в WordPress динамически из XML-файла может значительно облегчить рутинную работу и повысить эффективность управления контентом. В этой статье мы подробно рассмотрим, как реализовать автоматическую генерацию постов на основе XML-файла с использованием PHP и WordPress, учитывая ваш текущий опыт и требования.

Понимание задачи

Вы имеете XML-файл, который обновляется периодически и содержит свежий контент. Ваша цель — автоматически создавать новые посты в WordPress, избегая дублирования существующего контента. При этом необходимо учитывать, что у вас также используется плагин Advanced Custom Fields (ACF), что предполагает дополнительное внимание к пользовательским полям.

Шаги для автоматизации

1. Основы парсинга XML

Для начала вам необходимо убедиться, что вы можете правильно извлечь данные из XML-файла. В PHP это можно сделать с помощью simplexml_load_file(). Например:

$xml = simplexml_load_file('http://videos.oneupsports.com/oneup-sports-national/rss.xml');

После загрузки XML-файла вы получите объект, содержащий все элементы, которые вы можете использовать для генерации постов.

2. Создание функции для проверки существующих постов

Важно избежать дублирования записей в WordPress. Для этого вы можете использовать функцию get_page_by_title(), чтобы проверить, существует ли уже пост с заданным заголовком:

function post_exists($title) {
    return get_page_by_title($title, OBJECT, 'post') !== null;
}

3. Динамическое создание постов

Используя цикл, вы можете пройтись по всем элементам XML и создавать посты:

foreach ($xml->channel->item as $item) {
    $title = (string) $item->title;
    $description = (string) $item->description;
    $category_id = determine_category($item->category);

    if (!post_exists($title)) {
        $post_data = array(
            'post_title'   => $title,
            'post_content' => $description,
            'post_status'  => 'publish',
            'post_author'  => 1,
            'post_category'=> array($category_id),
        );

        // Вставка поста
        $post_id = wp_insert_post($post_data);

        // Обновление пользовательских полей
        if ($post_id) {
            update_field('excerpt', $description, $post_id);
            // Добавьте дополнительные вызовы update_field для других полей, если это необходимо
        }
    }
}

4. Определение категории

В вашем примере вы использовали условия для определения категории поста. Убедитесь, что у вас есть соответствующая логика для назначения категорий, которая соответствует вашим необходимым критериям.

function determine_category($category_name) {
    // Логика для определения ID категории в зависимости от имени
    switch (strtolower($category_name)) {
        case 'news':
            return 3;
        case 'live':
            return 4;
        // добавьте другие катеории
        default:
            return 1; // Категория по умолчанию
    }
}

5. Автоматизация запуска

Чтобы эта система работала автоматически, вы можете создать задачу cron на сервере, которая будет запускать ваш скрипт в определенные интервалы времени. Это позволит вам проверять обновление XML-файла и создавать новые посты без вашего вмешательства.

Заключение

Автоматизация создания постов из XML в WordPress — это мощный прием, который позволит вам сэкономить время и улучшить качество контента. Убедитесь, что вы протестировали код на локальной среде, прежде чем развернуть его на рабочем сайте. Это обеспечит стабильную работу вашего сайта и предотвратит возможные ошибки. Не забывайте об оптимизации SEO при написании заголовков и описаний к постам, чтобы улучшить видимость вашего контента в поисковых системах.

В случае возникновения каких-либо вопросов или если понадобится дополнительная помощь в реализации этого процесса, не стесняйтесь обращаться к сообществу разработчиков или к профессионалам в области PHP и WordPress.

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

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