web-dev-qa-db-fra.com

Obtenir le numéro de page actuel

Dans une situation où on a 20 articles par page. Je voudrais obtenir le numéro de page actuel afin de faire quelques liens de page Nice en bas. Comment obtenez-vous la page actuelle. J'ai essayé ça

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

et il dit simplement la page 1 sur 1 à chaque page.

Des idées,

Merveilleux

10
Robin I Knight

Lorsque WordPress utilise une telle pagination, il existe une variable de requête $paged sur laquelle elle est activée. Donc, la page 1 est $paged=1 et la page 15 est $paged=15.

Vous pouvez obtenir la valeur de cette variable avec le code suivant:

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

Obtenir le nombre total de pages est un peu plus compliqué. Vous devez d’abord compter tous les articles de la base de données. Puis filtrez par quels messages sont publiés (par rapport aux brouillons, planifiés, corbeille, etc.). Ensuite vous devez diviser ce nombre par le nombre de publications que vous souhaitez voir apparaître sur chaque page:

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

Je n'ai pas encore testé cela, mais vous devrez peut-être extraire $posts_per_page de la même manière que vous avez récupéré $paged (avec get_query_var()).

15
EAMann

Vous pouvez le faire avec une seule ligne de code, mais vous voudrez peut-être ajouter le code ailleurs, pour qu'une fonction soit généralement plus 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;
}

NOTE: Le code peut aller dans votre fichier de fonctions.

Appelez simplement la fonction pour laquelle vous souhaitez afficher le message "Page x de y", par exemple.

<?php current_paged(); ?>

Si vous avez besoin que le code fonctionne avec une requête personnalisée, par exemple. celle que vous avez créée avec WP_Query, puis transmettez simplement le nom de la variable qui contient la requête à la fonction.

Exemple de requête non-existante:

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

Obtention de la page en cours pour la requête personnalisée à l’aide de la fonction précédemment publiée.

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

Si vous voulez simplement oublier totalement le support des requêtes personnalisées et que vous cherchez un one-liner, vous devriez le faire.

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

J'espère que cela pourra aider.. :)

6
t31os

Comme mentionné ci-dessus - un moyen plus simple d'obtenir le nombre maximal de pages consiste à:

global $wp_query

$wp_query->max_num_pages

0
Alex Standiford