• Resolvido junior1982

    (@junior1982)


    Olá, na página category.php, tenho seguinte código:

    <?php get_header (); ?>
    <div id="corpo">
    <div class="titulo_categorias">
    <?php
    echo "Categoria: ";
    single_cat_title('');
     ?>
    </div>
    
    <?php
        if (have_posts()) : while (have_posts()) : the_post();
    ?>
    
    <div id="caixa-materias">
    <div class="thumbnail"><?php the_post_thumbnail('post-thumbnail',array('class'=>'img-responsive')); ?></div>
    <a>"><h1><?php the_title(); ?></h1></a>
    <span class="publicado-por">Publicado por <?php the_author (); ?> em: <?php the_date("d/m/Y"); ?></span>
    
    <?php the_excerpt(); ?>
    
    <a>"><span class="leia_mais">Leia Mais</span></a>
    
    </div>
    
    <?php
        endwhile;
    	else:
    ?>
    
    <p>Nenhuma postagem encontrada para esta categoria</p>
    <?php
        endif;
    ?>

    Eu gostaria que para a categoria “hospedagem” (somente para esta), fosse alterado a quantidade de postagem mostradas na página category.php… no painel de controle do WordPress configurei para 8 para o geral, mas para a categoria “hospedagem” gostaria que aparecesse 20.

