Suporte » Plugins » Erro 404 na páginação

  • Resolvido JeanGuilherme

    (@jeanguilherme)


    Olá, estou tentando desenvolver uma página que é um template part que contem os posts do blog, e gostaria de criar a páginação. Com algumas pesquisas encontrei uns códigos e fiz a páginação, ela exibe as páginas direitinho, porém quando eu vou navegar, ela me retorna um erro 404 – page not found

    se alguém puder dar uma luz segue o código do meu functions.php

    function wp_pagination($pages = '', $range = 9)
    {
        global $wp_query, $wp_rewrite;
        $wp_query->query_vars['paged'] > 1 ? $current = $wp_query->query_vars['paged'] : $current = 1;
        $pagination = array(
            'base' => @add_query_arg('page','%#%'),
            'format' => '',
            'total' => $wp_query->max_num_pages,
            'current' => $current,
            'show_all' => true,
            'type' => 'plain'
        );
        if ( $wp_rewrite->using_permalinks() ) $pagination['base'] = user_trailingslashit( trailingslashit( remove_query_arg( 's', get_pagenum_link( 1 ) ) ) . 'page/%#%/', 'paged' );
        if ( !empty($wp_query->query_vars['s']) ) $pagination['add_args'] = array( 's' => get_query_var( 's' ) );
        echo '<div class="wp_pagination">'.paginate_links( $pagination ).'</div>';
    }

    e a página do blog em que está sendo feito a páginação content-blog.php

    <?php 
    
                    $args = array(
                        "post_type" => "blog",
                        "posts_per_page" => "2",
                        "paged" => ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1
                    );
                        query_posts( $args );
                        if ( have_posts() ) :
                            ?>
                        <div id="blogzeiro" class="row deps">
                        <?php
                        while ( have_posts() ) : the_post();
                        if (get_post_meta(get_the_id(),'destaque_blog',true) == 1){ $col = 'l8 m12'; $qtd = 53;}
                        else{ $col = 'l4 m6'; $qtd = 20;}
                        $categoria = wp_get_post_terms( get_the_id(), 'categoria-portfolio' );
                        $cat_name = $categoria[0]->slug;
                        ?>
                        <div class="col <?php echo $col; ?> s12">
                            <div class="post <?php echo $cat_name; ?>">
                                <div class="post-head">
                                    <h3><?php echo get_the_title(); ?></h3>
                                    <div class="post-thumb" style="background-image: url('<?php echo wp_get_attachment_url( get_post_thumbnail_id() ); ?>')"></div>
                                </div>
                                <div class="post-body">
                                        <span class="post-date"><?php echo the_time('d/m');echo ' - '; echo $categoria[0]->name; ?></span><br>
                                        <p><?php echo excerptNoAutop($qtd, 'descricao_blog'); ?></p>
                                        <a href="<?php the_permalink(); ?>">[...] Saiba mais</a>
                                </div>
                            </div>
                        </div>
                    <?php endwhile; ?>
                    </div>
                    <?php wp_pagination();?>
                    <?php echo str_replace('<a href','<a class="load-posts button blog" href',get_next_posts_link('Carregar mais'));
                    endif; wp_reset_query(); ?>
Visualizando 4 respostas - 1 até 4 (de um total de 4)
  • Moderador Leo Baiano

    (@leobaiano)

    O problema provavelmente é o <a href="https://codex.wordpress.org/Function_Reference/query_posts">query_posts()</a>, veja o que diz a documentação desta função:

    Note: This function isn’t meant to be used by plugins or themes. As explained later, there are better, more performant options to alter the main query. query_posts() is overly simplistic and problematic way to modify main query of a page by replacing it with new instance of the query. It is inefficient (re-runs SQL queries) and will outright fail in some circumstances (especially often when dealing with posts pagination). Any modern WP code should use more reliable methods, like making use of pre_get_posts hook, for this purpose.

    Destaque especial para:

    "Note: This function isn't meant to be used by plugins or themes" (Nota: Esta função não deve ser utilizada em plugins ou temas)

    e para:

    query_posts() is overly simplistic and problematic way to modify main query of a page by replacing it with new instance of the query (query_posts() é uma forma simplista e problemática de modificar a consulta principal de uma página)

    No lugar de query_posts() você deve usar WP_Query(), quando precisar um segundo loop na página criar ou pre_get_posts para modificar o loop principal.

    Faz essa correção que deve funcionar.

    Criador do tópico JeanGuilherme

    (@jeanguilherme)

    Leo Baiano, obrigado pela ajuda, mas eu descobri o erro, ele estava dando, eu ainda não entendi o porquê.

    Mas eu consegui resolver mudando os links permanentes.
    Os links permanentes estava somente com o nome do post, dai eu coloquei personalizado, por exemplo “post/%nomedopost%/” dai funcionou direitinho.

    Tem umas coisas que acontecem que não dá pra explicar muito bem.

    Sobre o WP-Query, eu uso só query pq é onde eu puxo os argumentos, não sei se isso tem a ver, mas agradeço de coração a boa vontade em ajudar!

    Moderador Leo Baiano

    (@leobaiano)

    Não use query_posts(), use WP_Query();, a forma de utilização é parecida, a diferença é que você estará fazendo da forma correta e não estará matando fadinhas.

    Obrigado Jean, sua solução resolveu meu problema também.

Visualizando 4 respostas - 1 até 4 (de um total de 4)
  • O tópico ‘Erro 404 na páginação’ está fechado para novas respostas.