Suporte » Plugins » Paginação repeti os mesmos posts

  • Gente, estou com quase o mesmo erro.
    Desejo que ele a cada 15 posts crie uma nova pagina e deposito que ele apenas execute as opções ANTERIOR e PROXIMO.

    quando ativo o plugin “WP-Paginate” e marco a opção para aparecer na HOME ele aparece lá em cima e nao onde desejo e quando eu clico em pagina 2 ou 3 ele sempre me mostra os mesmos posts ou seja os 15 ultimos.

    alguém pode me ajudar?

    segue os arquivos.

    <!– INDEX –>
    <div id=”wrap” class=”mobile-news”>
    
    <!– LIMITAR POSTS –>
    <?php query_posts(‘cat=2,56,4,1,5,53,3,55’); ?>
    
    <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
    
    <div class=”box-news”>
    
    <div class=”img-news”>
    “>
    <?php the_post_thumbnail(); ?>
    
    <?php
    //Pega todas as categorias do post
    $cats = get_the_category($post->ID);
    //Verifica a primeira categoria retornada e pega seu parentesco.
    //Se um post tem múltiplas categorias que levam a parentescos separados, retornará o primeiro parentesco pertencente à primeira categoria retornada.
    $parent = get_category($cats[0]->category_parent);
    //Se obtiver uma mesnagem de erro, significa que já estamos na categoria-pai.
    if (is_wp_error($parent)){
    $cat = get_category($cats[0]);
    }
    //Senão, atribui a categoria retornada para trabalhar equivalente a uma categoria-pai.
    else{
    $cat = $parent;
    }
    
    ?>
    
    <div class=”<?php echo $cat->slug; ?>”><?php the_category(); ?></div>
    
    </div>
    <span><?php the_date(); ?> – <?php the_author(); ?></span>
    <h1><?php the_title(); ?></h1>
    
    </div>
    
    <?php endwhile; ?>
    <?php endif; ?>
    </div>
    
    <!– FINAL DA PROGRAMAÇÃO PARA MOBILE –>
    
    <div id=”navegacao”>
    <div class=”anteriores”><?php previous_posts_link( “« Posts Anteriores” ) ?> < ANTERIOR </div>
    <div class=”recentes” style=”margin-left: 100px;”><?php next_posts_link( “Posts Recentes »” ) ?> PROXIMA > </div>
    </div>

    OBS: Ja experimentei usando <?php wp_pagenate(); ?>

    <!– FUNCTION.JS –>
    
    // No arquivo functions.php
    function my_pagination() {
    global $wp_query;
    
    echo paginate_links( array(
    ‘base’ => str_replace( 9999999999999, ‘%#%’, esc_url( get_pagenum_link( 9999999999999 ) ) ),
    ‘format’ => ‘?paged=%#%’,
    ‘current’ => max( 1, get_query_var( ‘paged’ ) ),
    ‘total’ => $wp_query->max_num_pages,
    ‘type’ => ‘list’,
    ‘prev_next’ => true,
    ‘prev_text’ => ‘Página Anterior’,
    ‘next_text’ => ‘Próxima Página’,
    ‘before_page_number’ => ‘-‘,
    ‘after_page_number’ => ‘>’,
    ‘show_all’ => false,
    ‘mid_size’ => 3,
    ‘end_size’ => 1,
    ) );
    }

    por favor, alguem pode me ajudar?

Visualizando 2 respostas - 1 até 2 (de um total de 2)
  • Hilberson, primeiramente, evite usar a query_posts. Ela é muito destrutiva e você deve sempre tomar alguns cuidados na hora de usá-la. Pra gerar paginação, ela sempre vai te dar dor de cabeça.
    Vou te passar uma possível solução usando o WP_Query.

    Substitua isso:

    <!– LIMITAR POSTS –>
    <?php query_posts(‘cat=2,56,4,1,5,53,3,55’); ?>
    <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>

    por isso:

    $paged = ( get_query_var('paged') ) ? get_query_var('paged') : 1;
    $query = new WP_Query( array( 'paged' => $paged, 'cat' => '2,56,4,1,5,53,3,55' ) );
    <?php if ( $query->have_posts() ) : while ( $query->have_posts() ) : $query->the_post(); ?>

    Aqui eu estou tentando controlar a variável de paginação pra evitar que ela seja interpretada erada. Em seguida, crio um objeto da classe WP_Query pra modificar o loop. Tenho que passar aquela variável de paginação. E depois note que eu passo sempre o objeto antes do have_posts e do the_post.

    Mude o local onde você está chamando a paginação. Você tem que colocar antes do endwhile. Algo assim:

    <div id="navegacao">
    <div class="anteriores"><?php previous_posts_link( "« Posts Anteriores" ) ?> < ANTERIOR </div>
    <div class="recentes" style="margin-left: 100px;"><?php next_posts_link( "Posts Recentes »" ) ?> PROXIMA > </div>
    </div>
    
    <?php endwhile; ?>
    
    <?php wp_reset_postdata(); ?>
    
    <?php endif; ?>
    </div>

    Viu que eu adicionei um <?php wp_reset_postdata(); ?> depois do endwhile? Aquilo também tem que ser passado quando estamos usando o WP_Query.

    Observações:
    1) não sei onde você está definindo a quantidade de posts por página. Você pode definir isso mudando a chamada do WP_Query:

    $query = new WP_Query( array( 'paged' => $paged, 'cat' => '2,56,4,1,5,53,3,55', 'posts_per_page' => 15 ) );

    2) Não verifiquei o que vai dentro do loop, já que parece estar funcionando. Você diz que já estão trazendo os 15 posts…

    continua ainda reproduzindo os mesmos 15 posts. ;/

    <div id="wrap" class="mobile-news">
    
      <!-- LIMITAR POSTS -->
    <?php $paged = ( get_query_var('paged') ) ? get_query_var('paged') : 1;
    $query = new WP_Query( array( 'paged' => $paged, 'cat' => '2,56,4,1,5,53,3,55', 'posts_per_page' => 15 ) ); ?>
    <?php if ( $query->have_posts() ) : while ( $query->have_posts() ) : $query->the_post(); ?>
    
                
    
            <div class="box-news">
    
                    <div class="img-news">
                    <a href="<?php the_permalink(); ?>">
                        <?php the_post_thumbnail(); ?>
    
            <?php
            //Pega todas as categorias do post
            $cats = get_the_category($post->ID);
            //Verifica a primeira categoria retornada e pega seu parentesco.
            //Se um post tem múltiplas categorias que levam a parentescos separados, retornará o primeiro parentesco pertencente à primeira categoria retornada.
            $parent = get_category($cats[0]->category_parent);
            //Se obtiver uma mesnagem de erro, significa que já estamos na categoria-pai.
            if (is_wp_error($parent)){
                $cat = get_category($cats[0]);
            }
            //Senão, atribui a categoria retornada para trabalhar equivalente a uma categoria-pai.
            else{
                $cat = $parent;
            }
    
            ?>
    
                      <div class="<?php echo $cat->slug; ?>"><?php the_category(); ?></div>
    
                    </a>
                    </div>
                    <span><?php the_date(); ?> - <?php the_author(); ?></span>
                    <h1><?php the_title(); ?></h1>
    
            </div>
            
    
    <?php endwhile; ?>
    
    <div id="navegacao">
    <div class="anteriores"><?php previous_posts_link( "« Posts Anteriores" ) ?></div>
    <div class="recentes" style="margin-left: 100px;"><?php next_posts_link( "Posts Recentes »" ) ?></div>
    </div>
    
    <?php wp_reset_postdata(); ?>
    
    <?php endif; ?>
    </div>
Visualizando 2 respostas - 1 até 2 (de um total de 2)
  • O tópico ‘Paginação repeti os mesmos posts’ está fechado para novas respostas.