Ankerlink an den Anfang der Seite
pattern background 1245991 1920
Generic filters
Filter by Kategorien

Der Beitrag, geschriebem am 12. Februar 2019, ist schon etwas älter und könnte womöglich nicht mehr aktuell sein

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/

Bitte das Kommentarfeld nicht für Supportanfragen nutzen; hier kann kein Support angeboten werden. Die Angabe von Name oder E-Mail-Adresse ist optional, ein Spitzname wäre trotzdem nett.

Schreibe einen Kommentar

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

Hinweis: Name und E-Mail-Adresse (beides optional, da alle Kommentare moderiert werden) werden dauerhaft gespeichert. Über dieses Formular kann jeder Zeit die Löschung persönlicher Daten oder Kommentare angefordert werden; die Anfrage wird nicht veröffentlicht und nach der Bearbeitung gelöscht. IP-Adressen, die mit Kommentaren gespeichert werden, werden nach zwei Monaten automatisch gelöscht.

Ihre Nachricht wird möglicherweise zur Spam-Prüfung an OpenAI (USA) weitergeleitet. Weitere Informationen finden Sie in unserer Datenschutzerklärung.