WordPress как на ладони
Недорогой хостинг для сайтов на WordPress: wordpress.jino.ru

Пагинация и WP_Query

В посте у тебя написано:

Можно измерить значение posts_per_page на конкретное число необходимых нам постов на одной странице. Например, posts_per_page=10 выведет только 10 постов, а если при этом в конце цикла поставить тег шаблона posts_nav_link(), то под циклом появится ссылка для перехода к следующим 10-ти постам (ссылка пагинации).

Из поста: WP_Query()

Именно это мне и нужно! Я много чего на твоем сайте на эту тему перерыл, но этот абзац описывает то что нужно сделать лучшим способом...но как это сделать?

Прости что много кода...Это моя вся кастомная страница:

$classes = new WP_Query(array(
	'category_name' => 'classes',
	'posts_per_page' => '5'
)); 

тут цикл с использованием переменной classes, дальше конец цикла где должна быть пагинация:

<?php endwhile; ?>

	<?php  echo posts_nav_link(); ?>

	<p class="pagination">

	:(   НУ ЧТО ЖЕ НУЖНО-ТО ЗДЕСЬ УКАЗАТЬ??? :(

	</p><!--pagination-->

<?php else: ?><p>пустой раздел</p>

<?php  endif; ?>

<?php wp_reset_postdata(); ?>
1
Wireinet
29 октября 2016 2
  • 2
    Kama7745

    Тут все упирается в глобальную переменную $wp_query... У меня там немного не правильно было написано, подправил...

    Короче, надо делать так:

    <?php
    global $wp_query;
    
    $wp_query = new WP_Query(array(
    	'category_name' => 'classes',
    	'posts_per_page' => '5',
    	'paged' => get_query_var('paged') ?: 1 // страница пагинации
    ));
    
    while( have_posts() ){
    	the_post();
    
    	the_title();
    	// Цикл Цикл Цикл ...
    }
    
    posts_nav_link(); // пагинация - echo тут не надо
    
    wp_reset_query(); // сброс $wp_query
    ?>
    Wireinet 1 Ноя. 2016

    Нет слов! Ты маг!
    Спасибо за помощь! Заработало!

    Коля 14 Ноя. 2018

    У меня posts_nav_link() вообще ничего не выводит... Код выше тоже не помог.

    $args = array(
    	'post_type' => 'post',
    	'category_name' => 'sobyitiya',
    	'posts_per_page' => '4',
    	'paged' => get_query_var('paged') ?: 1
    );
    $post_query = new WP_Query($args);
    if($post_query->have_posts() ) :
    	if (isset($_POST['filterYear'])) {
    		$filterYear = $_POST['filterYear'];
    	} else {
    		$filterYear = false;
    	}
    	while($post_query->have_posts() ) : $post_query->the_post();
    		if (in_category('sobyitiya')) :
    			if ($filterYear && date('Y', strtotime(get_the_date())) !== $filterYear) {
    				wp_reset_query(); continue;
    			} ?>
    			<div class="news_ivermon events_ivermon">
    				<a href="<?php the_permalink(get_the_ID()); ?>" class="news_ivermon__link">
    					<img src="<?php if ($eventPhoto = get_field('event_photo')) {echo $eventPhoto;} ?>">
    				</a>
    				<span class="news_ivermon__meta"><?php echo date_i18n('d.m.Y', strtotime(get_the_date())); ?></span>
    				<a href="<?php the_permalink(get_the_ID()); ?>" class="news_ivermon__link">
    					<?php the_title(); ?>
    				</a>
    				<div class="events_ivermon__excerpt"><?php the_excerpt(); ?></div>
    			</div>
    		<?php endif; ?>
    	<?php 
    	endwhile; posts_nav_link(); wp_reset_query();
    else :
    	echo "<p>На данный момент событий нету.</p>";
    endif;
    echo '</div>';
    ?>
    ildar_r_khasanshin 25 Сен. 2019

    1 добавить global $wp_query;
    2 $post_query = new WP_Query($args); изменить на $wp_query = new WP_Query($args);
    3 убрать $post_query->

    Комментировать
  • 2

    Перепробовала все возможные способы, ничего не помогло. Пока не наткнулась на статью о archive-name.php К сожалению ссылку на статью уже не вспомню.

    Сделала следующее и все заработало: пагинация вывелась и ошибка 404 исчезла.

    1. Создала новый шаблон archive-portfolio.php, создала новую страницу, в настройках страницы указала этот шаблон. На этой странице должны были выводится записи (нового типа 'portfolio') для вывода самой записи был создан файл single-portfolio.php

    2. в function.php: обратите внимание на 'has_archive' => true

      //Создаем новый тип записей
      add_action('init', 'register_post_types');
      function register_post_types()
      {
      	register_post_type('portfolio', array(
      		'label' => null,
      		'labels' => array(
      			'name' => 'Портфолио', // основное название для типа записи
      			'singular_name' => 'Портфолио', // название для одной записи этого типа
      			'add_new' => 'Добавить работу', // для добавления новой записи
      			'add_new_item' => 'Добавление работы', // заголовка у вновь создаваемой записи в админ-панели.
      			'edit_item' => 'Редактирование работы', // для редактирования типа записи
      			'new_item' => 'Новая работа', // текст новой записи
      			'view_item' => 'Смотреть работу', // для просмотра записи этого типа.
      			'search_items' => 'Искать работу', // для поиска по этим типам записи
      			'not_found' => 'Не найдено', // если в результате поиска ничего не было найдено
      			'not_found_in_trash' => 'Не найдено в корзине', // если не было найдено в корзине
      			'parent_item_colon' => '', // для родителей (у древовидных типов)
      			'menu_name' => 'Портфолио', // название меню
      		),
      		'description' => '',
      				'public' => true,
      		'publicly_queryable' => true, // зависит от public
      		'exclude_from_search' => false, // зависит от public
      		'show_ui' => true, // зависит от public
      		'show_in_menu' => true, // показывать ли в меню адмнки
      		'show_in_admin_bar' => true, // по умолчанию значение show_in_menu
      		'show_in_nav_menus' => true, // зависит от public
      		'show_in_rest' => true, // добавить в REST API. C WP 4.7
      		'rest_base' => null, // $post_type. C WP 4.7
      		'menu_position' => 5,
      		'menu_icon' => 'dashicons-format-gallery',
      		'hierarchical' => false,
      		'supports' => array('title', 'editor', 'author', 'thumbnail', 'excerpt'), // 'title','editor','author','thumbnail','excerpt','trackbacks','custom-fields','comments','revisions','page-attributes','post-formats'
      		'taxonomies' => array('skills'),
      		'has_archive' => true,
      		'rewrite' => true,
      		'query_var' => true,
      	));
      }
    3. В файле archive-portfolio.php запустила обычный цикл

      <?php
      /*
      Template Name: Портфолио
      */
      ?>
      
      <?php get_header();?>
      
      <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
      
      	<?php the_title()?>
      
      	...
      
      <?php endwhile; ?>
      
      	<!-- Пагинация -->
      	<?php the_posts_pagination();?>
      
      	<!-- Если записей в цикле нет — цикл не сработал (else) -->
      	<?php else: ?>
      
      	<p>Нет постов в цикле.</p>
      
      <?php endif; ?>

    Надеюсь это кому-то поможет)

    kudanoff 13 Ноя. 2019

    Очень помогло!
    Весь день решал проблему и ваше сообщение довело меня до решения проблемы)

    Комментировать
На вопросы могут отвечать только зарегистрированные пользователи. Вход . Регистрация