Suporte » Desenvolvendo com WordPress » Verificar se é a Primeira ou a Última Página (Paginação)

  • Resolvido Nura

    (@archer-master)


    Tenho um código de paginação e gostaria de acrescentar “Primeira Página” somente quando estiver maior que 2 e “Última Página” não mostrasse na última página.

    Exemplo de código da “Primeira página”:
    « Anterior 1 2 [3] 4 Próximo » Última Página »

    Exemplo de código da “Última página”:
    « Anterior 1 2 3 [4] Última Página »

    Mas meu código fica mostrado tanto “Primeira Página” e “Última Página”:
    Primeira Página « Anterior 1 2 [3] 4 Próximo » Última Página »

    index.php

    <?php get_header(); ?>
    <main class='ac_main'>
        <div class='reviews_posts'>Reviews</div>
        <?php $paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;
    $my_query = new WP_Query( "post_type=reviews&posts_per_page=4&paged=$paged" ); ?>
        <?php while ( $my_query->have_posts() ) : $my_query->the_post(); ?>
        <?php the_title(); ?>
        <?php endwhile; ?>
        <nav class="pagination_site">
            <?php pagination_bar( $my_query ); ?>
        </nav>
        <?php wp_reset_postdata();?>
    </main>
    <?php get_sidebar(); ?>
    <?php get_footer(); ?>

    Functions.php

    <?php
    function pagination_bar($custom_query) {
        global $wp_query;
    
        $total_pages = $custom_query -> max_num_pages;
        $big = 999999999; // need an unlikely integer
    
        if ($total_pages > 1) {
            if ($total_pages > 1 && $total_pages) {
                echo '<a href="'.esc_url(get_pagenum_link(1)).'">Primeira Página</a>';
            } else {
                echo '';
            }
            if ($total_pages >= $total_pages) {
                echo '<a href="'.esc_url(get_pagenum_link($total_pages)).'">Última Página</a>';
    
            } else {
                echo '';
            }
            $current_page = max(1, get_query_var('paged'));
            echo "<ul><li><span>Página ".$current_page." de ".$total_pages."</span></li>";
            echo paginate_links(array(
                'base' => str_replace($big, '%#%', esc_url(get_pagenum_link($big))),
                'format' => '?paged=%#%',
                'current' => $current_page,
                'total' => $total_pages,
    			'end_size'           => 1,
    			'mid_size'           => 3,
                'prev_text' => __('« Anterior'),
                'next_text' => __('Próximo »'),
    			'before_page_number' => '',
    			'after_page_number'  => ''
            ));
    
        }
    }
    function add_blog_post_to_query( $query ) {
        if ( $query->is_home() && $query->is_main_query() ) {
            $query->set( 'post_type', array('post', 'reviews') );
            $query->set( 'posts_per_page', '' );
        }
    }
    add_action( 'pre_get_posts', 'add_blog_post_to_query' );
    ?>
    • Este tópico foi modificado 1 mês, 2 semanas atrás por  Nura.
Visualizando 4 respostas - 1 até 4 (de um total de 4)
  • Olá, @archer-master!

    Pesquisando no Code Refence do Codex pensei que pudesse encontrar esses parâmetros nativos e não há. Nesse sentido, tente alterar a lógica do seu código, conforme o WordPress utiliza para exibir o Previous.

    Teste utilizanado a variável $current_page ao invés da $total_pages:

    if ($total_pages > 1 && $current_page > 1) {

    e

    if ($current_page >= $total_pages) {

    No mais, acredito que utilizar $wp_query ao invés de $custom_query, também possa interferir no comportamento do código.

    Nura

    (@archer-master)

    O ‘Last Page’ funcionou assim if ($current_page < $total_pages) {, vou arrumar a parte do loop, muito obrigado pela ajuda.

    Disponha sempre, @archer-master.

    Sugiro compartilhar aqui o código inteiro quando funcionar também com o First Page para que mais pessoas com o mesmo problema possa encontrar a solução.

    Após isso, você pode encerrar o tópico.

    Nura

    (@archer-master)

    Obrigado @rodineicosta, código “functions.php” corrigido!

    <?php
    function pagination_bar($custom_query) {
        global $wp_query;
    
        $total_pages = $custom_query -> max_num_pages;
        $big = 999999999; // need an unlikely integer
    
        if ($total_pages > 1) {
         if ($total_pages > 1 && $current_page > 1) {
                echo '<a href="'.esc_url(get_pagenum_link(1)).'">Primeira Página</a>';
            } else {
                echo '';
            }
            if ($current_page < $total_pages) {
                echo '<a href="'.esc_url(get_pagenum_link($total_pages)).'">Última Página</a>';
    
            } else {
                echo '';
            }
            $current_page = max(1, get_query_var('paged'));
            echo "<ul><li><span>Página ".$current_page." de ".$total_pages."</span></li>";
            echo paginate_links(array(
                'base' => str_replace($big, '%#%', esc_url(get_pagenum_link($big))),
                'format' => '?paged=%#%',
                'current' => $current_page,
                'total' => $total_pages,
    			'end_size'           => 1,
    			'mid_size'           => 3,
                'prev_text' => __('« Anterior'),
                'next_text' => __('Próximo »'),
    			'before_page_number' => '',
    			'after_page_number'  => ''
            ));
    
        }
    }
    function add_blog_post_to_query( $query ) {
        if ( $query->is_home() && $query->is_main_query() ) {
            $query->set( 'post_type', array('post', 'reviews') );
            $query->set( 'posts_per_page', '' );
        }
    }
    add_action( 'pre_get_posts', 'add_blog_post_to_query' );
    ?>
Visualizando 4 respostas - 1 até 4 (de um total de 4)
  • Você deve estar conectado para responder a este tópico.