Переопределить количество постов для отдельного цикла в WordPress?

7 февр. 2011 г., 22:19:27
Просмотры: 14.3K
Голосов: 4

Возможно ли переопределить установленное количество постов на странице (заданное в Настройках чтения админки WordPress)? Мне нужно, чтобы мой пользовательский цикл выводил неограниченное количество записей.

0
Все ответы на вопрос 5
2
10

Аргумент, который контролирует количество отображаемых записей в запросе, называется posts_per_page

<?php query_posts( array( 
                         'post_type' => 'post',
                         'posts_per_page' => -1 ) 
      ); 
?>

Также стоит отметить, что в ветке 3.0 существует ошибка, которая мешает отображению всех записей при использовании значения -1. Ошибка исправлена в версии 3.1, но временным решением может быть использование очень большого числа вместо -1.

Смотрите:

http://core.trac.wordpress.org/ticket/15150

7 февр. 2011 г. 23:13:58
Комментарии

В вашем параметре posts_per_page есть опечатка. Вы написали post_per_page вместо posts_per_page. (Я попытался отредактировать ваш пост, но у меня нет прав на редактирование). Большое спасибо!

user1462 user1462
7 февр. 2011 г. 23:29:35

Избегайте эту функцию, она очень плохо влияет на производительность, вызывает множество проблем с пагинацией и т.д. Используйте pre_get_posts для изменения отображаемого контента на странице и WP_Query, если вам нужно получить записи для других целей. Никогда не используйте query_posts

Tom J Nowell Tom J Nowell
3 апр. 2020 г. 18:55:11
0

Конечно, измените запрос, добавив

<?php query_posts('post_type=post&numberposts=-1'); ?>

7 февр. 2011 г. 22:43:18
0

Эйлин права, но лучше использовать аргументы в виде массива <?php query_posts( array( 'post_type' => 'post', 'numberposts' => -1 ) ); ?>

7 февр. 2011 г. 23:01:25
0

У меня была такая же проблема... Я решил добавить пользовательскую переменную, а затем перехватывать эту переменную во время pre_get_posts, чтобы установить параметр запроса post_per_page:

function custom_query_vars_filter($vars) {
  $vars[] = 'post_per_page_override';
  return $vars;
}
add_filter( 'query_vars', 'custom_query_vars_filter' );


add_action( 'pre_get_posts', 'rc_modify_query_get_design_projects' );
function rc_modify_query_get_design_projects( $query ) {

if( $query->query_vars['post_per_page_override'] == '3') {
        $query->set('posts_per_page', '3');
    }
}

Затем я пошел еще дальше и сделал так, чтобы можно было получить точное количество записей, которое нужно отобразить, через пользовательскую переменную запроса:

function custom_query_vars_filter($vars) {
  $vars[] = 'post_per_page_override';
  return $vars;
}
add_filter( 'query_vars', 'custom_query_vars_filter' );


add_action( 'pre_get_posts', 'rc_modify_query_get_design_projects' );
function rc_modify_query_get_design_projects( $query ) {

if( $query->query_vars['post_per_page_override']) {
        $customPPPlimit = $query->query_vars['post_per_page_override'];
        $query->set('posts_per_page', $customPPPlimit);
    }
}

У меня сработало...

1 мар. 2017 г. 01:08:00
0

Если вы используете пользовательский цикл, просто укажите параметр posts_per_page, например:


$query = new \WP_Query( [ 'posts_per_page' => 100 ] );
if ( $query->have_posts() ) {
    ......и т.д.

Вы можете установить posts_per_page в значение -1 для неограниченного количества записей, но это очень плохая практика. Вместо этого установите столько записей, сколько, по вашему мнению, ваш сервер сможет обработать без сбоев, чтобы ваш сайт не упал при создании слишком большого количества записей. 200 - хороший верхний предел.

В противном случае используйте фильтр pre_get_posts для изменения параметров, передаваемых в запросы:

add_action( 'pre_get_posts', function ( $query ) {
    if ( is_admin() ) {
        return;
    }
    $query->set( 'posts_per_page', 100 );
}

Обратите внимание, что это установит лимит в 100 записей для всех запросов, включая RSS-ленты, REST API, XMLRPC и т.д.

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

3 апр. 2020 г. 19:05:55