Intereting Posts
Как подключить мою функцию к запуску только после отправки формы входа Как поместить блок кода между в do_shortcode ()? Фильтрация по столбцам Meta Custom Fields – Производительность Обновление WordPress от 2,7 до 3,3 Проблема с Permalink Как определить родительский контейнер текущего виджета (идентификатор виджета боковой панели) Формат WP_User_Query json Как скрыть некоторые категории на панели управления Можно ли использовать отдельный пользовательский пост в качестве главной страницы сайта? У меня есть гибкая технология cloudflare, как перенаправить на https для сервера Nginx Как заставить WordPress использовать не-жадный синтаксический анализ коротких кодов? Нет данных WooCommerce – загрузка пользовательских файлов Инструмент каркаса для темы WordPress Детализированные детали продукта, которые изменят общую сумму корзины Мой шаблон не будет применяться, тема по-прежнему возвращается к index.php

Получать сообщения, используя WP_Query

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

Поэтому я стараюсь

<?php $temp = $wp_query; $wp_query= null; $args = array( 'orderby' => 'rand', ); $wp_query = new WP_Query($args); $wp_query->query('showposts=8' . '&paged='.$paged ); while ($wp_query->have_posts()) : $wp_query->the_post(); ?> 

Я могу видеть 8 сообщений, но кажется, что «orderby» => «rand» не работает.

Прошло довольно много времени с тех пор, как я работал с WordPress, но мне кажется, что:

Вы выполняете запрос дважды.

  • Сначала, когда вы передаете $args конструктору во время создания экземпляра.

  • Второй, когда вы вызываете query() .

При этом вы по существу переписываете первый запрос (тот, который содержит orderby = rand).

Документация WP_Query упоминает, что get_posts() вызывается, если вы используете параметр в конструкторе, и его нельзя вызывать дважды:

& get_posts () – выборка и возврат запрошенных сообщений из базы данных. Также укажите $ posts и $ post_count. Примечание. Это вызвано во время построения, если WP_Query сконструирован с аргументами. Он не является идемпотентным и не должен вызываться более одного раза в одном и том же объекте запроса. Это может привести к сломанному запросу.

И в документации метода query() указано, что он вызывает get_posts() , поэтому он вызывается дважды:

& query ($ query)вызов parse_query () и get_posts () . Верните результаты get_posts ().

Решение:

  • Вы должны либо поместить все в $args , либо
  • добавьте параметр $wp_query->query(..) также к $wp_query->query(..) .

Взгляните на ссылку класса WP_Query и отработайте оттуда. Попробуйте основные примеры, поиграйте с параметрами, пока не почувствуете, как работает WP_Query и цикл.

https://codex.wordpress.org/Class_Reference/WP_Query

Причина, по которой ваш запрос не работает, заключается в том, что вы не правильно передаете параметры (используйте массив args для всех) и используете устаревшие параметры.