Custom_Fields | WP-Plugins

Paginierung für ACF-Repeater Einträge

pattern background 1245991 1920

Die Datenfelder sollen nur für Seiten und auch nur dann verfügbar sein, wenn ein bestimmtes Template ausgewählt wird. Da die Anzahl der Einträge auf manchen Seiten hoch werden kann, wünscht sich der Kunde eine Paginierung nach einer je Seite frei definierbaren Anzahl von Einträgen. Die wird je Seite die das Template verwendet in einem separaten Nummernfeld (items_per_page) festgelegt.

Nachfolgend ein Entwurf für ein ganzes Seitentemplate mit dem Seiten-Loop, innerhalb dessen der ACF-Loop stattfindet.

<?php /** * Template Name: Repeater Page Template * * @package ZIMM WordPress theme */ get_header(); ?> <div id="content-wrap" class="container clr"> <div id="primary" class="content-area clr"> <div id="content" class="site-content clr"> <?php // Start page loop while ( have_posts() ) : the_post(); ?> <article class="single-page"> <div class="entry" itemprop="text"> <?php if ( get_query_var( 'page' ) ) { $page = get_query_var( 'page' ); } else { $page = 1; } if ( $page === 1 ) { the_title( '<h1 class="entry-title">', '</h1>' ); the_content(); } // field to configure how many items to display on each page $items_per_page = get_field( 'items_per_page' ); if ( !$items_per_page ) { $items_per_page = 6; } $i = 0; $entries = get_field( 'items_list' ); $total = count( $entries ); $pages = ceil( $total / $items_per_page ); $min = ( ( $page * $items_per_page ) - $items_per_page ) + 1; $max = ( $min + $items_per_page ) - 1; if ( have_rows( 'items_list' ) ) : ?> <div class="columns row flex columns-2"> <?php while( have_rows( 'items_list' ) ): the_row(); $i++; // continue if $row is lower than $min if ( $i < $min ) { continue; } // Stop loop if $row is higher than $max if ( $i > $max ) { break; } echo '<div>'; $link = sprintf( '<div class="blog-entry-readmore"><a class="button" href="%1$s" target="_blank" rel="noopener">%2$s</a></div>', get_sub_field('more_button_link'), __( 'more', 'my-theme-textdomain' ) ); $img = get_sub_field('item_img'); $image = sprintf('<img src="%1$s" alt="%2$s" width="250" height="250" class="alignleft" />', $img, get_sub_field('item_title')); $title = sprintf( '<h2 class="entry-title">%1$s</h2>', get_sub_field('item_title') ); printf( '<div class="entry-summary">%1$s %2$s %3$s %4$s</div>', $image, $title, get_sub_field('item_desc'), $link ); echo '</div>'; endwhile; // Pagination echo '</div><nav class="pagination center">'; echo paginate_links( array( 'base' => get_permalink() . '%#%' . '/', 'format' => '?page=%#%', 'prev_text' => '<i class="icon-previous"></i>', 'next_text' => '<i class="icon-next"></i>', 'current' => $page, 'total' => $pages, 'type' => 'list' ) ); echo '</nav>'; endif; ?> </div> </article> <?php endwhile; ?> </div><!-- #content --> </div><!-- #primary --> </div><!-- #content-wrap --> <?php get_footer(); ?>

Quellen

https://support.advancedcustomfields.com/forums/topic/advanced-custom-repeater-field-page-navigation/

https://jonathannicol.com/blog/2014/03/06/paginating-an-advanced-custom-fields-repeater/

weiter schmökern

Schreibe einen Kommentar

Bitte Kommentarfunktion nicht für Supportanfragen nutzen. Dem kann hier nicht entsprochen werden.

Deine E-Mail-Adresse wird nicht veröffentlicht.