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
2.5 года назад 2
  • 2
    Kama7450

    Тут все упирается в глобальную переменную $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 2.5 года назад

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

    Коля 6 мес назад

    У меня 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>';
    ?>
    Комментировать
  • 1

    Перепробовала все возможные способы, ничего не помогло. Пока не наткнулась на статью о 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,
    	));
    }
    1. В файле 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; ?>

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

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