toscho.design

WordPress: Links auf erste und letzte Seite eines Archivs

English

Hat man ein Archiv mit vielen Seiten, so möchte man die nicht alle auf einmal verlinken. Nützlich sind Links zur nächsten Seite und zur vorhergehenden. Dafür bietet WordPress previous_posts_link() an und next_posts_link().
Ebenso nützlich finde ich Links auf die erste und letzte Seite. Dafür bietet WordPress aber nichts an. Das kann man recht einfach nachrüsten.

Zutaten:

  • $GLOBALS['wp_query']->max_num_pages – hier steht, wieviele Seiten das Archiv überhaupt hat.
  • get_query_var( 'paged' ) – hier steht, auf welcher Seite wir gerade sind.
  • get_pagenum_link( $number ) – damit erzeugen wir einen Link auf die jeweils gewünschte Seite.

Das werfen wir einfach zusammen, und schon haben wir zwei praktische Funktionen:

/**
 * Link to last page of a paged archive.
 *
 * @param  string $text Link text
 * @return string Nothing if we are on the last page, a link otherwise.
 */
function t5_get_last_posts_link( $text = 'Last Posts' )
{
    global $wp_query;
    if ( // something is very wrong
        ! isset ( $wp_query->max_num_pages )
        // there is just one page
        or 1 == $last = $wp_query->max_num_pages
        // we are already on the last page
        or get_query_var( 'paged' ) == $last
    )
    {
        return '';
    }
    return sprintf( '<a href="%1$s">%2$s</a>', get_pagenum_link( $last ), $text );
}
/**
 * Link to the first page of a paged archive.
 *
 * @param  string $text Link text
 * @return string Nothing if we are on the first page, a link otherwise.
 */
function t5_get_first_posts_link( $text = 'First Posts' )
{
    global $wp_query;
    if ( // something is very wrong
        ! isset ( $wp_query->max_num_pages )
        // there is just one page
        or 1 == $wp_query->max_num_pages
        // we are already on the first page
        or 2 > (int) get_query_var( 'paged' )
    )
    {
        return '';
    }
    return sprintf( '<a href="%1$s">%2$s</a>', get_pagenum_link( 1 ), $text );
}

Das läßt sich auch deutlich kompakter schreiben, damit man nicht so viel Code wiederholt. Ich habe es der Übersicht halber jetzt mal so ausführlich gefasst.
Aus get_pagenum_link( 1 ) macht WordPress freundlicherweise nicht /page/1/, sondern es gibt einen Link auf die korrekte Startseite des Archives aus, die ja keinen Seitenparameter braucht.

Der Aufruf im Theme könnte dann so aussehen:

print t5_get_first_posts_link( __( 'Newest', 't5_theme' ) );
print t5_get_last_posts_link( __( 'Oldest', 't5_theme' ) );

Falls ich hier irgendwann mal mit dem Umbau fertig werde, kommt das Ergebnis diesem Bild nahe: