Вопрос или проблема
Проблема:
У меня есть пользовательский тип записи “объявления” и пользовательская таксономия “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.
Вот шаги, которые нужно выполнить:
- Откройте файл
functions.php
вашей активной темы. - Добавьте следующий код, чтобы подключить необходимые фильтры и показать таксономию в 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 на стороне клиента. Если возникнут дополнительные вопросы или потребуется помощь, не стесняйтесь обращаться.