@Spisoktem

Как пофиксить вывод пагинации в ACF?

Добрый день!
есть вот такой кусок кода для вывода пагинации в ACF
<?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; ?>

но выдает вот такую ошибку: Warning: count(): Parameter must be an array or an object that implements Countable in

Как можно это пофиксить?
  • Вопрос задан
  • 72 просмотра
Пригласить эксперта
Ответы на вопрос 3
glaphire
@glaphire
PHP developer
$total = count( $images );
скорее всего в переменной $images не массив и не коллекция объектов.
Также возможно, что это баг - вот обсуждение на странице саппорта ACF - ссылка. Можно обновиться до последней версии ACF
Ответ написан
centerwd
@centerwd
Веб дизайнер
Лучше пользоваться стандартными методами WP
Ответ написан
AntonLitvinenko
@AntonLitvinenko
HTML coder
Я просто оставлю тут код из страницы с галереей с одного из проектов, ничего не меняя под вас. код рабочий
тык

<?php while ( have_posts() ) : the_post(); ?>

	<article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>

		<div class="container gallery-wrapper">

			<div class="page-title-wrapper">
				<?php the_title( '<h1 class="entry-title">', '</h1>' ); ?>
			</div>

			<?php 

				$gallery = get_field( 'gallery' );
				$images = array();

				$items_per_page = get_field('items_per_page') ? get_field('items_per_page') : 12;

				$total_items = count( $gallery );
				$total_pages = ceil( $total_items / $items_per_page );

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

				$starting_point = ( ( $current_page - 1 ) * $items_per_page );

				if ( $gallery ) {
					$images = array_slice( $gallery, $starting_point, $items_per_page );
				}

				if( !empty($images) ) : ?>
					<div class="row">
						<?php foreach( $images as $image ) : ?>
							<div class="col-lg-3 col-md-4 col-sm-6">
								<div class="gallery-card">
									<a href="<?php echo $image['url']; ?>" class="gallery-card-link" title="<?php echo $image['alt']; ?>">
										<img src="<?php echo $image['sizes']['medium']; ?>" alt="<?php echo $image['alt']; ?>">
									</a>
								</div>
							</div>
						<?php endforeach; ?>
					</div>
				<?php endif; ?>

		</div>

	</article>

<?php endwhile; ?>

<?php 

	$big = 999999999;

	$args = array(

	'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ),
		'format'    => '?page=%#%',
		'current'   => $current_page,
		'total'     => $total_pages,
		'show_all'  => false,
		'end_size'  => 1,
		'mid_size'  => 2,
		'prev_next' => true,
		'prev_text' => __('Назад'),
		'next_text' => __('Далі'),
		'type'      => 'plain'

	);

 ?>

<?php if ( $total_pages > 1 ) : ?>

	<div class="container">
		<div class="pagination-wrapper">
			<div class="pagination">
				<div class="nav-links">
					<?php echo paginate_links( $args ); ?>
				</div>
			</div>
		</div>
	</div>

<?php endif; ?>

Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы