posts_per_page не работает

25 окт. 2012 г., 09:36:39
Просмотры: 33.4K
Голосов: 1

Вот мой пользовательский запрос:

            <?php
                $Poz = new WP_Query(array(
                    'posts_per_page' => 3,
                    'orderby' => 'date',
                    'order' => 'DESC',
                    'no_found_rows' => true,
                    'update_post_term_cache' => false,
                    'update_post_meta_cache' => false,
                ));
            // Запрос
            $the_query = new WP_Query( $Poz );

            // Цикл
            while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
            <li><a href="<?php the_permalink(); ?>" title="Читать запись <?php the_title(); ?>"><?php the_title(); ?></a></li>
            <?php endwhile; wp_reset_postdata(); ?>

Я начал пытаться минимизировать свои запросы. Нашел несколько статей об этом. Этот метод подразумевает выполнение всего двух запросов.

Вы также можете проверить это здесь.

Вопрос касается аргумента posts_per_page. Почему он не работает? Я думаю, это связано с

'no_found_rows' => true,

этим аргументом. Это означает отсутствие пагинации для запроса. Но как мы можем ограничить количество записей? или что мы можем использовать вместо posts_per_page в этом запросе. Давайте обсудим это.

-- Обновлено --

Я изменил метод запроса на query_posts вместо new WP_Query:

<?php

# Кэшированные запросы WordPress
# SE Disq : http://wordpress.stackexchange.com/questions/70424/posts-per-page-doesnt-work/70425

    $Poz = array(
    'posts_per_page' => 5, 
    'orderby' => 'date', 
    'order' => 'DESC', 
    'no_found_rows' => true,
    'update_post_term_cache' => false, 
    'update_post_meta_cache' => false, 
    );

    query_posts( $Poz ); while ( have_posts() ) : the_post(); ?>

    <li><a href="<?php the_permalink(); ?>" title="Читать запись <?php the_title(); ?>"><?php the_title(); ?></a></li>
<?php  endwhile;  wp_reset_query(); ?>
0
Все ответы на вопрос 1
12

Да, используй 'nopaging' => true

http://codex.wordpress.org/Class_Reference/WP_Query#Pagination_Parameters

$Poz = array( 
    'posts_per_page' => 3, 
    'orderby' => 'date', 
    'order' => 'DESC', 
    'update_post_term_cache' => false, 
    'update_post_meta_cache' => false, 
    'nopaging' => true, 
); 
$the_query = new WP_Query( $Poz );
25 окт. 2012 г. 09:48:27
Комментарии

'nopaging' => true это то же самое? Это приводит к большему количеству запросов или нет? Также я добавил эту строку, но количество отображаемых постов соответствует основному запросу.

Fatih Toprak Fatih Toprak
25 окт. 2012 г. 09:50:31

nopaging говорит WordPress: слушай, дружище, я знаю, что ты по умолчанию разбиваешь на страницы, но остановись и просто дай мне мои X постов. Так что, предполагаю, запросов будет меньше.

Daniel Sachs Daniel Sachs
25 окт. 2012 г. 09:55:26

Я запутался, но это тоже не работает. :/

`<?php $Poz = new WP_Query(array( 'posts_per_page' => 5, 'orderby' => 'date', 'order' => 'DESC', 'no_found_rows' => true, 'update_post_term_cache' => false, 'update_post_meta_cache' => false, 'nopaging' => true, )); $the_query = new WP_Query( $Poz );

// Цикл
while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
<li><a href="<?php the_permalink(); ?>" title="<?php the_title(); ?> yazısını oku."><?php the_title(); ?></a></li>

<?php endwhile; wp_reset_postdata(); ?>`

Fatih Toprak Fatih Toprak
25 окт. 2012 г. 09:58:17

Подожди секунду. Это не причина. Я совсем упустил это. Должно быть так: $Poz = array( 'posts_per_page' => 3, 'orderby' => 'date', 'order' => 'DESC', 'no_found_rows' => true, 'update_post_term_cache' => false, 'update_post_meta_cache' => false, 'nopaging' => true, ); $the_query = new WP_Query( $Poz ); Параметр $Poz должен быть аргументами для new WP_Query

Daniel Sachs Daniel Sachs
25 окт. 2012 г. 10:02:00

Попробуй, пожалуйста, не работает. Все посты выводятся (: Запрос не учитывает числа.

Fatih Toprak Fatih Toprak
25 окт. 2012 г. 10:06:47

Дело не в 'no_found_rows' => true,, а в передаче аргументов в new WP_Query

Daniel Sachs Daniel Sachs
25 окт. 2012 г. 10:10:59

Стоит ли изменить метод запроса? Например, использовать get_posts(); или что-то подобное вместо new Query?

Fatih Toprak Fatih Toprak
25 окт. 2012 г. 10:13:46

Это на ваше усмотрение. Я бы использовал WP_Query. Суть в том, что $Poz должен быть аргументами для запроса, а не новым запросом.

Daniel Sachs Daniel Sachs
25 окт. 2012 г. 10:19:08

Теперь, кажется, я понял. Вот новый код: https://gist.github.com/3951155 Но учтите, что при добавлении параметра no-pagging он снова не работает.

Fatih Toprak Fatih Toprak
25 окт. 2012 г. 10:26:57

давайте продолжим это обсуждение в чате

Fatih Toprak Fatih Toprak
25 окт. 2012 г. 10:29:46

У меня не работает. Я использую WP Query внутри шорткода [posts], который создал сам. Атрибуты "posts_per_page" и "nopaging" передаются как атрибуты шорткода (здесь всё работает), но он возвращает мне ВСЕ записи.

Marco Panichi Marco Panichi
19 янв. 2016 г. 18:59:41

РЕШЕНО! Проблема была в том, что у меня были прикреплённые записи. Так что рабочий запрос для меня содержит 'posts_per_page'=>3 и 'ignore_sticky_posts'=>true.

Marco Panichi Marco Panichi
19 янв. 2016 г. 19:14:38
Показать остальные 7 комментариев