Anchor link to top of page
john ogroats 1008672 1920

Die Standardpagination von WooCommerce in Produktübersichten hat neben Seitenzahlenlinks auch Links zur vorherigen und nächsten Seite. Für ein Projekt das sehr viele Produkte bekommen sollte, wurde gewünscht, dass es auch noch Links zur ersten und zur letzten Seite gibt, wie in nachfolgender Abbildung.

pagination woocommerce plus

Wer WooCommerce kennt weiß, dass es viele Templates hat, unter anderem eines für die Pagination. Das kann einfach überschrieben werden, indem die Datei pagination.php aus dem WooCommerce-Ordner templates/loop/ in den (Child-)Theme-Ordner woocommerce/loop/ kopiert und dort modifiziert wird.

<?php
/**
 * Pagination - Show numbered pagination for catalog pages
 *
 * This template can be overridden by copying it to yourtheme/woocommerce/loop/pagination.php.
 *
 * HOWEVER, on occasion WooCommerce will need to update template files and you
 * (the theme developer) will need to copy the new files to your theme to
 * maintain compatibility. We try to do this as little as possible, but it does
 * happen. When this occurs the version of the template file will be bumped and
 * the readme will list any important changes.
 *
 * @see     https://docs.woocommerce.com/document/template-structure/
 * @package WooCommerce/Templates
 * @version 3.3.1
 */

if ( ! defined( 'ABSPATH' ) ) {
	exit;
}

$total   = isset( $total ) ? $total : wc_get_loop_prop( 'total_pages' );
$current = isset( $current ) ? $current : wc_get_loop_prop( 'current_page' );
$base    = isset( $base ) ? $base : esc_url_raw( str_replace( 999999999, '%#%', remove_query_arg( 'add-to-cart', get_pagenum_link( 999999999, false ) ) ) );
$format  = isset( $format ) ? $format : '';

if ( $total <= 1 ) {
	return;
}
?>
<nav class="woocommerce-pagination">
	<?php
		/* nachfolgende Variablen ersetzen mit gewünschen Klassen / Icons */
		$first = __('First', 'my_text_domain');
		$last = __('Last', 'my_text_domain');
		$previous = __('previos', 'my_text_domain');
		$next = __('next', 'my_text_domain');

		$lifirst = $current > 1 ? '<li class="page-num page-num-first"><a href='.esc_url(get_pagenum_link(1)).'>'.esc_html($first).' </a></li>' : '';
		$lilast = $current < $total ? '<li class="page-num page-num-first"><a href='.esc_url(get_pagenum_link($total)).'>'.esc_html($last).' </a></li>' : '';

		$pages = paginate_links( apply_filters( 'my_woo_pagination_args', array( 
			'base'         => $base,
			'format'       => $format,
			'add_args'     => false,
			'current'      => max( 1, $current ),
			'total'        => $total,
			'prev_text'    => $previous,
			'next_text'    => $next,
			'type'         => 'array',
			'end_size'     => 3,
			'mid_size'     => 3
		) ) );		

		if ( is_array( $pages ) ) {
			echo '<ul class="page-numbers">';
			echo $lifirst;
			foreach ( $pages as $page ) {
					echo "<li>$page</li>";
			}
			echo $lilast;
		   	echo '</ul>';
		}
	?>
</nav>

Bitte Kommentarfunktion nicht für Supportanfragen nutzen. Dem kann hier nicht entsprochen werden. Die Angabe einer E-Mail-Adresse und eines Namens ist nicht erforderlich. Einen (Spitz)-Namen zu nennen wäre aber doch nett.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Hinweis: Sowohl angegebener Name als auch E-Mail-Adresse (beides ist optional, dafür werden alle Kommentare vor Veröffentlichung geprüft) werden dauerhaft gespeichert. Du kannst jeder Zeit die Löschung Deiner Daten oder / und Kommentare einfordern, direkt über dieses Formular (wird nicht veröffentlicht, und im Anschluss gelöscht), und ich werde das umgehend erledigen. – Mit hinterlassenen Kommentaren hinterlegte IP-Adressen werden nach zwei Monaten automatisch gelöscht