Obține Numărul Paginii Curente
Î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
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()
).

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ă.. :)

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ă.

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>
