it-swarm-pt.tech

Obter o número da página atual

Em uma situação onde um tem 20 posts por página. Eu gostaria de obter o número da página atual para fazer alguns links da página Nice na parte inferior. Como você consegue a página atual? Eu tentei isso

<?php echo '(Page '.$page.' of '.$numpages.')'; ?>

e diz apenas a página 1 de 1 em todas as páginas.

Alguma ideia,

Maravilhoso

10
Robin I Knight

Quando o WordPress está usando paginação como essa, há uma variável de consulta $paged que é ativada. Portanto, a página 1 é $paged=1 e a página 15 é $paged=15.

Você pode obter o valor dessa variável com o seguinte código:

$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;

Obtendo o número total de páginas é um pouco mais complicado. Primeiro você tem que contar todas as postagens no banco de dados. Em seguida, filtre por quais posts são publicados (em relação a quais são os rascunhos, agendados, lixo, etc.). Então você tem que dividir essa contagem pelo número de postagens que você espera que apareçam em cada página:

$total_post_count = wp_count_posts();
$published_post_count = $total_post_count->publish;
$total_pages = ceil( $published_post_count / $posts_per_page );

Ainda não testei isso, mas talvez seja necessário buscar $posts_per_page da mesma maneira que você buscou $paged (usando get_query_var()).

15
EAMann

Você poderia fazer isso com uma única linha de código, mas, novamente, você pode querer adicionar o código em outros lugares, então uma função geralmente é mais útil.

function current_paged( $var = '' ) {
    if( empty( $var ) ) {
        global $wp_query;
        if( !isset( $wp_query->max_num_pages ) )
            return;
        $pages = $wp_query->max_num_pages;
    }
    else {
        global $$var;
            if( !is_a( $$var, 'WP_Query' ) )
                return;
        if( !isset( $$var->max_num_pages ) || !isset( $$var ) )
            return;
        $pages = absint( $$var->max_num_pages );
    }
    if( $pages < 1 )
        return;
    $page = get_query_var( 'paged' ) ? get_query_var( 'paged' ) : 1;
    echo 'Page ' . $page . ' of ' . $pages;
}

NOTA: Código pode entrar no seu arquivo de funções.

Simplesmente chame a função onde você quer mostrar a mensagem "Página x de y", por exemplo.

<?php current_paged(); ?>

Se você precisar do código para trabalhar com uma consulta personalizada, por exemplo. uma que você criou usando WP_Query, então simplesmente passe o nome da variável que contém a consulta para a função.

Exemplo de consulta inexistente:

$fred = new WP_Query;
$fred->query();
if( $fred->have_posts() ) 
... etc..

Obtendo a página atual para a consulta personalizada usando a função postada anteriormente ..

<?php current_paged( 'fred' ); ?>

Se você quiser apenas esquecer totalmente o suporte à consulta personalizada e você está procurando por um one-liner, então isso deve fazê-lo.

<?php echo 'Page '. ( get_query_var('paged') ? get_query_var('paged') : 1 ) . ' of ' . $wp_query->max_num_pages; ?>

Espero que ajude.. :)

6
t31os

Como mencionado acima - uma maneira mais simples de obter o número máximo de páginas é com:

global $wp_query

$wp_query->max_num_pages

0
Alex Standiford