Obține Numărul Paginii Curente

18 mar. 2011, 15:16:23
Vizualizări: 88.1K
Voturi: 24

Într-o situație în care avem 20 de articole per pagină. Aș dori să obțin numărul paginii curente pentru a crea legături frumoase în partea de jos a paginii. Cum puteți obține pagina curentă. Am încercat următorul cod

<?php echo '(Pagina '.$page.' din '.$numpages.')'; ?>

și afișează doar pagina 1 din 1 pe fiecare pagină.

Aveți idei,

Marvellous

0
Toate răspunsurile la întrebare 6
3
39

Când WordPress utilizează paginarea în acest mod, există o variabilă de interogare $paged pe care se bazează. Astfel, pagina 1 este $paged=1, iar pagina 15 este $paged=15.

Puteți obține valoarea acestei variabile cu următorul cod:

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

Obținerea numărului total de pagini este un pic mai complicată. Mai întâi, trebuie să numărați toate articolele din baza de date. Apoi, să filtrați care articole sunt publicate (față de cele care sunt drafturi, programate, în coșul de gunoi, etc.). Apoi, trebuie să împărțiți acest număr la numărul de articole pe care vă așteptați să apară pe fiecare pagină:

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

Nu am testat acest lucru încă, dar s-ar putea să fie nevoie să obțineți $posts_per_page în același mod în care ați obținut $paged (folosind get_query_var()).

18 mar. 2011 16:01:54
Comentarii

De ce să nu folosești $wp_query->max_num_pages?

t31os t31os
18 mar. 2011 17:47:01

Este o alternativă bună. Am uitat complet că există în $wp_query :-/

EAMann EAMann
18 mar. 2011 19:49:32

@EAMann Apropo: există și proprietatea found_posts "Numărul total de articole găsite care se potrivesc cu parametrii curenti ai interogării", wp_count_posts() este cam inutil.

jave.web jave.web
13 mar. 2017 16:31:26
2

Ai putea face asta cu o singură linie de cod, dar din nou, s-ar putea să dorești să adaugi codul în alte locuri, așa că o funcție este de obicei mai utilă.

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 'Pagina ' . $page . ' din ' . $pages;
}

NOTĂ: Codul poate fi adăugat în fișierul tău de funcții.

Pur și simplu apelează funcția acolo unde dorești să afișezi mesajul "Pagina x din y", de ex.

<?php current_paged(); ?>

Dacă ai nevoie ca codul să funcționeze cu o interogare personalizată, adică una pe care ai creat-o folosind WP_Query, atunci pur și simplu treci numele variabilei care conține interogarea către funcție.

Exemplu de interogare inexistentă:

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

Obținerea paginii curente pentru interogarea personalizată folosind funcția postată mai devreme..

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

Dacă dorești să ignori complet suportul pentru interogări personalizate și cauți o singură linie de cod, atunci aceasta ar trebui să funcționeze..

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

Sper că acest lucru te ajută.. :)

18 mar. 2011 16:06:00
Comentarii

Dacă aș fi în locul tău, aș verifica dacă $var este o interogare: if( is_a( $var, 'WP_Query' ) ) va returna true dacă este un obiect de interogare.

John P Bloch John P Bloch
18 mar. 2011 16:30:23

Da, aceasta este de fapt o idee foarte bună, am făcut-o!.

t31os t31os
16 apr. 2011 13:18:49
0

Din documentația WordPress paginate_links( string|array $args = '' ):

<?php
global $wp_query;
 
$big = 999999999; // un număr întreg improbabil
 
echo paginate_links( array(
    'base'    => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ),
    'format'  => '?paged=%#%',
    'current' => max( 1, get_query_var('paged') ),
    'total'   => $wp_query->max_num_pages
) );
?>

Aceasta va afișa numerele de pagină și linkurile "Postare următoare" și "Postare anterioară". Trebuie să plasați acest cod pe paginile unde doriți să fie afișate numerele de pagină.

10 mai 2021 12:35:19
0

O opțiune care funcționează pe toate paginile mele de arhivă este următoarea:

$paged_maxnum = $GLOBALS['wp_query']->max_num_pages;

if ( $paged_maxnum > 1 ) {

    $paged_current_page = get_query_var( 'paged' ) ? intval( get_query_var( 'paged' ) ) : 1;
    $title_page_nrs = 'pagina nr ' . $paged_current_page . ' din ' . $paged_maxnum;

    echo '<title>' . get_the_archive_title( '', false ) . ' - ' . $title_page_nrs . ' | Numele Site-ului Tău</title>';

} else {

    echo '<title>' . get_the_archive_title( '', false ) . ' | Numele Site-ului Tău</title>'; 

}

Mai întâi verifică dacă există mai mult de o pagină în această interogare wp_query, apoi concatenează titlul cu pagina curentă prin $paged_current_page și totalul paginilor cu $title_page_nrs. În final, afișează rezultatul cu echo. Dacă există mai mult de o pagină, se execută prima condiție, altfel, dacă nu este paginată, se execută a doua condiție. Acest cod se poate adăuga în archive.php sau în șabloanele pentru acest tip. Rezultatul va fi:

<title>Titlul taxonomiei - pagina nr 1 din 4 | Numele Site-ului Tău</title>

sau

<title>Titlul taxonomiei | Numele Site-ului Tău</title>

24 nov. 2019 08:17:31
0
$page = max( 1, get_query_var( 'paged' ) );
29 feb. 2024 12:03:01
1
-1

După cum am menționat mai sus - o modalitate mai simplă de a obține numărul maxim de pagini este cu:

global $wp_query

$wp_query->max_num_pages

20 feb. 2019 01:58:18
Comentarii

Deși acest lucru este corect, întrebarea era despre obținerea paginii curente.

Loosie94 Loosie94
15 apr. 2024 11:25:48