Jump to content
  • 0

Постраничная навигация. Как создать?


P0jar
 Share

Question

Помогите, пожалуйста, добавить постраничную навигацию на сайт. Обычный шаблон, созданный мною на основе Bootstrap, самый базовый WP функционал. Однако, проблема, ни одна навигация не хочет работать. Будь-то плагин, будь-то "официальный код" или же самопальная функция wp-kama.

Может кто сталкивался с подобным или же имеет в рукаве альтернативные варианты? Помогите пожалуйста. Любой нужно код оперативно выложу. 

<?php get_header(); ?>
<div class="col-xs-12 col-sm-8 col-md-8 text">
    <h2 class="static_title">Новости</h2>
<?php
query_posts('posts_per_page=20');
if(have_posts()){ while(have_posts()){ the_post(); ?>
<article>
    <header><h1><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h1></header> <!--Заголовок самой статьи, cсылка ведёт на single.php-->
  <p class="review"><?php the_content(); ?></p>
<?php }}
else echo 'Записей нет';
?> 
</article>
</div>
<?php get_sidebar(); ?>
<?php get_footer(); ?>

Код на index.php 

Внизу, после </article> думаю добавить постраничную.

Я осведомлён, что ей какой-то конфликт с query_post, однако, альтернативные варианты замены этой функции тоже не приводят любую навигацию в жизнь. 

Link to comment
Share on other sites

5 answers to this question

Recommended Posts

  • 0

всмысле конфликт с query_post вам не так нужно сделать.

то что вы сделали создаст ещё один запрос . т.е.  у вас зачем то два раза будет одно и тоже выбираться только во второй раз с ограничением. 

можете попробовать трюк сделать.  https://wp-kama.ru/hook/post_limits

что то типа такого

add_filter( 'post_limits', 'editLimitForTaxonomy' );
function editLimitForTaxonomy( $limit,  $query ) {
   if (!is_admin()){
      if ( $query->query_vars['taxonomy'] == 'ВАША ТАКСОНОМИЯ' ){
         $limit = 'LIMIT 20';
      }
   } 
	return $limit;
}

конкретно этот хук я не использовал. использовал подобные, поэтому второй параметр query там имеет место быть

сам query_posts уберите.  он и так вызывается в категориях и таксономиях

хм. если в index.php - то сами придумайте как определить что это index.php в функции, чтобы только для этого раздела работало..

если не получится то там уже смотреть нужно что это. баг или нет.

на крайний случай - заюзайте просто WP_Query 

а вообще - количество постов для обычных категорий устанавливается в настройках->чтение, это так к слову

Link to comment
Share on other sites

  • 0

Параметр paged передается? Если не хочется заморачиваться, можно поставить плагин WP Pagenavi, который умеет генерить ссылки для навигации. Просто где-нибудь внизу/вверху страницы добавить код а-ля:

<?php if ( function_exists('wp_pagenavi') ) wp_pagenavi(); ?>

posts_per_page указывается в настройках Settings > Reading, если нужно изменить количество постов для какого-то конкретного архива, можно использовать фильтр pre_get_posts чтобы не обращаться к БД повторно.

Вышеописанное актуально для стандартных циклов (Loop)

9 часов назад, Николя223 сказал:

можете попробовать трюк сделать.  https://wp-kama.ru/hook/post_limits

что то типа такого


add_filter( 'post_limits', 'editLimitForTaxonomy' );
function editLimitForTaxonomy( $limit,  $query ) {
   if (!is_admin()){
      if ( $query->query_vars['taxonomy'] == 'ВАША ТАКСОНОМИЯ' ){
         $limit = 'LIMIT 20';
      }
   } 
	return $limit;
}

 

Я бы не трогал в этом случае лимиты. Зачем велосипедить, если вордпресс сам отлично справляется, зная № страницы и количество отображаемых постов?

Link to comment
Share on other sites

  • 0

Я сталкивался с такой проблемой.

он пишет о том что не работает wp_pagenavi()

так как он перезатирает предыдущий запрос.  

2 часа назад, hedgehog сказал:

использовать фильтр pre_get_posts чтобы не обращаться к БД повторно.

А вам не кажется что вы предлагаете тоже самое только с другого ракурса?)

позже напишу как можно сделать

Link to comment
Share on other sites

  • 0
В 1/24/2017 в 16:07, Николя223 сказал:

А вам не кажется что вы предлагаете тоже самое только с другого ракурса?)

Не кажется. Подменять raw query это крайний случай, когда нет других способов. Тем более, в вашем примере лимиты указаны неправильно - будут показываться все те же 20 постов каждый раз, на любой странице, см LIMIT: https://dev.mysql.com/doc/refman/5.7/en/select.html

 

В 1/24/2017 в 16:07, Николя223 сказал:

Я сталкивался с такой проблемой.

он пишет о том что не работает wp_pagenavi()

так как он перезатирает предыдущий запрос.

А конкретнее - потому что в новый запрос не передается "paged" поэтому он всегда отображает последние 20 постов. А передавать этот параметр в этом конкретном случае особого смысла нет: в некоторых случаях будет 404я ошибка, например если значение posts_per_page в новом запросе меньше, чем в оригинальном запросе.

Задача простая: задать posts_per_page ДО выполнения основного запроса. Либо указав значение в Settings>Readings, либо используя тот же pre_get_posts (если нужно изменить только для конкретного случая, например для отображения терминов в таксономии book)

Пример для таксономии book:

add_action('pre_get_posts', 'posts_per_book_tax_page');

function posts_per_book_tax_page($query) {
	if ( is_admin() || !$query->is_main_query() )
		return;

	if ( $query->is_tax('book') )
		$query->set('posts_per_page', 20);
}

Больше про Conditional Tags (а-ля is_tax): https://codex.wordpress.org/Conditional_Tags

PS: Проверкa на is_main_query() ОБЯЗАТЕЛЬНА.

PPS: кстати, в 4.1 добавили свою функцию: the_posts_pagination

Главный вопрос: вся эта музыка с лимитом 20 постов на страницу - затевается для ВСЕХ страниц, или для конкретных? Если для конкретных - то для каких (категории, теги, иные архивы)?

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy