Holen Sie sich die aktuelle Seitenzahl

13

In einer Situation, in der man 20 Beiträge pro Seite hat. Ich möchte die aktuelle Seitenzahl erhalten, um unten einige nette Seitenlinks zu erstellen. Wie kommt man zur aktuellen Seite? Ich habe es versucht

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

und auf jeder Seite steht nur Seite 1 von 1.

Irgendwelche Ideen,

Wunderbar

Robin I Knight
quelle

Antworten:

21

Wenn WordPress eine solche Paginierung verwendet, gibt es eine Abfragevariable, auf $pageddie es eingibt. Seite 1 ist also $paged=1und Seite 15 ist $paged=15.

Sie können den Wert dieser Variablen mit dem folgenden Code abrufen:

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

Es ist etwas schwieriger, die Gesamtzahl der Seiten zu ermitteln. Zuerst müssen Sie alle Beiträge in der Datenbank zählen. Filtern Sie dann, nach welchen Posts veröffentlicht wird (im Vergleich zu Entwürfen, geplanten Posts, Papierkorb usw.). Dann müssen Sie diese Anzahl durch die Anzahl der Beiträge teilen, die auf jeder Seite erscheinen sollen:

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

Ich habe dies noch nicht getestet, aber Sie müssen möglicherweise auf $posts_per_pagedie gleiche Weise abrufen, wie Sie es abgerufen haben $paged(mit get_query_var()).

EAMann
quelle
8
Warum nicht verwenden $wp_query->max_num_pages?
31.
1
Das ist eine gute Alternative. Ein Teil von $wp_querymir völlig vergessen war da: - /
EAMann
@EAMann Übrigens: Es gibt auch die found_postsEigenschaft "Die Gesamtzahl der gefundenen Beiträge, die den aktuellen Abfrageparametern entsprechen". Wp_count_posts () ist eine Art Overhead.
jave.web
7

Sie können dies mit einer einzelnen Codezeile tun, aber andererseits möchten Sie den Code möglicherweise an anderen Stellen hinzufügen, sodass eine Funktion normalerweise nützlicher ist.

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;
}

HINWEIS: Code kann in Ihre Funktionsdatei aufgenommen werden.

Rufen Sie einfach die Funktion auf, in der Sie die Meldung "Seite x von y" anzeigen möchten, z.

<?php current_paged(); ?>

Wenn Sie den Code benötigen, um mit einer benutzerdefinierten Abfrage zu arbeiten, z. eine, die Sie mit erstellt haben, WP_Queryund geben Sie dann einfach den Namen der Variablen, die die Abfrage enthält, an die Funktion weiter.

Beispiel für eine nicht vorhandene Abfrage:

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

Abrufen der aktuellen Seite für die benutzerdefinierte Abfrage mithilfe der zuvor angegebenen Funktion.

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

Wenn Sie die Unterstützung für benutzerdefinierte Abfragen einfach ganz vergessen möchten und nach einem Einzeiler suchen, sollte dies der Fall sein.

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

Ich hoffe, das hilft.. :)

t31os
quelle
1
Wenn ich Sie wäre, würde ich prüfen, ob $vares sich um eine Abfrage handelt: Gibt if( is_a( $var, 'WP_Query' ) )true zurück, wenn es sich um ein Abfrageobjekt handelt.
John P Bloch
Ja, das ist eigentlich eine sehr vernünftige Idee!
t31os
0

Wie oben erwähnt - ein einfacherer Weg, um die maximale Anzahl von Seiten zu erhalten, ist mit:

global $wp_query

$wp_query->max_num_pages
Alex Standiford
quelle
0

Eine Option, die auf allen meinen Archivseiten funktioniert, ist folgende:

$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>'; 

}

Fragen Sie zuerst ab, ob diese Seite mehr als eine Seite enthält wp_query, und verknüpfen Sie dann den Titel mit der aktuellen Seite über $paged_current_pageund die Gesamtseiten mit $title_page_nrs. Zum echoSchluss noch. Wenn über 1 Seite zuerst, dann elsewenn nicht ausgelagert wird. Dies geht in meine archive.php oder Vorlagen für diesen Typ. Es produziert:

<title>Taxonomy title - page nr 1 of 4 | Your Website Name</title>

oder

<title>Taxonomy title | Your Website Name</title>

andyNilson
quelle