Показ терминов таксономии в RSS-лентах

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

Проблема:
У меня есть пользовательский тип записи “объявления” и пользовательская таксономия “announcements_taxonomy”. Я могу получить доступ к RSS-лентам, перейдя по адресу http://domain.com/announcements/feed – Проблема в том, что я не вижу категории/теги в RSS-ленте.

Детали:
Я использую Simplepie, чтобы получать элементы ленты и отображать их вне установки WordPress. Поскольку RSS-лента на моем сайте WP не показывает категории, я не могу получить к ним доступ с помощью функции get_categories().

Вопрос:
Как мне получить категории из моего пользовательского типа записи и таксономии, чтобы они отображались в RSS-ленте?

Вот как показать термины таксономии в RSS-ленте. Просто добавьте это в файл functions.php и обновите переменные $tax и $post_type, чтобы они соответствовали вашим требованиям:

add_filter('the_category_rss', 'wpq_the_category_rss');
add_filter('rss2_ns', 'wpq_rss2_ns');


function wpq_the_category_rss($the_list_original)
{
$tax = 'announcement_tags';
$post_type="announcements";

if(get_post_type() != $post_type)
return $the_list;

$categories = get_the_terms(get_the_ID(), $tax);

$the_list="";
$cat_names = array();

if(!empty($categories))
{
foreach((array)$categories as $category)
{
$cat_names[] = sanitize_term_field('name', $category->name, $category->term_id, $tax, 'rss');
$cat_descriptions[] = sanitize_term_field('description', $category->description, $category->term_id, $tax, 'rss');
}
}

$cat_names = array_unique($cat_names);
$cat_descriptions = array_unique($cat_descriptions);

foreach($cat_names as $cat_name)
{
$the_list .= "\t\t<category domain=\"". $tax ."\"><![CDATA[" . @html_entity_decode($cat_name, ENT_COMPAT, get_option('blog_charset') ) . "]]></category>\n";
}

foreach($cat_descriptions as $cat_description)
{
$the_list .= "\t\t<wpq:category_description domain=\"". $tax ."\"><![CDATA[". @html_entity_decode($cat_description, ENT_COMPAT, get_option('blog_charset')) ."]]></wpq:category_description>\n";
}

return $the_list_original.$the_list;
}

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

Показ терминов таксономии в RSS-ленте

Для решения вашей проблемы с отображением таксономий (категорий или тегов) в RSS-ленте для пользовательского типа записи "announcements" и пользовательской таксономии "announcements_taxonomy" вам нужно внести изменения в файл functions.php вашей темы WordPress.

Вот шаги, которые нужно выполнить:

  1. Откройте файл functions.php вашей активной темы.
  2. Добавьте следующий код, чтобы подключить необходимые фильтры и показать таксономию в RSS-ленте:
add_filter('the_category_rss', 'wpq_the_category_rss'); 
add_filter('rss2_ns', 'wpq_rss2_ns'); 

function wpq_the_category_rss($the_list_original) { 
    $tax = 'announcements_taxonomy'; // Убедитесь, что здесь указано имя вашей таксономии
    $post_type = "announcements"; // Убедитесь, что здесь указано название вашего пользовательского типа записи

    if (get_post_type() != $post_type) 
        return $the_list_original;

    $categories = get_the_terms(get_the_ID(), $tax); 

    $the_list = ""; 
    $cat_names = array(); 
    $cat_descriptions = array(); 

    if (!empty($categories)) { 
        foreach ((array)$categories as $category) { 
            $cat_names[] = sanitize_term_field('name', $category->name, $category->term_id, $tax, 'rss'); 
            $cat_descriptions[] = sanitize_term_field('description', $category->description, $category->term_id, $tax, 'rss'); 
        } 
    }

    $cat_names = array_unique($cat_names); 
    $cat_descriptions = array_unique($cat_descriptions);

    foreach ($cat_names as $cat_name) { 
        $the_list .= "\t\t<category domain=\"" . $tax . "\"><![CDATA[" . @html_entity_decode($cat_name, ENT_COMPAT, get_option('blog_charset')) . "]]></category>\n"; 
    }

    foreach ($cat_descriptions as $cat_description) { 
        $the_list .= "\t\t<wpq:category_description domain=\"" . $tax . "\"><![CDATA[" . @html_entity_decode($cat_description, ENT_COMPAT, get_option('blog_charset')) . "]]></wpq:category_description>\n"; 
    }

    return $the_list_original . $the_list; 
}

Пояснение кода:

  • Фильтры: Мы используем the_category_rss для модификации списка категорий, а rss2_ns (если нужно подключить пространства имен) — для добавления пользовательского элемента в RSS.
  • Проверка типа записи: Код проверяет, является ли текущий пост вашего пользовательского типа. Если нет, то возвращается оригинальный список.
  • Получение категорий: get_the_terms() используется для получения терминов таксономии для текущего поста.
  • Формирование списка: Проходит по всем категориям, добавляя их в итоговый список в формате RSS. Также добавляется описание для каждой категории.

Заключение:

После добавления этого кода, категории вашего пользовательского типа записи "announcements" должны корректно отображаться в RSS-ленте. Вы сможете использовать эту информацию при извлечении данных с помощью SimplePie на стороне клиента. Если возникнут дополнительные вопросы или потребуется помощь, не стесняйтесь обращаться.

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

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