Comprimento de entrada de feed RSS individual para categorias?


9

Eu sei como recuperar o feed RSS2 de uma categoria no wp, ou seja, adicionando /feedatrás do nome da categoria. No entanto, quando faço isso, nem todas as entradas desse feed são incluídas no rss, porque eu defini a restrição de feed como 50 no back-end do administrador.

Gostaria de saber se um comprimento de feed pode ser definido individualmente para cada categoria / feed de forma programática.

Não foi possível encontrar nenhuma configuração da API para o tamanho dos feeds ... qualquer ajuda é bem-vinda aqui.

Obrigado pela ajuda.


Stephen Harris e CodeMonkey, as respostas não funcionam para uma categoria específica? Caso contrário, ambas as respostas funcionam funcionam para mim! Por que pode não funcionar apenas para uma categoria?
mahatmanich

Respostas:


8

Você deve poder usar pre_get_postse definir o valor posts_per_page50 condicionalmente (ao ser feed para categorias). Infelizmente, existe este bilhete trac não resolvido .

A única solução alternativa é conectar post_limitse substituir LIMITdiretamente a parte da consulta 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;
}

Ei, Stephen, examinarei isso. Na verdade, sempre quero todas as entradas de uma categoria em um feed, e somente na página do meu blog quero uma restrição do limite que estabeleci no back-end, como eu faria isso?
mahatmanich

Nesse caso, em return "";vez de "LIMIT $page_start, $per_page"fazê-lo.
Stephen Harris

Ei, você pode explicar um pouco o seu código? Não tenho muita certeza se é isso que quero o que você está oferecendo aqui.
mahatmanich

Portanto, para feeds de categoria, você deseja retornar todas as postagens, para que não queira fazer LIMITparte da sua consulta. O filtro acima permite substituir a LIMITpeça por uma sequência em branco, para que o sql resultante busque todas as postagens.
Stephen Harris

11
Sim, mas eu recomendo fazer um plug-in de fora ( 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;
}

tudo o que você precisa fazer é apenas editar esta função e repalificar a taxonomia pela taxonomia da categoria e editar a lesma em grande parte da sua categoria ...


Você gostaria de explicar seu código?
mahatmanich

Filtro de consulta SQL simples que é acionado no feed ($ wp_query-> is_feed == true) se for encontrada taxonomia específica ($ wp_query-> query_vars ['custom_taxonomy'] custom_taxonomy no exemplo) e se for equivalente a alguma lesma ($ wp_query-> query_vars ['custom_taxonomy'] == 'lesma'). se tudo isso acontecer e for verdadeiro (em um site.com/seu-alimentação-personalizada-de-categoria.xml), você não obterá resultados limitados no seu feed (declaração $ SQL dividida pelo valor LIMIT, o que significa que ele retornou sem o último LIMIT operador ... sem limite. todas as entradas por rss.)
Oleg Butuzov 15/11/2012

Onde eu largaria esse código? functions.php do meu tema?
mahatmanich

functions.php se encaixa perfeitamente. mas mude slug e nome da taxonomia personalizada antes. e limpe o cache do navegador antes do teste (o RSS alimenta um cache pelo navegador).
Oleg Butuzov

Ei, obrigado pelo aviso com o cache! Funciona meio que, mas ainda em pelo menos uma categoria não recebo todas as postagens no feed, em outras funciona ...
mahatmanich
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.