Навигация на кастомной странице постов Wordpress?

Добрый день. Есть страница постов, где выводятся все посты добавленные на сайте. Никак не получается привязать хлебные крошки или навигацию по постам. Требуется отображать 5 постов на странице и иметь возможность перейти на следующую страницу по навигации. Ниже код "скелета" самой страницы, где выводятся все проекты. Чую, что проблема в самом выводе.

Пытался организовать подобное через плагин WP-PageNavi, но пагинация не отображается. Буду рад помощи в поиске решения.

<?php
    /*
        Template Name: Проекты
    */
?>

<?php get_header(); ?>

    <?php

        /*
            * Получаем все Отзывы
            * post_type - название нашего произвольного типа записей (идентификатор)
            * posts_per_page - количество получаемых записей
            * (в нашем случае стоит -1, это значит, что нужно получить все посты)
        */
        $projects = new WP_Query(array('post_type' => 'projects', 'posts_per_page' => -1));
    ?>

<!— Не забудьте в цикл добавить полученный объект постов $reviews —>
<?php if ( $projects->have_posts() ) : while ( $projects->have_posts() ) : $projects->the_post(); ?>

    
<div class="col-md-12 row">
<div class="block__project col-md-5">
	<span class="block__project_title">
		<i class="fas fa-bookmark">
		</i>
        <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
    </span>
   <div id="carouselExampleIndicators" class="carousel slide" data-ride="carousel">
            <ol class="carousel-indicators">
                <li data-target="#carouselExampleIndicators" data-slide-to="0" class="active"></li>
                <li data-target="#carouselExampleIndicators" data-slide-to="1"></li>
                <li data-target="#carouselExampleIndicators" data-slide-to="2"></li>
             </ol>
          <div class="carousel-inner">
            <div class="carousel-item active">
              <img class="d-block w-100" src="<?php the_field('background'); ?>" alt="First slide">
            </div>
            <div class="carousel-item">
              <img class="d-block w-100" src="<?php the_field('background_2'); ?>" alt="Second slide">
            </div>
            <div class="carousel-item">
              <img class="d-block w-100" src="<?php the_field('background_3'); ?>" alt="Third slide">
            </div>
          </div>
        </div>
</div>
<div class="block__info col-md-4">
	<ul class="block__info_elements">
		<li class="block__info_element">
			Цена проекта
                <span>
                    <?php the_field("price") ?>
                </span>
		</li>
		<li class="block__info_element"><span><img src="<?php bloginfo('template_directory'); ?>/img/project/area.png" alt="">
            &#8195Площадь:</span> <?php the_field('scale'); ?>
        </li>
		<li class="block__info_element"><span><img src="<?php bloginfo('template_directory'); ?>/img/project/perimeter.png" alt="">
			&#8195Габариты
			дома:</span> <?php the_field('scale_house'); ?>
		</li>
		<li class="block__info_element"><span><img src="<?php bloginfo('template_directory'); ?>/img/project/perimeter.png" alt="">
			&#8195Габариты застройки:</span>
            <?php the_field('long_house'); ?>
        </li>
		<li class="block__info_element"><span><img src="<?php bloginfo('template_directory'); ?>/img/project/number-floors.png" alt="">
			&#8195Количество
            этажей:</span> <?php the_field('stair'); ?>
        </li>
		<li class="block__info_element"><span><img src="<?php bloginfo('template_directory'); ?>/img/project/number-rooms.png" alt="">
			&#8195Количество
            спален:</span> <?php the_field('rooms') ?>
        </li>
		<li class="block__info_element"><span><img src="<?php bloginfo('template_directory'); ?>/img/project/unitaz.png" alt="">
            &#8195Количество с/у:</span> <?php the_field('toilet'); ?>
        </li>
		<li class="block__info_element"><span><img src="<?php bloginfo('template_directory'); ?>/img/project/roof-insulation.png" alt="">
			&#8195Утепление
            кровли:</span> <?php the_field('roof'); ?>
        </li>
		<li class="block__info_element"><span><img src="<?php bloginfo('template_directory'); ?>/img/project/facade-insulation.png" alt="">
			&#8195Утепление
            внешних стен:</span> <?php the_field('walls'); ?>
        </li>
		<li class="block__info_element"><span><img src="<?php bloginfo('template_directory'); ?>/img/project/floor-insulation.png" alt="">
			&#8195Утепление
            пола:</span> <?php the_field('downstairs'); ?>
        </li>
		<li class="block__info_element">
			<div class="gallery__block_second container-fluid">
				<div class="gallery__items row">
					<div class="col-sm-6 col-md-4 col-lg-6 photodop item">
						<a href="<?php the_field('pic'); ?>" data-lightbox="photos">
							<img class="m-auto img-fluid" src="<?php the_field('pic'); ?>">
						</a>
					</div>
					<div class="col-sm-6 col-md-4 col-lg-6 photodop item">
						<a href="<?php the_field('pic_s'); ?>" data-lightbox="photos">
							<img class="m-auto img-fluid" src="<?php the_field('pic_s'); ?>">
						</a>
					</div>
				</div>
			</div>
		</li>
	</ul>
