Obtenir le numéro de page actuel
4 réponses
- votes
-
- 2011-03-18
Lorsque WordPress utilise unepagination comme celle-ci,ilexiste une variable de requête
$paged
sur laquelleil se connecte. Lapage 1est donc$paged=1
et lapage 15est$paged=15
.Vouspouvez obtenir la valeur de cette variable avec le code suivant:
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
Obtenir lenombretotal depagesest unpeuplus délicat. Vous devez d'abord comptertoutes lespublications de labase de données. Ensuite,filtrezpar quels articles sontpubliés (par rapport auxbrouillons,programmés,poubelles,etc.). Ensuite vous devez diviser cenombrepar lenombre demessages que vousprévoyez d'apparaître sur chaquepage:
$total_post_count = wp_count_posts(); $published_post_count = $total_post_count->publish; $total_pages = ceil( $published_post_count / $posts_per_page );
Jen'aipasencoretesté cela,mais vous devrezpeut-être récupérer
$posts_per_page
de lamêmemanière que vous avez récupéré$paged
(en utilisantget_query_var()
).When WordPress is using pagination like this, there's a query variable
$paged
that it keys on. So page 1 is$paged=1
and page 15 is$paged=15
.You can get the value of this variable with the following code:
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
Getting the total number of pages is a bit trickier. First you have to count all the posts in the database. Then filter by which posts are published (versus which are drafts, scheduled, trash, etc.). Then you have to divide this count by the number of posts you expect to appear on each page:
$total_post_count = wp_count_posts(); $published_post_count = $total_post_count->publish; $total_pages = ceil( $published_post_count / $posts_per_page );
I haven't tested this yet, but you might need to fetch
$posts_per_page
the same way you fetched$paged
(usingget_query_var()
).-
Pourquoine pas utiliser `$ wp_query->max_num_pages`?Why not use `$wp_query->max_num_pages`?
- 8
- 2011-03-18
- t31os
-
C'est unebonne alternative.Unepartie de `$ wp_query` quej'avais complètement oublié était là: -/That's a sound alternative. Part of `$wp_query` I completely forgot was there :-/
- 1
- 2011-03-18
- EAMann
-
@EAMann BTW:il y a aussi lapropriété `found_posts`" Lenombretotal demessagestrouvés correspondant auxparamètres de requête actuels ",wp_count_posts ()est une sorte de surcharge.@EAMann BTW: there is also `found_posts` property "The total number of posts found matching the current query parameters", wp_count_posts() is kind of an overhead.
- 0
- 2017-03-13
- jave.web
-
- 2011-03-18
Vouspouvez lefaire avec une seule ligne de code,mais làencore,vous voudrezpeut-être ajouter le code à d'autresendroits,donc unefonctionestgénéralementplus utile.
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; }
REMARQUE: Le codepeut aller dans votrefichier defonctions.
Appelez simplement lafonction où vous souhaitez afficher lemessage "Page x sur y",parexemple.
<?php current_paged(); ?>
Si vous avezbesoin du codepourtravailler avec une requêtepersonnalisée,parexemple. celui que vous avez crééen utilisant
WP_Query
,puistransmettez simplement lenom de la variable contenant la requête à lafonction.Exemple de requêteinexistante:
$fred = new WP_Query; $fred->query(); if( $fred->have_posts() ) ... etc..
Obtenir lapage actuelle de la requêtepersonnalisée à l'aide de lafonctionpubliéeprécédemment.
<?php current_paged( 'fred' ); ?>
Si vous vouleztout simplement oublier complètement lapriseen charge des requêtespersonnaliséeset que vous recherchez une ligne unique,alors cela devrait lefaire.
<?php echo 'Page '. ( get_query_var('paged') ? get_query_var('paged') : 1 ) . ' of ' . $wp_query->max_num_pages; ?>
J'espère que cela aidera .. :)
You could do it with a single line of code, but then again, you might want to add the code in other places, so a function is usually more useful.
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; }
NOTE: Code can go into your functions file.
Simply call the function where you want to show the "Page x of y" message, eg.
<?php current_paged(); ?>
If you need the code to work with a custom query, ie. one you've created using
WP_Query
, then simply pass along the name of the variable that holds the query to the function.Example non-existant query:
$fred = new WP_Query; $fred->query(); if( $fred->have_posts() ) ... etc..
Getting the current page for the custom query using the function posted earlier..
<?php current_paged( 'fred' ); ?>
If you want to just totally forget the custom query support and you're looking for a one-liner, then this should do it..
<?php echo 'Page '. ( get_query_var('paged') ? get_query_var('paged') : 1 ) . ' of ' . $wp_query->max_num_pages; ?>
Hope that helps.. :)
-
Sij'étais vous,je vérifierais si `$ var`est une requête:`if (is_a ($ var,'WP_Query')) `retourneratrue si c'est un objet de requête.If I were you I'd check if `$var` is a query: `if( is_a( $var, 'WP_Query' ) )` will return true if it's a query object.
- 1
- 2011-03-18
- John P Bloch
-
Oui,c'esten fait uneidéetrès sensée,c'estfait !.Yes, that's actually a very sensible idea, done!.
- 0
- 2011-04-16
- t31os
-
- 2019-02-19
Commementionné ci-dessus - unmoyenplus simple d'obtenir lenombremaximum depagesest avec:
global $wp_query $wp_query->max_num_pages
As mentioned above - a simpler way to get the max number of pages is with:
global $wp_query $wp_query->max_num_pages
-
- 2019-11-24
Une option quifonctionne surtoutesmespages d'archivesest la suivante:
$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 = 'page nr ' . $paged_current_page . ' of ' . $paged_maxnum; echo '<title>' . get_the_archive_title( '', false ) . ' - ' . $title_page_nrs . ' | Your Website Name</title>'; } else { echo '<title>' . get_the_archive_title( '', false ) . ' | Your Website Name</title>'; }
Première requête s'il y aplus d'unepage dans cette
wp_query
,puis concaténer letitre avec lapage actuelle via$paged_current_page
et letotal despages avec$title_page_nrs
. Enfinecho
. Si au-dessus d'unepage d'abord,alorselse
sin'estpaspaginé. Cela va dansmon archive.php ou dans desmodèlespour cetype. Ilproduit:<title>Taxonomy title - page nr 1 of 4 | Your Website Name</title>
ou
<title>Taxonomy title | Your Website Name</title>
One option that works on all my archive pages is this:
$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 = 'page nr ' . $paged_current_page . ' of ' . $paged_maxnum; echo '<title>' . get_the_archive_title( '', false ) . ' - ' . $title_page_nrs . ' | Your Website Name</title>'; } else { echo '<title>' . get_the_archive_title( '', false ) . ' | Your Website Name</title>'; }
First query if there is more than one page in this
wp_query
, then concatenate title with current page via$paged_current_page
and total pages with$title_page_nrs
. Lastlyecho
it. If above 1 page first, thenelse
if is not paged. This goes into my archive.php or templates for this type. It produces:<title>Taxonomy title - page nr 1 of 4 | Your Website Name</title>
or
<title>Taxonomy title | Your Website Name</title>
Dans une situation où l'on a 20 articlesparpage.J'aimerais obtenir lenuméro depage actuel afin de créer dejolis liens depageen bas.Comment obtenez-vous lapage actuelle.J'aiessayé ça
et ilindique simplement lapage 1 sur 1 sur chaquepage.
Toutes lesidées,
Merveilleux