Поддержка Проблемы и решения Проблема с пагинацией

  • Здравствуйте! Помогите, пожалуйста. Бьюсь уже пол-месяца. У меня не работает пагинация в шаблоне категории. Когда нажимаю на кнопки пагинации у меня открывается шаблон index.php, но посты не открываются. Дело в том, что у меня 7 категорий, для каждой категории сделан свой шаблон. Вот код:

    <?php if(have_posts()) : ?>
    <?php while(have_posts()) : the_post(); ?>
    	   <article>
    	   <header><h2><?php the_title(); ?></h2><time pubdate><?php the_time('j M Y'); ?></time></header>
    	   <div class="avtor">Автор: <?php the_author(); ?></div>
    	   <?php if ( has_post_thumbnail() ) {	the_post_thumbnail();}  ?><?php the_excerpt(); ?>
    	 <footer><mark><?php the_tags(); ?> </mark><a href="<?php the_permalink(); ?>">Читать далее</a></footer>
    	 </article>
    <?php endwhile; ?>
    <?php the_posts_pagination(); ?>
    <?php endif; ?>

    Все записи распределены по категориям т.е. имеют такой вид мой сайт/название категории/ Когда перехожу на другую страничку с помощью пагинации открывается вот, что мой сайт/название категории/page/2/.
    И почему он ссылается на шаблон index.php когда мне надо на текущий с недостающими записями. Может в цикле надо уточнять что записи берутся из такой-то категории с помощью $wp_query? Тогда почему при открытии странички мой сайт/название категории/ открывается нужный шаблон с 10 записями, как и указано в настройках, а пагинация ссылается на левый шаблон? Пожалуйста помогите кто сталкивался с подобного рода проблемой.
    У меня возник ещё один вопрос, я плохо разбираюсь в php, но может кто подскажет. в index.php я задаю условие:

    <?php if ($_SERVER['REQUEST_URI'] == "/optimization/page/2/"){
    		$query = new WP_Query(array(
    	 'category_name' => optimization,
        'posts_per_page' => 10,
        'paged' => 2,));}

    т.е. если страница такая, то выполняется такое условие, но мне надо доработать с помощью (я так понимаю регулярных выражений), чтобы при открытии страницы ​/optimization/page/(любой номер)/ выполнялось условие ‘paged’ => 2 только не вторая страница с записями, а следующая. Кто поможет буду премного благодарен.
    Как поставить (любой номер)?
    Сейчас ситуация такая:
    При нажатии на одну из кнопок пагинации в файле шаблона скажем (optimization.php) открывается шаблон index.php без пагинации, в котором есть странички которые я задал, хотя код пагинации присутствует.

