Mostrar um número diferente de postagens por página, dependendo do contexto (por exemplo, página inicial, pesquisa, arquivo)


21

Nas Configurações de leitura, há um local para definir o número de postagens mostradas que afeta o número de postagens exibidas em todos os contextos. Em vez disso, gostaria de mostrar um certo número de postagens na página inicial e um número diferente de postagens em páginas como arquivo, resultados de pesquisa etc.

ler-configurações-blog-páginas-mostrar-no-máximo-por-página

Sei que posso fazer isso editando os arquivos de tema e alterando os parâmetros de consulta, mas prefiro ter acesso mais fácil a uma página de configurações simples. Há muito tempo, deparei-me com um plugin que fazia isso, mas não consigo localizá-lo agora.

Alguém sabe de um plugin para fazer isso, ou mesmo uma função que eu poderia colocar em functions.php para realizar a mesma coisa?


Você provavelmente estava pensando no plugin 'Posts diferentes por página' do chip-bennett: chipbennett.net/plugins/cbnet-different-posts-per-page, que faz o que você deseja de maneira gráfica.
Tom Auger

Respostas:


23

Acredito que a melhor maneira de fazer isso em um plug-in é executar a seguinte função de exemplo quando o pre_get_postsgancho de ação for encontrado. O $wp_queryobjeto está disponível, o que significa que suas tags condicionais estão disponíveis, mas antes que o WordPress obtenha as postagens, o que significa que você está alterando os vars de consulta antes da execução da primeira consulta, em vez de adicionar uma segunda consulta, como quando query_posts () é usado em um tema Arquivo.

function custom_posts_per_page($query) {
    if (is_home()) {
        $query->set('posts_per_page', 8);
    }
    if (is_search()) {
        $query->set('posts_per_page', -1);
    }
    if (is_archive()) {
        $query->set('posts_per_page', 25);
    } //endif
} //function

//this adds the function above to the 'pre_get_posts' action     
add_action('pre_get_posts', 'custom_posts_per_page');

Eu uso essa função no meu próprio site. Foi fácil recortar e colar aqui para você.
Kevtrout 12/08/10

0

você pode fazer um loop personalizado usando query_posts e especificar o número de postagens de is_home, is_archive etc.

apenas uma instrução if simples, juntamente com query_posts


Sim, eu mencionei isso na minha pergunta. Estou procurando uma maneira de fazer isso, para não precisar editar vários arquivos de tema para alterar as configurações. Obrigado.
Doug

1
É uma péssima idéia fazer dessa maneira. O WordPress já executa a consulta. Se você inserir query_postsseu tema, ignorará a consulta original e fará outra redundante.
Krzysiek Dróżdż

-1

Para adicionar a esta pergunta. Alguém sabe como determinar post_per_page para esta função function custom_posts_per_page ($ query) se adicionar a nova página ao index.php assim:

<?php
if ($_GET['new'] == 1) 
{
    include ( TEMPLATEPATH . '/newpage.php' );
    exit;
}
?>

-1

Sei que posso fazer isso editando os arquivos de temas e alterando os parâmetros de consulta, mas prefiro ter acesso mais fácil a uma página de configurações simples.

No interesse da integridade, descobri que query_postscombinado com $query_stringconcatenação funciona bem.

Coloquei esse código index.php(meu tema não tem category.php) ...

<?php 
if (!is_front_page()) { 
    query_posts($query_string . "&posts_per_page=20"); 
}
?>

Obviamente, o que estamos fazendo aqui é modificar a string de consulta interna do loop, substituindo o número padrão de postagens por página .

É uma delícia fornecer uma lista menor de postagens na página inicial, onde estou mostrando postagens completas, e uma lista muito maior de postagens em qualquer outro lugar (categorias, por data, etc.), onde apenas mostro resumos de postagens.

No entanto, observe que, diferentemente da resposta aceita, a consulta será executada duas vezes , portanto, não é uma solução tão boa.


Jeff, eu estava procurando um local centralizado para controlar o número de postagens retornadas em diferentes contextos. Sua resposta só o faz se você usar o index.php para lidar com TODOS os contextos, o que a maioria dos temas não faz. Além de aumentar as chamadas para o banco de dados (o que afeta o desempenho), sua técnica também pode alterar a resposta às tags condicionais (por exemplo, is_home () ou is_front_page) de maneiras inesperadas. Por fim, se você deseja adicionar loops secundários a uma página, NÃO deve usar query_posts, mas use "new WP_Query" (ou get_posts).
Doug

@ Doug, este não é um loop secundário, está substituindo o loop principal - e sim, esse tema em particular usa index.php para renderizar tudo, é bastante minimalista. Eu senti que isso fazia mais sentido aqui como resposta, mas se você quiser, posso fazer minha própria pergunta e respondê-la se essa resposta o ofender de alguma forma.
91111 Jeff Atwood

Na verdade, eu li mal o penúltimo parágrafo e pensei que as listas "maiores" e "menores" estavam na mesma página, então minha última frase acima era irrelevante. E sim, é perfeitamente legítimo colocar todo o seu código em index.php, se quiser. E se for esse o caso, seu método é uma maneira rápida e fácil de fazer isso, então removerei meu voto negativo após o bloqueio de 20 horas. Mesmo assim, enviar uma nova consulta em vez de modificar a consulta original, como na resposta do kevtrout, é menos desejável pelos motivos já mencionados (por você, eu e o WP Codex).
Doug
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.