Kategoriler için ayrı rss özet akışı giriş uzunluğu?


9

Ben wp bir kategoriden rss2 besleme almak için biliyorum, yani /feedkategori adının arkasına ekleyerek . Ancak bunu yaptığımda, bu beslemedeki tüm girdiler rss'e dahil değildir, bunun nedeni, yönetici kısıtlamasında besleme kısıtlamasını 50 olarak ayarlamamdır.

Her kategori / yem için programlı olarak bir besleme uzunluğunun ayrı ayrı ayarlanıp ayarlanamayacağını bilmek istiyorum.

Yayınların boyutu için herhangi bir api ayarı bulamadım ... herhangi bir yardım burada açığız.

Yardımın için teşekkürler.


Stephen Harris ve CodeMonkey cevapların ikisi de belirli bir kategori için işe yaramıyor mu? Aksi takdirde her iki cevap işi benim için işe yarar! Neden sadece bir kategori için işe yaramıyor olabilir?
mahatmanich

Yanıtlar:


8

Sen gerektiğini kullanabilmek için pre_get_postsve set posts_per_page(kategoriler için yem olmaktan) koşullu olarak 50. Maalesef bu çözülmemiş trac bileti var .

Tek çözüm, doğrudan SQL sorgusunun bir parçası içine kanca yapmak post_limitsve değiştirmektir LIMIT.

add_action('post_limits','wpse71759_category_rss_limit',10,2);
function wpse71759_category_rss_limit($limit, $query){

     if( $query->is_feed() && $query->is_category() ){
          $paged =  $query->get('paged') ? (int) $query->get('paged') : 1;
          $per_page = 50;
          $page_start = ($paged-1)*$per_page;

          return "LIMIT $page_start, $per_page";
     }
     return $limit;
}

Hey Stephen buna bakacağım, uhm aslında her zaman bir feed'deki bir kategoriden tüm girişleri istiyorum ve sadece blog sayfamda arka uçta belirlediğim sınırlamanın bir kısıtlamasını istiyorum, bunu nasıl yaparım?
mahatmanich

Bu durumda, return "";yerine "LIMIT $page_start, $per_page"yapmak gerekir.
Stephen Harris

Hey kodunu biraz açıklayabilir misin? Burada sunduğunuz şeylerin bu olup olmadığından emin değilim.
mahatmanich

Dolayısıyla kategori feed'leri için tüm yayınları iade etmek istersiniz - böylece LIMITsorgunuza bir parça istemezsiniz . Yukarıdaki filtre, LIMITparçayı boş bir dize ile değiştirmenize izin verir , böylece ortaya çıkan sql tüm yayınları alır.
Stephen Harris


2
add_filter('query', 'sql_query_feed_filter');
function sql_query_feed_filter($sql){
    global $wp_query;

    if ($wp_query->is_feed == true &&  isset($wp_query->query_vars['custom_taxonomy']) &&  in_array($wp_query->query_vars['custom_taxonomy'], array('slug1','slug2')) ){
        if (strpos($sql, 'SELECT SQL_CALC_FOUND_ROWS') !== false){
            list($sql,) = explode('LIMIT', $sql);
        }
    }
    return $sql;
}

yapmanız gereken tek şey bu işlevi düzenlemek ve sınıflandırmayı kategori sınıflandırmanıza göre yeniden düzenlemek ve slug'u kategorinize göre düzenlemek ...


Kodunuzu açıklamak ister misiniz?
mahatmanich

Belirli bir sınıflandırma bulunursa ($ wp_query-> query_vars [örnekte 'custom_taxonomy'] custom_taxonomy) ve bazı slug'a eşdeğerse ($ wp_query-> is_feed == true) basit SQL Sorgu filtresi ['custom_taxonomy'] == 'bilgi'). bunların her şey gerçekleşirse ve doğruysa (bir site.com/your-custom-feed-for-category.xml) feed'inizde hiçbir sınır sonuç elde edemezsiniz ($ SQL ifadesi, LIMIT değerine bölünerek son LIMIT değerine geri döndüğü anlamına gelir operatörü ... sınır yok. her girişe tüm girişler.)
Oleg Butuzov

Bu kodu nereye bırakırım? benim temamda function.php?
mahatmanich

function.php mükemmel uyum sağlar. ancak daha önce özel sınıflandırma bilgisini ve adını değiştirin. ve test etmeden önce tarayıcı önbelleğini temizle (RSS Tarayıcı tarafından önbelleğe alınmış bir beslemeyi).
Oleg Butuzov

Hey, önbellekle ilgili kafa kafaları için teşekkürler! Bu tür işler, ama yine de en az bir kategoride yemdeki tüm mesajları alamayacağım, diğerleri üzerinde çalışıyor ...
mahatmanich
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.