Suporte » Ajustando o WordPress » Ajuda Wp_page navi

  • Resolvido RTCADMIN

    (@rtcadmin)


    Meu pagenavi so aparece 2 paginas nao importa quantos posts tenha,
    Exemplo se eu colocar 5 post por paginas, e tiver 15 pots, vai aparecer somente 2 paginas. meu codigo é esse:

    <?php  $eventos = new WP_Query( 
                                    array(
                                        'post_type' => 'eventos',
                                        'posts_per_page' => 4,
                                        'paged' => get_query_var('paged'),
                                        'meta_type' => 'datetime',
                                        'meta_key'  => 'dateevento',
                                        'orderby'    => 'meta_value',
                                        'order'     => 'DESC'
                                        
                                    )
                                );
               
                if ( have_posts() ) : while( $eventos->have_posts() ) : $eventos->the_post(); ?>     
                <?php get_template_part('partials/content', 'eventos'); ?>
                <?php endwhile; ?>
                <?php else: ?>
    	        <?php get_template_part('partials/content', 'noneevento'); ?>
                <?php endif; ?>
                <div class="clear"></div>
                <br>
                <div class="main-pagenavirb"><?php wp_pagenavi(); ?></div><br>
                          
Visualizando 13 respostas - 1 até 13 (de um total de 13)
  • Olá @rtcadmin,

    como você fez uma query a parte, acredito que para resolver o seu problema, você deve passar ela para dentro do pagenavi da seguinte forma:

    wp_pagenavi( array( 'query' => $eventos ) );

    Após fazer isso, é recomendado utilizar a seguinte função:

    wp_reset_postdata();

    para evitar problemas em outras queries no decorrer do seu código.

    • Esta resposta foi modificada 3 anos, 6 meses atrás por Mario Valney.

    Olá @darthaud
    Eu tentei fazer da forma que você disse, mas continua a mesma coisa, ele so gera 2 paginas, não mais que isso.. se tiver 20 post, e eu colocar 1 post por pagina, so é exibido 2 paginas..

    Agradeço pela ajuda! @darthaud

    <?php  
        
        $eventos = new WP_Query( 
                                    array(
                                        'post_type' => 'eventos',
                                        'posts_per_page' => 3,
                                        'paged' => get_query_var('paged'),
                                        'meta_type' => 'datetime',
                                        'meta_key'  => 'dateevento',
                                        'orderby'    => 'meta_value',
                                        'order'     => 'DESC'
                                        
                                    )
                                );
               
                if ( have_posts() ) : while( $eventos->have_posts() ) : $eventos->the_post(); ?>     
                <?php get_template_part('partials/content', 'eventos'); ?>
                <?php endwhile; ?>
                <?php else: ?>
    	        <?php get_template_part('partials/content', 'noneevento'); ?>
                <?php endif; ?>
                <div class="clear"></div>
                <br>
                <div class="main-pagenavirb"><?php wp_pagenavi(array( query => $eventos ));  ?> <?php wp_reset_postdata(); ?></div><br>
                          
                
                </div>

    Talvez possa ser algum erro no meu loop, porque o loop normal do blog ele funciona certo o pagenavi, agora com o loop do post type ele da esse erro,

    esse é o cod do meu loop main

    <?php if ( have_posts() ) : while( have_posts() ) : the_post(); ?>
    	<?php if ( ! get_post_format() ) : ?>
    		<?php get_template_part('partials/content', 'default');  ?>
    	<?php else: ?>
    		<?php get_template_part('partials/content', get_post_format() );  ?>
    	<?php endif; ?>
    
    <?php endwhile; ?>
    
    <?php else: ?>
    
    	<?php get_template_part('partials/content', 'none'); ?>
    
    <?php endif; ?>
    
    <!-- page-navigation -->
    <div class="clear"></div>
                          <br>
                          <div class="main-pagenavirb"> <?php wp_pagenavi(); ?> </div>
                
                </div>
                <br>
                <br><br>
    
    <!--ENDS page-navigation -->

    Com o wp_pagenavi( array( ‘query’ => $eventos ) ); ele apareceu todas as paginas, mas quando eu coloco na pagina 3, ele diz que nao tem post.

    Uma coisa do seu código original, que me parece errado, é que você no if have_posts está pegando da main query

    if ( have_posts() )

    e deveria estar pegando também da sua custom query não?.

    $eventos->have_posts()

    Mas não acho que seja isso que está afetando o seu loop e sua paginação.

    O outro erro que você citou acima, esse sim, pode ser causado pelo if errado 🙂

    • Esta resposta foi modificada 3 anos, 6 meses atrás por darthaud.
    • Esta resposta foi modificada 3 anos, 6 meses atrás por darthaud.

    @darthaud Arrumei o if aqui, mas ainda continua a mesma coisa, uma coisa que notei é que ate a segunda pagina, ele puxa pelo post type eventos, quando clico na terceira pagina ele puxa pelo index, o loop do eventos ta no arquivo archive-eventos, ai ate a segunda pagina ele puxa por ai, na terceira ele pega do index.

    cod arrumado

    <?php  
        
        $eventos = new WP_Query( 
                                    array(
                                        'post_type' => 'eventos',
                                        'posts_per_page' => 2,
                                        'paged' => get_query_var('paged'),
                                        'meta_type' => 'datetime',
                                        'meta_key'  => 'dateevento',
                                        'orderby'    => 'meta_value',
                                        'order'     => 'DESC'
                                        
                                    )
                                );
               
                if ( $eventos->have_posts() ) : while( $eventos->have_posts() ) : $eventos->the_post(); ?>     
                <?php get_template_part('partials/content', 'eventos'); ?>
                <?php endwhile; ?>
                <?php else: ?>
    	        <?php get_template_part('partials/content', 'noneevento'); ?>
                <?php endif; ?>
                <div class="clear"></div>
                <br>
                <div class="main-pagenavirb"><?php wp_pagenavi(array( query => $eventos ));  ?> <?php wp_reset_postdata(); ?></div><br>
                          
                
                </div>

    Além dessa query que você postou, tem mais alguma na página em questão (archive-eventos)? Se tiver, essa outra se encontra antes ou depois dessa?

    Então, esse loop aqui é o primeiro
    Se for noticia normal ele puxa por esse loop com o content-default que so tem o titulo da noticia, enfim nao tem outro loop nem query.

    <?php if ( have_posts() ) : while( have_posts() ) : the_post(); ?>
    	<?php if ( ! get_post_format() ) : ?>
    		<?php get_template_part('partials/content', 'default');  ?>
    	<?php else: ?>
    		<?php get_template_part('partials/content', get_post_format() );  ?>
    	<?php endif; ?>
    
    <?php endwhile; ?>
    
    <?php else: ?>
    
    	<?php get_template_part('partials/content', 'none'); ?>
    
    <?php endif; ?>
    
    <!-- page-navigation -->
    <div class="clear"></div>
                          <br>
                          <div class="main-pagenavirb"> <?php wp_pagenavi(); ?> </div>
                
                </div>
                <br>
                <br><br>
    
    <!--ENDS page-navigation -->

    Depois desse que ele vai pro post type, se for evento ele vai pra essa query

    esse é o meu arquivo archive-eventos.php

    <?php get_header(); ?>
    
    <div class="top-comp">
        <div class="titulo-pagina">PROXIMOS EVENTOS</div>   
        
    </div>
    <div class="main-all-pages">
    <?php  
        
        $eventos = new WP_Query( 
                                    array(
                                        'post_type' => 'eventos',
                                        'posts_per_page' => 2,
                                        'paged' => get_query_var('paged'),
                                        'meta_type' => 'datetime',
                                        'meta_key'  => 'dateevento',
                                        'orderby'    => 'meta_value',
                                        'order'     => 'DESC'
                                        
                                    )
                                );
               
                if ( $eventos->have_posts() ) : while( $eventos->have_posts() ) : $eventos->the_post(); ?>     
                <?php get_template_part('partials/content', 'eventos'); ?>
                <?php endwhile; ?>
                <?php else: ?>
    	        <?php get_template_part('partials/content', 'noneevento'); ?>
                <?php endif; ?>
                <div class="clear"></div>
                <br>
                <div class="main-pagenavirb"><?php wp_pagenavi(array( query => $eventos ));  ?> <?php wp_reset_postdata(); ?></div><br>
                          
                
                </div>
                
                
    
    <div class="clear"> </div>
    
    <br><br><br>
    
    <?php get_footer(); ?>

    Pra ficar mais claro.

    index.php

    <?php get_header(); ?>
    
    <div class="top-comp">
    <div class="titulo-pagina">ÚLTIMAS NOTÍCIAS</div> 
    </div>
    
    <div class="container-noticia">
    
    <?php get_template_part('partials/loop', 'main'); ?>
      
      
    <div class="clear"></div>
    </div>
    </div>
       
    
    <?php get_footer(); ?>

    loop-main.php

    <?php if ( have_posts() ) : while( have_posts() ) : the_post(); ?>
    	<?php if ( ! get_post_format() ) : ?>
    		<?php get_template_part('partials/content', 'default');  ?>
    	<?php else: ?>
    		<?php get_template_part('partials/content', get_post_format() );  ?>
    	<?php endif; ?>
    
    <?php endwhile; ?>
    
    <?php else: ?>
    
    	<?php get_template_part('partials/content', 'none'); ?>
    
    <?php endif; ?>
    
    <!-- page-navigation -->
    <div class="clear"></div>
                          <br>
                          <div class="main-pagenavirb"> <?php wp_pagenavi(); ?> </div>
                
                </div>
                <br>
                <br><br>
    
    <!--ENDS page-navigation -->

    archive-eventos.php

    <?php get_header(); ?>
    
    <div class="top-comp">
        <div class="titulo-pagina">PROXIMOS EVENTOS</div>   
        
    </div>
    <div class="main-all-pages">
    <?php  
        
        $eventos = new WP_Query( 
                                    array(
                                        'post_type' => 'eventos',
                                        'posts_per_page' => 2,
                                        'paged' => get_query_var('paged'),
                                        'meta_type' => 'datetime',
                                        'meta_key'  => 'dateevento',
                                        'orderby'    => 'meta_value',
                                        'order'     => 'DESC'
                                        
                                    )
                                );
               
                if ( $eventos->have_posts() ) : while( $eventos->have_posts() ) : $eventos->the_post(); ?>     
                <?php get_template_part('partials/content', 'eventos'); ?>
                <?php endwhile; ?>
                <?php else: ?>
    	        <?php get_template_part('partials/content', 'noneevento'); ?>
                <?php endif; ?>
                <div class="clear"></div>
                <br>
                <div class="main-pagenavirb"><?php wp_pagenavi(array( query => $eventos ));  ?> <?php wp_reset_postdata(); ?></div><br>
                          
                
                </div>
                
                
    
    <div class="clear"> </div>
    
    <br><br><br>
    
    <?php get_footer(); ?>

    loop-pages.php

    <?php if ( have_posts() ) : the_post(); ?>
    <div class="top-comp"><div class="titulo-pagina"><?php the_title(''); ?></div></div>
    
    <?php endif; ?>	
    
     
    	
    	 
    	 <?php if ( is_single() ) : ?>
    
    		<?php get_template_part('partials/content', 'default'); ?>
    
    	<?php else: ?>
    <div class="main-all-pages"> <?php the_content(); ?> </div>
    		
    		
    
     <div class="clear"></div>
    
    <?php endif; ?>
    • Esta resposta foi modificada 3 anos, 6 meses atrás por RTCADMIN.
    Moderador Mario Valney

    (@mariovalney)

    WordPress Cleric of Fire

    Olá @rtcadmin, tudo bem?

    Nas páginas de arquivo dos Custom Post Type (archive-*.php, caso tenha criado o template dela) não precisa criar uma query com WP_Query pois a própria Query Principal já sabe que é um arquivo daquele custom post type.

    Tenta deixar o seu archive com o mesmo loop dos posts nativos que vai funcionar.

    Abraços

    Olá @mariovalney,
    Da forma que voce falou ele funciona normal com o paginavi mesmo, só tem um problema,
    eu preciso que os post sejam exibidos na ordem DESC pela 'meta_key' => 'dateevento',
    E eu nao sei como fazer isso no outro loop sem usar a Wp_Query.

    <?php if ( have_posts() ) : while( have_posts() ) : the_post(); ?>
    	<?php if ( ! get_post_format() ) : ?>
    	
    		<?php get_template_part('partials/content', 'default');  ?>
    	<?php else: ?>
    		<?php get_template_part('partials/content', get_post_format() );  ?>
    	<?php endif; ?>
    
    <?php endwhile; ?>
    
    <?php else: ?>
    
    	<?php get_template_part('partials/content', 'none'); ?>
    
    <?php endif; ?>
    

    Muito obrigado pela ajuda!

    Moderador Mario Valney

    (@mariovalney)

    WordPress Cleric of Fire

    Utilize o filtro pre_get_posts para alterar a Query.

    Vai ler no link que te passei, mas aproveito pra alertar: verifique no filtro se está na query principal (main query) e se está na página de arquivo desse custom post type. Dessa forma não vai alterar outras queries.

    Obrigado @mariovalney!
    Funcionou certinho!

    function modifica_query_eventos ( $query ) {
        if( $query->query_vars['post_type'] === 'eventos' && !is_admin() ) {
            $query->set('orderby', 'meta_value');
            $query->set('meta_key','dateevento');
            $query->set('order', 'desc');
            $query->set( 'posts_per_page' ,'4');
        }
    }
    
    add_action( 'pre_get_posts', 'modifica_query_eventos' );
Visualizando 13 respostas - 1 até 13 (de um total de 13)
  • O tópico ‘Ajuda Wp_page navi’ está fechado para novas respostas.