Visualizando 11 respostas - 1 até 11 (de um total de 11)
  • Moderador Leo Baiano

    (@leobaiano)

    Para isso você vai utilizar a action pre_get_posts com ela você consegue alterar o loop padrão do WordPress. Veja um exemplo aqui: https://codex.wordpress.org/Plugin_API/Action_Reference/pre_get_posts#Changing_the_number_of_posts_per_page.2C_by_post_type

    Criador do tópico junior1982

    (@junior1982)

    Desculpe, Leo Baiano, mas sou novato em WordPress 🙁

    Vi este link que tu sugeriu, mas ainda estou com dificuldades… neste caso estas alterações são feitas somente no arquivo functions.php, certo?

    Tentei desta forma:

    inclui o código de exemplo que tem neste link que tu sugeriu no arquivo functions.php do meu tema, chamei no código o nome da categoria a qual eu quero alterar a quantidade de postagens, mas nada aconteceu. Continua aparecendo 8 postagens conforme a configuração geral.

    junior, pode colocar aqui como ficou o código que você inseriu no seu functions?

    Criador do tópico junior1982

    (@junior1982)

    Do código exemplo, que tem no link que o Leo Baiano sugeriu, só alterei mesmo o nome da categoria e a quantidade de posts para esta categoria. Ficou assim:

    <?php
    function hwl_home_pagesize( $query ) {
        if ( is_admin() || ! $query->is_main_query() )
            return;
    
        if ( is_home() ) {
            $query->set( 'posts_per_page', 1 );
            return;
        }
    
        if ( is_post_type_archive( 'Hospedagem' ) ) {
            $query->set( 'posts_per_page', 20 );
            return;
        }
    }
    add_action( 'pre_get_posts', 'hwl_home_pagesize', 1 );
    ?>

    Categoria ‘Hospedagem’
    Quantidade de posts 20

    Moderador Leo Baiano

    (@leobaiano)

    Junior, não houve efeito porque, assim como você mesmo disse, o código do link que mandei era um exemplo, naquele link tem a documentação da action pre_get_posts para você entender como ela funciona, tem alguns exemplos para facilitar sua vida, mas não é simplesmente copiar e colar o código que já estará funcionando.

    Veja só, vamos ver se te ajudo, quando você acessa uma URL de um site WordPress o script monta uma query padrão, uma query padrão nada mais é do que instruções sobre o conteúdo que será exibido na página. Essa query padrão é montada com base nas configurações que você fez no painel administrativo, por exemplo, no seu caso está aparecendo 8 posts porque você deve ter configurado isso lá no painel administrativo do WordPress, ok?

    Exemplificando… quando você acessa a página seusite.com.br/category/hospedagem o WP monta uma query padrão, com base nas configurações do WP e na URL, então neste caso ele vai trazer 8 posts (por causa da configuração) da categoria hospedagem (por causa da URL) .

    Espero que tenha entendido até aqui.

    Onde a pre_get_posts entra?

    A action pre_get_posts permite que você faça modificações na query padrão antes do WordPress buscar o conteúdo no banco para exibir na tela. Em outras palavras utilizando a action pre_get_posts eu consigo dizer para o WordPress para trazer apenas 5 posts, ao invés de 8, quando a categoria acessada for a hospedagem, que é exatamente o que você precisa.

    Porém é preciso mexer com cuidado neste filtro porque ele age na query padrão de todo o site, ou seja, você precisa garantir que as alterações que está fazendo só vão acontecer onde você deseja e no resto do site, inclusive no painel administrativo, tudo vai continuar seguindo o padrão.

    Por exemplo, veja o código abaixo:

    function hwl_home_pagesize( $query ) {
            $query->set( 'posts_per_page', 5 );
            return;
    }
    add_action( 'pre_get_posts', 'hwl_home_pagesize', 1 );

    Nele eu estou dizendo que o posts_per_page deve ser igual a 5 em todas as querys padrões do WordPress, ou seja, quando você acessa a página administrativa que mostra os posts para editar o WP só irá trazer 5 posts, mas o que eu queria era mudar a quantidade apenas na home, não no painel admin, então o que eu faço???

    function hwl_home_pagesize( $query ) {
        if ( is_admin() || ! $query->is_main_query() )
            return;
    
        if ( is_home() ) {
            $query->set( 'posts_per_page', 5 );
            return;
        }
    }
    add_action( 'pre_get_posts', 'hwl_home_pagesize', 1 );

    No primeiro bloco de código eu faço um if ( is_admin() || ! $query->is_main_query() ) return;, traduzindo, se for o painel administrativo ou se não for a query principal do WordPress não faça nada, simplesmente apresente o resultado da forma que o WP montou.

    No segundo bloco de código eu faço mais um if e dessa vez estou dizendo Se estiver na home altere a quantidade de posts para 5 e retorne..

    Espero que tenha entendido até aqui, se tiver dúvidas pergunte, mas não te darei o código pronto.

    O que você precisa fazer é:

    1 – Verificar se é o painel administrativo ou se não é a query padrão;

    2 – Verificar se é a categoria hospedagem e caso sim alterar a quantidade de posts.

    Nos exemplos que dei na minha explicação você tem tudo que precisa, é só tentar entender o conceito que saberá o que precisa alterar, se tiver dúvidas sobre qual função usar para algo é só falar.

    Bom trabalho amigo e conte comigo.

    Bom, o Leo deu uma explicação sensacional.

    Se depois que tentar ai ainda tiver dúvidas pode postar ai que também ajudo.

    Moderador Leo Baiano

    (@leobaiano)

    Junior man, você nem tentou entender como a parada funciona man, simplesmente mudou onde tinha a palavra movie por Hospedagem e espera mesmo que funcione? Se funcionasse seria pura sorte man, não seria melhor tentar aprender?

    Você mudou aqui is_post_type_archive( 'Hospedagem' ) certo? Você sabe para que serve a função is_post_type_archive? Se tivesse pesquisado no google encontraria como primeiro resultado a documentação dela no WordPress e lá veria que ela serve para

    Checks if the query is for an archive page of a given post type(s).

    Verifica se a consulta é para uma página de arquivos de um TIPO DE POST.

    Porém, no seu caso, HOSPEDAGEM não é um tipo de post, então essa função, da forma que você deixou, sempre vai retornar false, nunca vai entrar no IF e nunca vai definir a quantidade de posts como 20. No seu caso HOSPEDAGEM é uma categoria, certo? O que você precisa é checar se está na página de arquivos da categoria hospedagem, correto?

    O que você precisa me perguntar agora?

    Criador do tópico junior1982

    (@junior1982)

    Valew, Leo, mais explicado que isto impossível! Vou debruçar em cima dessas explicações para entender melhor! 🙂

    Moderador Leo Baiano

    (@leobaiano)

    Um exemplo que te passei é quase o que você quer, a unica diferença é que o exemplo verifica se está em um CPT e você precisa verificar se está em uma categoria, segue nessa linha que você consegue e qualquer dúvida vem por aqui que é nós!

    Criador do tópico junior1982

    (@junior1982)

    Valew Leo, demorei, mas consegui! hehe Obrigado a todos que comentaram sobre a minha dúvida! 🙂

    Moderador Leo Baiano

    (@leobaiano)

    junior1982 fala pra gente aqui qual foi a sua solução, assim fica registrado e ajuda outras pessoas no futuro.

Visualizando 11 respostas - 1 até 11 (de um total de 11)
  • O tópico ‘Quantidade de postagem para uma determinada categoria.’ está fechado para novas respostas.