Просмотр 14 ответов — с 1 по 14 (всего 14)
  • Нет времени читать)
    Вот код с моего functions.php

    function my_pagination() {
    	global $wp_query;
    
    	$big = 999999999; // уникальное число для замены
    
    	$args = array(
    		'base' => str_replace( $big, '%#%', get_pagenum_link( $big ) )
    		,'format' => ''
    		,'current' => max( 1, get_query_var('paged') )
    		,'total' => $wp_query->max_num_pages
    	);
    	$result = paginate_links( $args );
    	$result = str_replace( '/page/1/', '', $result );
    	echo $result;
    }

    вызови где тебе нужно функцию <?php my_pagination(); ?>

    Не, это я уже пробовал, не подойдет. Открывается в любом случае шаблон index.php, если только не сделать так чтобы при открытии /optimization/page/(любой номер)/ открывался нужный шаблон с пагинацией.
    Чувак я уверен что у тебя правильный код, но это не то.

    Вызови где у тебя цикл выводит записи.

    Проинспектируй ссылки которые выводит цикл и скинь сюда.

    Так я тебе про что и говорю у меня в шаблоне optimization.php

    <?php if(have_posts()) : ?>
    <?php while(have_posts()) : the_post(); ?>
    	   <article>
    	   <header><h2><?php the_title(); ?></h2><time pubdate><?php the_time('j M Y'); ?></time></header>
    	   <div class="avtor">Автор: <?php the_author(); ?></div>
    	   <?php if ( has_post_thumbnail() ) {	the_post_thumbnail();}  ?><?php the_excerpt(); ?>
    	 <footer><mark><?php the_tags(); ?> </mark><a href="<?php the_permalink(); ?>">Читать далее</a></footer>
    	 </article>
    <?php endwhile; ?>
    <?php my_pagination(); ?> // тут в принципе без разницы твою функцию вставлять или стандартную, все равно одно и тоже откроет index.php
    <?php endif; ?>

    Сейчас не могу я на работе, так по памяти скажу.
    открывается десять записей(как прописано в настройках), далее идут цифры с пагинацией.
    Если жму на цифру открывается ссылка /optimization/page/2/ если это цифра 2 и шаблон index.php (вычислил эксперементально)
    Если открываю запись, то здесь всё стандартно: /optimization/название-статьи-английскими-буквами/

    что за шаблон optimization.php подозрительный?
    https://codex.wordpress.org/images/1/18/Template_Hierarchy.png
    не вижу в иерархии возможности задавать шаблоны только через ярлык рубрики.

    Это не шаблон подозрительный, а вы:-) У шаблона категории на самом деле имя category-optimization.php

    Возник такой вопрос, может кто знает. Например, у меня есть шаблон категории для вывода записей из этой же категории, условно назовём его category-{slug}.php
    В нем есть такой код:

    <?php if(have_posts()) : ?>
    <?php while(have_posts()) : the_post(); ?>
    	   <article>
    	   <header><h2><?php the_title(); ?></h2><time pubdate><?php the_time('j M Y'); ?></time></header>
    	   <div class="avtor">Автор: <?php the_author(); ?></div>
    	   <?php if ( has_post_thumbnail() ) {	the_post_thumbnail();}  ?><?php the_excerpt(); ?>
    	 <footer><mark><?php the_tags(); ?> </mark><a href="<?php the_permalink(); ?>">Читать далее</a></footer>
    	 </article>
    <?php endwhile; ?>
    <?php the_posts_pagination(); ?> // ну или любой вызов функции, плагина и т.п.
    <?php endif; ?>

    Пагинация видна на страничке категории — здесь, всё отлично! Как только я нажимаю на кнопку пагинации открывается страничка мой_сайт/{SLUG}/page/2/ // цифра «2» условная, может быть другая, в зависимости какой № кнопки нажат при пагинации
    Какой при этом шаблон должен использоваться?
    Скорее всего должен использоваться шаблон category-{slug}.php, но у меня почему-то используется при любых раскладах index.php в котором в принципе, неоткуда взяться записям, если их там не прописать.
    В чём может быть причина открытия неправильного файла шаблона и как это можно исправить?

    Ребята! Я наконец-то решил проблему. Методом «танца с бубном».
    Короче рассказываю. В админке в настройках Постоянных ссылок
    добавил префикс category и во всех шаблонах изменил ссылки типа <a href="<?php bloginfo('url') ?>/optimization/" ></a> на
    <a href="<?php bloginfo('url') ?>/category/optimization/" ></a> соответственно. И о чудо! мой_сайт/{SLUG}/page/2/, которая не выводила пагинацию и нужный шаблон стала работать немного под другим именем
    мой_сайт/category/{SLUG}/page/2/

    то есть сначала сами нахимичили с ЧПУ, потом сами исправили.

    Нет, с ЧПУ я нахимичил чтобы исправить, там было всё отлично. Не было префикса для рубрик

    Проблема та же, но решение не подошло.

    Есть у кого еще подобная проблема решенная? Код вывода записей на странице рубрики такой:

    
    <?php	
    	$cur_cat_id = get_cat_id(single_cat_title("",false));
    	$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
    	$args = array('posts_per_page' => 3, 'paged' => $paged, 'post_type' => 'portfolio', 'category__in' => $cur_cat_id);
    
    	$postslist = new WP_Query( $args );
    	
    	if ( $postslist->have_posts() ) :
    		while ( $postslist->have_posts() ) : $postslist->the_post();
    			echo '<div class="row content__horizontal-item">';
    			echo '<a href="' . get_permalink() . '">';
    			echo the_post_thumbnail('portfolio_big_list');
    			echo '<div class="content__horizontal-item-title">';
    			echo the_title();
    			echo '</div>';
    			echo '<span>Узнать подробнее >></span>';
    			echo '</a>';
    			echo '</div>';
    		endwhile;
    
    	echo '<div class="row pages"><ul class="pages__ul %1$s" role="navigation">';
    	$big = 999999999;
    	echo paginate_links( array(
    		'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ),
    		'format' => '?paged=%#%',
    		'current' => max( 1, get_query_var('paged') ),
    		'total' => $postslist->max_num_pages,
    		'prev_text'    => __('«'),
    		'next_text'    => __('»'),
    		'show_all'     => false, // показаны все страницы участвующие в пагинации
    		'end_size'     => 2,     // количество страниц на концах
    		'mid_size'     => 2,     // количество страниц вокруг текущей
    	) );
    	echo '</ul></div>';
    
    	endif;
    ?>
    

    На странице category/category-slug/ — все ок. И посты есть и пагинация.
    А вот на странице category/category-slug/page/2 … category/category-slug/page/N не цепляется шаблон category.php.

    • Ответ изменён 6 лет, 5 месяцев назад пользователем lidolov.
    • Ответ изменён 6 лет, 5 месяцев назад пользователем lidolov.
    Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    Проблема та же, но решение не подошло.

    Создайте свою тему, согласно правилам форума.

    • Ответ изменён 6 лет, 5 месяцев назад пользователем Sergey Biryukov.
Просмотр 14 ответов — с 1 по 14 (всего 14)
  • Тема «Проблема с пагинацией» закрыта для новых ответов.