</div>
<div class="sidebar__block2 col-md-3">
		<?php get_sidebar() ?>
	</div>
</div>
<div class='col-md-10 m-auto'>
   <hr class="py-1"> 
</div>


    <?php endwhile; ?>
    <?php endif; ?>


</div>


</div>

</section>
</section>

</div> 


<?php get_footer(); ?>
  • Вопрос задан
  • 313 просмотров
Решения вопроса 1
@zordq Автор вопроса
Решение нашёл такое. Подкрепляю скриншотами.5cec3f1539daa762829356.png

Его нужно убрать и решение тут, да это хук. Подробнее по ссылке.

// Удалим слэш на конце, если нужно. Если слэш есть в структуре ЧПУ, то он будет добавляться и к постоянным страницам.
add_filter( 'user_trailingslashit', 'no_page_slash', 70, 2 );
function no_page_slash( $string, $type ){
   global $wp_rewrite;

	if( 'page' === $type && $wp_rewrite->using_permalinks() && $wp_rewrite->use_trailing_slashes )
		$string = untrailingslashit( $string );

   return $string;
}


Далее - помог еще один блог.

Пример страницы с кастомными постами.
<?php

  $current_page = $_GET['page']; // текущая страница
  $post_type = 'projects'; // имя custom post type

  // если GET параметр пустой, то принимаем, что текущая страница равна 1
  if ( empty($current_page) ) {
    $current_page = 1;
  }

  // аргументы, передаваемые в запрос
  $args = array(
    'post_type'      => $post_type, // custom post type
    'posts_per_page' => 10,         // количество постов на одной странице
    'paged'          =>  $current_page,      // задаем номер страницы, которую хотим отобразить
  );

  $projects = new WP_Query( $args ); // отправляем запрос

  if ( $projects->have_posts() ) :

    while ( $projects->have_posts() ) : $projects->the_post(); ?>

      // здесь HTML разметка поста

    <?php endwhile; 

    // если максимальное количество страниц больше 1, то выводим пагинацию
    if ( $projects->max_num_pages > 1 ) : 

      // если это не последняя страница и не первая, то выводим ссылки на следующую и предыдущую страницу
      if ( $projects->max_num_pages > $current_page && $current_page > 1 ) : ?> 

        <a href="<?php prevlink($current_page) ?>">Предыдущая страница</a>
        <a href="<?php nextlink($current_page) ?>">Следующая страница</a>

      // если текущая страница является первой страницей, выводим только ссылку на следующую страницу
      <?php elseif ( $current_page == 1 ) : ?> 

        <a href="<?php nextlink($current_page) ?>">Следующая страница</a>

      // если текущая страница - это последняя страница, выводим ссылку только на предыдущую страницу
      <?php elseif ( $current_page == $projects->max_num_pages ) : ?> 

        <a href="<?php prevlink($current_page) ?>">Предыдущая страница</a>

      <?php endif;

    endif;

  endif;
?>


+ добавляем функцию
<?php
  // ссылка на следующую страницу
  function nextlink($current){
      echo '?page=' . ($current + 1);
  }

  // ссылка на предыдущую страницу
  function prevlink($current){
      echo '?page=' . ($current - 1);
  }
?>


И всё, наша пагинация приобретает вид - sitename.ru/projects?page=2
5cec41a87c583758949359.png
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
deniscopro
@deniscopro Куратор тега WordPress
WordPress-разработчик, denisco.pro
Добрый.

  1. Перенести код в шаблон archive-projects.php
  2. Заменить цикл на стандартный
  3. Использовать стандартную пагинацию
  4. Задать 'posts_per_page' => 5 с помощью хука pre_get_posts.
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы