Использование форматов постов является отличным способом для задания различного оформления. Однако не всегда отправка постов всех форматов в RSS является оправданным: некоторые блоггеры исключают короткие заметки, цитаты или статусы из фида. Я уже описывал способ исключения постов определенных категорий из RSS, давайте теперь посмотрим, как из RSS исключить посты определенных форматов.
Для исключения из RSS постов определенного формата добавьте в файл functions.php используемой вами темы следующий код:
if ( $wp_query->is_feed() ) { $post_formats_to_exclude = array( 'post-format-ФОРМАТ' ); $extra_tax_query = array( 'taxonomy' => 'post_format', 'field' => 'slug', 'terms' => $post_formats_to_exclude, 'operator' => 'NOT IN' ); $tax_query = $wp_query->get( 'tax_query' ); if ( is_array( $tax_query ) ) { $tax_query = $tax_query + $extra_tax_query; } else { $tax_query = array( $extra_tax_query ); } $wp_query->set( 'tax_query', $tax_query ); } } add_action( 'pre_get_posts', 'exclude_post_formats_from_feeds' );
В этом коде ФОРМАТ – это текстовый ярлык формата поста (aside/gallery/link/image/quote/status/video/audio/chat). Подробнее о форматах постов: Форматы постов и вывод на главной странице постов определенного формата.
Если нужно исключить из RSS посты нескольких форматов, то используйте этот код:
if ( $wp_query->is_feed() ) { $post_formats_to_exclude = array( 'post-format-ФОРМАТ', 'post-format-ФОРМАТ', 'post-format-ФОРМАТ' ); $extra_tax_query = array( 'taxonomy' => 'post_format', 'field' => 'slug', 'terms' => $post_formats_to_exclude, 'operator' => 'NOT IN' ); $tax_query = $wp_query->get( 'tax_query' ); if ( is_array( $tax_query ) ) { $tax_query = $tax_query + $extra_tax_query; } else { $tax_query = array( $extra_tax_query ); } $wp_query->set( 'tax_query', $tax_query ); } } add_action( 'pre_get_posts', 'exclude_post_formats_from_feeds' );
Например, код для исключения из RSS постов форматов статус (status), цитата (quote), ссылка (link) и заметка (aside), выглядит так:
if ( $wp_query->is_feed() ) { $post_formats_to_exclude = array( 'post-format-status', 'post-format-quote', 'post-format-link', 'post-format-aside' ); $extra_tax_query = array( 'taxonomy' => 'post_format', 'field' => 'slug', 'terms' => $post_formats_to_exclude, 'operator' => 'NOT IN' ); $tax_query = $wp_query->get( 'tax_query' ); if ( is_array( $tax_query ) ) { $tax_query = $tax_query + $extra_tax_query; } else { $tax_query = array( $extra_tax_query ); } $wp_query->set( 'tax_query', $tax_query ); } } add_action( 'pre_get_posts', 'exclude_post_formats_from_feeds' );
