WP_Query отображает ВСЕ записи

2 окт. 2014 г., 10:56:48
Просмотры: 30.7K
Голосов: 4

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

<?php 

    $args = array('numberposts' => 1,
                    'meta_key' => 'display',
                    'meta_value' => 'about'
    );

    $about_preview_query = new WP_Query($args);

    if ($about_preview_query->have_posts()) {
        print "<h1>НАЙДЕНЫ ЗАПИСИ</h1>";
    }

    while ($about_preview_query->have_posts()) {
        $about_preview_query->the_post();
        print "<h1>";
        the_title();

        print "</h1>";

    }
?>

Делаю ли я что-то неправильно? После прочтения документации по WP_Query() я не могу понять, где ошибаюсь, буду благодарен за любую помощь.

Обновление

Я попробовал этот код, но всё ещё получаю тот же результат. Все записи возвращаются в цикле.

    $args = array(
        'posts_per_page' => 1,
        'meta_query' => array(
            array(
                'key' => 'display',
                'value' => 'about',
                'compare' => '=',
             )
        ),
    );

Обновление 2

Похоже, если я вывожу $about_preview_query->found_posts, результат равен 1. Поэтому я подозреваю, что что-то не так с тем, как я перебираю записи:

<?php if ($about_preview_query->have_posts()): ?>

    <h1>Найдено <?php print $about_preview_query->found_posts ?> записей</h1>

    <?php while ($about_preview_query->have_posts()): $about_preview_query->the_post(); ?>
        <h2><?php the_title(); ?></h2>
    <?php endwhile; ?>

<?php endif; ?>
6
Комментарии

Вы пробовали сбросить postdata?

Pieter Goosen Pieter Goosen
3 окт. 2014 г. 10:43:05

Привет, спасибо за ответ. Я буквально только что попробовал добавить wp_reset_postdata(); перед своим запросом за секунду до вашего комментария. Но проблема осталась - выводится все записи.

Mark Winterbottom Mark Winterbottom
3 окт. 2014 г. 10:46:51

После вашего запроса сделайте var_dump внутри тега pre, чтобы посмотреть, что возвращает запрос. Пример: ?><pre><?php var_dump($about_preview_query); ?></pre><?php

Pieter Goosen Pieter Goosen
3 окт. 2014 г. 10:51:12

Странно, хотя found_posts показывает количество 1, var dump указывает, что запрос возвращает все записи :S.

Mark Winterbottom Mark Winterbottom
3 окт. 2014 г. 10:57:36

Тогда записи добавляются откуда-то еще. Где-то вы выполняете пользовательские запросы, которые не были сброшены. Это может быть даже экземпляр pre_get_posts.

Pieter Goosen Pieter Goosen
3 окт. 2014 г. 11:06:18

Я подумал, просто для проверки, удалите ваш meta_query и оставьте только параметр posts_per_page, протестируйте и посмотрите, сохранится ли такое же поведение. Также проверьте наличие пользовательских фильтров или функций, которые могут добавлять записи в возвращаемый массив с вашими постами.

Pieter Goosen Pieter Goosen
3 окт. 2014 г. 11:48:17
Показать остальные 1 комментариев
Все ответы на вопрос 3
0

Это происходит потому, что вы передаете неверные аргументы. Укажите правильные аргументы для WP_Query().

Также ознакомьтесь с параметрами произвольных полей.

Ещё один момент — вам нужно использовать код вида:

$args = array(
    'posts_per_page' => 5, // Количество записей на странице
    'meta_query' => array( // Запрос по произвольным полям
        array(
            'key'     => 'display', // Ключ произвольного поля
            'value'   => 'about', // Значение для сравнения
            'compare' => '=', // Оператор сравнения (подробнее по ссылке выше)
        ),
    ),
);
2 окт. 2014 г. 11:25:18
0

Параметр numberposts не существует. Вместо него используйте posts_per_page. Таким образом, ваш код будет выглядеть так...

<?php 

    $args = array(
        'posts_per_page' => 1,
        'meta_key' => 'display',
        'meta_value' => 'about'
    );

    $about_preview_query = new WP_Query($args);

    if ( $about_preview_query->have_posts() ) {
        print "<h1>НАЙДЕНЫ ЗАПИСИ</h1>";
    }

    while ( $about_preview_query->have_posts() ) {
        $about_preview_query->the_post();
        print "<h1>";
        the_title();
        print "</h1>";
    }
?>
2 окт. 2014 г. 11:11:33
1

Все, что вам нужно сделать, это заменить

'posts_per_page' => 1,

на

'posts_per_page' => -1,
26 июн. 2017 г. 15:53:27
Комментарии

-1 вернет все записи.

Picard Picard
26 июн. 2017 г. 17:09:01