WordPress как на ладони
Очень Удобный и Быстрый Хостинг для сайтов на WordPress. Пользуюсь сам и вам рекомендую!

Пагинация и 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
7.3 года назад 2
  • 2
    Kama9602

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

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

    Комментировать
  • 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 4.3 года назад

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

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