• Здравствуйте!

    Есть сайт подкаста у которого два фида: все обновления сайта и только новые выпуски подкаста (фид категории).

    Как сделать так, чтобы только у заданной категории в фиде были все посты, а не только то кол-во, которое задано в Консоли->Чтение?

    Вот ссылки, которые читал, но не помогли:
    http://codex.wordpress.org/Customizing_Feeds
    http://digwp.com/2012/10/customizing-wordpress-feeds/

    Вот что-то похожее, но вроде устаревшее:

    function feedFilter($query) {
    	if ($query->is_feed) {
    		$query->set('posts_per_page','-1');
    	}
    
    	return $query;
    }
    add_filter('pre_get_posts','feedFilter');

    Не могу понять, как правильно к этому добавить проверку категории?

    Спасибо!

Просмотр 5 ответов — с 1 по 5 (всего 5)
  • Попробуйте is_category. Если не сработает, придется детально смотреть query_vars для этого фида.

    Спасибо. is_category я пробовал, не сработало. Но я решил проблему по-другому, с помощью Custom Template, а не functions.php. Метод описан здесь: http://digwp.com/2011/08/custom-feeds/

    Создается шаблон для страницы, примерно с таким содержанием:

    <?php
    /*
    Template Name: Article Feed
    */
    $numposts = 10; // number of posts in feed
    $posts = query_posts('showposts='.$numposts.'&cat=3');
    $more = 1;
    
    header('Content-Type: '.feed_content_type('rss-http').'; charset='.get_option('blog_charset'), true);
    echo '<?xml version="1.0" encoding="'.get_option('blog_charset').'"?'.'>';
    ?>
    
    <rss version="2.0"
    	xmlns:content="http://purl.org/rss/1.0/modules/content/"
    	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
    	xmlns:dc="http://purl.org/dc/elements/1.1/"
    	xmlns:atom="http://www.w3.org/2005/Atom"
    	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
    	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
    	<?php do_action('rss2_ns'); ?>
    >
    <channel>
    	<title><?php bloginfo_rss('name'); wp_title_rss(); ?> - Article Feed</title>
    	<atom:link href="<?php self_link(); ?>" rel="self" type="application/rss+xml" />
    	<link><?php bloginfo_rss('url') ?></link>
    	<description><?php bloginfo_rss("description") ?></description>
    	<lastBuildDate><?php echo mysql2date('D, d M Y H:i:s +0000', get_lastpostmodified('GMT'), false); ?></lastBuildDate>
    	<?php the_generator( 'rss2' ); ?>
    	<language><?php echo get_option('rss_language'); ?></language>
    	<sy:updatePeriod><?php echo apply_filters( 'rss_update_period', 'hourly' ); ?></sy:updatePeriod>
    	<sy:updateFrequency><?php echo apply_filters( 'rss_update_frequency', '1' ); ?></sy:updateFrequency>
    	<?php do_action('rss2_head'); ?>
    	<?php while( have_posts()) : the_post(); ?>
    
    	<item>
    		<title><?php the_title_rss(); ?></title>
    		<link><?php the_permalink_rss(); ?></link>
    		<comments><?php comments_link(); ?></comments>
    		<pubDate><?php echo mysql2date('D, d M Y H:i:s +0000', get_post_time('Y-m-d H:i:s', true), false); ?></pubDate>
    		<dc:creator><?php the_author(); ?></dc:creator>
    <?php the_category_rss(); ?>
    		<guid isPermaLink="false"><?php the_guid(); ?></guid>
    <?php if (get_option('rss_use_excerpt')) : ?>
    
    		<description><![CDATA[<?php the_excerpt_rss() ?>]]></description>
    <?php else : ?>
    
    		<description><![CDATA[<?php the_excerpt_rss() ?>]]></description>
    	<?php if ( strlen( $post->post_content ) > 0 ) : ?>
    
    		<content:encoded><![CDATA[<?php the_content() ?>]]></content:encoded>
    	<?php else : ?>
    
    		<content:encoded><![CDATA[<?php the_excerpt_rss() ?>]]></content:encoded>
    	<?php endif; ?>
    <?php endif; ?>
    
    		<wfw:commentRss><?php echo get_post_comments_feed_link(); ?></wfw:commentRss>
    		<slash:comments><?php echo get_comments_number(); ?></slash:comments>
    <?php rss_enclosure(); ?>
    <?php do_action('rss2_item'); ?>
    
    	</item>
    	<?php endwhile; ?>
    
    </channel>
    </rss>

    Я только поменял это:

    $numposts = -1; // number of posts in feed
    $posts = query_posts('showposts='.$numposts.'&category_name=episode');

    Еще я подредактировать сам фид, чтобы файл был не такой тяжелый с сотней и более подкастов.

    Заинтересовался задачей, может я неправильно понял условие, но вот пример:

    function wikicms_remove_feed_limits( $limits ) {
    
      if ( is_category('1') && is_feed() )
        return "";
    
      return $limits;
    }
    add_filter( 'post_limits', 'wikicms_remove_feed_limits' );

    Описание:
    В настройках стоит ограничения фида для всех категорий (например = 5). Я применяю этот скрипт к категории с ID=1, для нее ограничение снимается, то бишь в фид выдается всё.

    wikicms, ха, скорее всего сработает, я уже где-то видел этот вариант решения. Но решил попробовать с кастомным шаблоном и получилось.

    я уже где-то видел этот вариант решения.

    Я оттолкнулся от официальной документации..

Просмотр 5 ответов — с 1 по 5 (всего 5)
  • Тема «Увеличить количество постов для одной категории» закрыта для новых ответов.