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://jonathannicol.com/blog/2014/03/06/paginating-an-advanced-custom-fields-repeater/
Schreibe einen Kommentar