Задать вопрос

Навигация на кастомной странице постов 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(); ?>
  • Вопрос задан
  • 314 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 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.
Ответ написан
Ваш ответ на вопрос

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

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