Как не обрабатывать категории как теги в фидах

В основном мы (ab) используем Категория, чтобы определить, является ли сообщение новостным сообщением или записью в блоге, и поэтому это не категория в традиционном смысле для внешнего мира. Я бы хотел, чтобы категория не была проиндексирована корневыми считывателями / искателями, а только тегами.

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

Есть ли способ сделать это без изменения ядра? (В частности, get_the_category_rss в wp-includes/feed.php )

EDIT: Я имею в виду конкретно, чтобы не перечислить категорию в фиде. Например, вот какая часть текущего RSS-канала выглядит так:

 <category><![CDATA[blog]]></category> <category><![CDATA[test]]></category> <category><![CDATA[testing]]></category> <category><![CDATA[yeah!]]></category> 

«блог» – это категория WordPress, а «тест», «тестирование» и «да!». являются тегами WordPress.

Я хочу исключить запись <category><![CDATA[blog]]></category> целиком из фида. То же самое относится к каналам Atom и любым другим.

Solutions Collecting From Web of "Как не обрабатывать категории как теги в фидах"

Tricky. Он объединяет категории и теги вместе довольно хорошо. Если бы пара подходов здесь была наименее запутанной:

 add_filter('the_category_rss', 'remove_rss_categories'); function remove_rss_categories( $the_list ) { $categories = get_the_category(); foreach ($categories as $category) $the_list = str_replace("<category><![CDATA[{$category->name}]]></category>", '', $the_list); return $the_list; } 

@Rarst получил меня на правильном пути. Я модифицировал его для работы со всеми типами фидов с некоторыми копиями / вставкой / модификацией из точного кода, используемого в ядре WP, чтобы убедиться, что экранирование выполняется таким же образом и т. Д.

Пожалуйста, дайте @Rarst + 1, так как это действительно его решение. Просто опубликуйте это как более полное решение. Я добавил это в файл function.php моей темы, и он сделал трюк.

Обратите внимание, что это может сломаться в будущем, если WP изменяет формат фидов. Это работает с WP 3.0

 add_filter('the_category_rss', 'remove_rss_categories', 10, 2); function remove_rss_categories( $the_list, $type ) { if ( empty($type) ) $type = get_default_feed(); $categories = get_the_category(); $cat_names = array(); $filter = 'rss'; if ( 'atom' == $type ) $filter = 'raw'; if ( !empty($categories) ) foreach ( (array) $categories as $category ) { $cat_names[] = sanitize_term_field('name', $category->name, $category->term_id, 'category', $filter); } $cat_names = array_unique($cat_names); foreach ($cat_names as $cat_name) { if ( 'rdf' == $type ) $the_list .= str_replace("\t\t<dc:subject><![CDATA[$cat_name]]></dc:subject>\n", '', $the_list); elseif ( 'atom' == $type ) $the_list .= str_replace(sprintf( '<category scheme="%1$s" term="%2$s" />', esc_attr( apply_filters( 'get_bloginfo_rss', get_bloginfo( 'url' ) ) ), esc_attr( $cat_name ) ), '', $the_list); else $the_list = str_replace("\t\t<category><![CDATA[" . @html_entity_decode( $cat_name, ENT_COMPAT, get_option('blog_charset') ) . "]]></category>\n", '', $the_list); } return $the_list; }