Indywidualna długość wpisu kanału RSS dla kategorii?

9

Wiem, jak odzyskać kanał rss2 z kategorii w wp, a mianowicie dodać /feednazwę kategorii. Jednak gdy to robię, nie wszystkie wpisy z tego kanału są uwzględnione w rss, ponieważ ustawiłem ograniczenie kanału na 50 na zapleczu administratora.

Chciałbym wiedzieć, czy długość kanału można ustawić indywidualnie dla każdej kategorii / kanału programowo.

Nie mogłem znaleźć żadnych ustawień interfejsu API dla rozmiaru kanałów ... każda pomoc jest tutaj mile widziana.

Dzięki za pomoc.

mahatmanich
źródło
Stephen Harris i CodeMonkey odpowiedzi nie działają dla jednej konkretnej kategorii? W przeciwnym razie obie odpowiedzi działają dla mnie! Dlaczego to możliwe, że nie działa tylko w przypadku jednej kategorii?
mahatmanich,

Odpowiedzi:

8

Państwo powinno być w stanie wykorzystać pre_get_postsi ustawić posts_per_pagedo 50 warunkowo (na bycie RSS dla kategorii). Niestety istnieje nierozwiązany bilet trac .

Jedynym obejściem jest bezpośrednie podłączenie post_limitsi zastąpienie LIMITczęści zapytania SQL.

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;
}
Stephen Harris
źródło
Hej Stephen Przyjrzę się temu, uhm właściwie zawsze chcę wszystkich wpisów z kategorii w kanale, i tylko na mojej stronie blogu chcę ograniczenia limitu, który ustawiłem w backendie, jak mam to zrobić?
mahatmanich,
W takim przypadku return "";zamiast "LIMIT $page_start, $per_page"tego zrobić.
Stephen Harris
Hej, możesz trochę wyjaśnić swój kod? Nie jestem do końca pewien, czy tego właśnie chcę zaoferować.
mahatmanich,
Tak więc dla kanałów kategorii chcesz zwrócić wszystkie posty - więc nie chcesz mieć LIMITczęści do zapytania. Powyższy filtr pozwala zastąpić LIMITczęść pustym łańcuchem, aby wynikowy sql pobierał wszystkie posty.
Stephen Harris
1
Tak, ale zaleciłbym zrobienie z niego wtyczki ( wpcandy.com/teaches/how-to-create-a-functionality-plugin )
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;
}

wszystko, co musisz zrobić, to po prostu edytować tę funkcję i odświeżyć taksonomię według taksonomii kategorii i edytować ślimak do większości kategorii ...

Oleg Butuzow
źródło
Czy chciałbyś wyjaśnić swój kod?
mahatmanich,
Prosty filtr zapytań SQL, który uruchamia się przy paszy ($ wp_query-> is_feed == true), jeśli znaleziono określoną taksonomię ($ wp_query-> query_vars ['custom_taxonomy'] custom_taxonomy w przykładzie) i jeśli jest wartościowy dla jakiegoś ślimaka ($ wp_query-> query_vars ['custom_taxonomy'] == 'ślimak'). jeśli wszystko to się wydarzy i prawda (na stronie.com/twoja-darmowa-feed-for-category.xml) nie uzyskasz żadnych wyników z limitem w swoim kanale ($ $ instrukcja podzielona przez wartość LIMIT, co oznacza, że ​​zwróciła bez ostatniego LIMITU operator ... bez limitu. wszystkie wpisy na rss.)
Oleg Butuzov
Gdzie mam upuścić ten kod? functions.php mojego motywu?
mahatmanich,
functions.php idealnie pasuje. ale wcześniej zmień ślimak i nazwę niestandardowej taksonomii. i wyczyść pamięć podręczną przeglądarki przed testowaniem (kanały RSS buforowane przez przeglądarkę).
Oleg Butuzov
Hej dzięki za heads-up z cache! To działa, ale nadal w co najmniej jednej kategorii nie otrzymam wszystkich postów w kanale, w innych działa ...
mahatmanich