Пагинация в ACF Repeater

Advanced Custom Fields это ‘must have’ плагин для создания любого сайта на Worpdress. Он позволяет с лёгкостью создавать, управлять и выводить произвольные поля в любом месте вашего шаблона. И его функционал можно ещё больше расширить используя дополнение Repeater Field.  Но страница на которой используется Repeater может получится слишком большой, если вы используете много записей и возможно вам придётся использовать для неё пагинацию. И сейчас я покажу вам как это сделать.

В этом примере, мы будем добавлять пагинацию к полю image_gallery, с дочерним полем image которое содержит объект изображения. Наш Repeater будет на странице с ссылкой /gallery.

На странице будет выведено 10 изображений и ссылки под ними позволят пользователю переходить по страницам галереи. Наши ссылки будут иметь вид /gallery/2/, /gallery/3/ и т.д.

Ну и собственно сам код:

<?php
/* 
 * Paginate Advanced Custom Field repeater
 */

if( get_query_var('page') ) {
  $page = get_query_var( 'page' );
} else {
  $page = 1;
}

// Variables
$row              = 0;
$images_per_page  = 10; // How many images to display on each page
$images           = get_field( 'image_gallery' );
$total            = count( $images );
$pages            = ceil( $total / $images_per_page );
$min              = ( ( $page * $images_per_page ) - $images_per_page ) + 1;
$max              = ( $min + $images_per_page ) - 1;

// ACF Loop
if( have_rows( 'image_gallery' ) ) : ?>

  <?php while( have_rows( 'image_gallery' ) ): the_row();

    $row++;

    // Ignore this image if $row is lower than $min
    if($row < $min) { continue; }

    // Stop loop completely if $row is higher than $max
    if($row > $max) { break; } ?>                     
    
    <?php $img_obj = get_sub_field( 'image' ); ?>
    <a href="<?php echo $img_obj['sizes']['large']; ?>">
      <img src="<?php echo $img_obj['sizes']['thumbnail']; ?>" alt="">
    </a>

  <?php endwhile;

  // Pagination
  echo paginate_links( array(
    'base' => get_permalink() . '%#%' . '/',
    'format' => '?page=%#%',
    'current' => $page,
    'total' => $pages
  ) );
  ?>

<?php else: ?>

  No images found

<?php endif; ?>

Источник: http://jonathannicol.com/blog/2014/03/06/paginating-an-advanced-custom-fields-repeater/

Похожие записи

2 комментария

Добавить комментарий для Весна Отменить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *