Allterando a quantidade de posts por página

WordPress
WordPress
Compartilhe

Aprenda a alterar a quantidade de posts por página que será listado pelo WordPress sem modificar a configuração de listagem padrão para posts na página de configurações.

O WordPress como é uma ferramenta para Blogs, possui apenas uma opção para configurar a quantidade de posts a serem listados na página. Mas quando se esta utilizando ele como ferramenta CMS, normalmente precisamos que em algumas seções a página liste uma quantidade diferente de posts.

Uma forma de conseguir isso seria realizando uma nova consulta ao banco de dados utilizando a função query_posts(). Porém este é  um método incorreto pois com ele você estaria executando duas consultas para o mesmo conteúdo, a primeira que o próprio WordPress já faz quanto busca o conteúdo do link e a segunda que você esta realizando novamente na página.

O correto para estes casos é alterar a consulta realizada pelo WordPress e inserir nela a quantidade de posts que quer obter. Isto é feito através do Hook pre_get_posts e deve ser definido no arquivo functions.php do seu tema como mostra o código abaixo.

// Função para trabalhar com o Hook pre_get_posts
function my_pre_get_posts($args) {

    // Não executamos nada se estamos na administração ou fora da query padrão do WP
    if(is_admin() || !$args->is_main_query())
        return $args;

    // A página corrente é a que queremos atingir?
    if(is_post_type_archive('produtos')) {

        // Alteramos a quantidade de posts por página
        $args->query_vars['posts_per_page'] = 20;

    }

    // Retornando os argumentos da query
    return $args;
}

// Conectando nossa função com o Hook pre_get_posts
add_action('pre_get_posts', 'my_pre_get_posts');

Para alterarmos a quantidade de posts em apenas uma página do site, precisamos saber quando esta página esta sendo executada já que este Hook é chamado em todo acesso do WordPress. Para isto checamos primeiramente se não estamos na área administrativa, checamos se a query corrente é a query chamada pelo WordPress e não uma chamada do tema, depois checamos se a página corrente corresponde a página que queremos interceptar a consulta. Neste exemplo verificamos se a página corrente é do tipo de tema Archive e do Post Type Produtos, ou seja, a página do tipo de conteúdo Produtos que irá listar os produtos. Poderiam ser outras como is_category(), is_tag(), is_archive(), ou qualquer outra checagem que retorne se estamos realmente no local correto para alterar a consulta.

Esta mesma função conectada a este Hook pode ser utilizada para diversas outras tarefas onde seja necessário fazer com que o WordPress ao retornar os dados de uma página os retorne de alguma maneira diferente do padrão, seja a quantidade de páginas, sua ordem, ou qualquer outro item da query, até mesmo realizar uma consulta totalmente nova.

03 10 2013

Comentários

comments powered by Disqus