Я использую следующий код для получения сообщений:
<?php
$featuredPosts = new WP_Query();
$featuredPosts->query('showposts=5&cat=3');
while ($featuredPosts->have_posts()) : $featuredPosts->the_post(); ?>
<h1><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></h1>
<div class="meta">
By <?php the_author() ?>
</div>
<div class="storycontent">
<?php the_excerpt(); ?>
</div>
<?php endwhile; ?>
Нужно ли использовать wp_reset_query()
? Если я это сделаю, где я должен это разместить?
the_post()
метод (т.$my_custom_query->the_post()
Е.), Вы пополняете переменные записи, на которые смотрит основной запрос, сброс перезаполняет эти переменные предыдущими данными, когда вы их вызываете. Рекомендуется использовать перезагрузки после пользовательских запросов.Ответы:
Привет @janoChen:
Простой ответ: нет.
Ниже то , что PHP - код для функции
wp_reset_query()
от/wp-includes/query.php
в WORDPRESS v3.0.4, а также функцию , названная впоследствии. Вы можете видеть, что в основном это касается изменения глобальных переменных.При использовании
new WP_Query($args)
вы будете присваивать возвращаемое значение из значений локальной переменной, поэтому, если вы не делаете что-то настолько сложное, что вы уже знаете ответ на этот вопрос, то нет, вам не нужно вызыватьwp_reset_query()
:-Майк
источник
the_post()
в своем коде, лучшие практики диктуют, что он должен использоватьwp_reset_postdata()
.wp_reset_query()
вызовыwp_reset_postdata()
, так что это будет работать, хотя другая вещьwp_reset_query()
- сброс$wp_query
глобальной переменной - не нужна, но не вредна в этом случае. Таким образом, ответ на самом деле ДАЭто
WP_Query
само по себе необязательно , но необходимо (или, по крайней мере, хорошо), если вы используете какие-либо связанные функции / методы (например,the_post()
илиsetup_postdata()
) для заполнения глобальных переменных своими данными.По сути, создание нового
WP_Query
объекта - это просто извлечение данных, но использование его для запуска активного цикла и предоставления данных, доступных для тегов шаблонов, изменяет среду, и после этого полезно сбросить все.В целом - это не имеет значительного ущерба производительности, поэтому его всегда легче назвать, чем решить, следует ли вам это забыть или забыть об этом, и что-то загадочно сломано.
Обновить
wp_reset_postdata()
функция кажется более подходящим выбором.wp_reset_query()
сбрасывает глобальные$wp_query
(на которые пользовательскийWP_Query
объект не влияет) и$post
(что может быть, как указано выше) переменные.wp_reset_postdata()
только восстанавливает$post
, чего должно быть достаточно.источник
Нет. Если вы создаете экземпляр своего собственного объекта WP_Query, вы можете делать то, что хотите. Однако, если вы вмешаетесь в
global $wp_query
переменную, то это произойдет в глобальном пространстве имен, затрагивающем любой скрипт, который одновременно использует эту переменную. И если вы делаете что-то, чтобы изменить данные в нем, вы также должны сбросить его после того, как вы закончили его использовать.источник
Если вы используете пользовательский запрос, как это
Тогда вы не столкнетесь с проблемами. В противном случае, если на той же странице есть другой цикл, вы обязательно получите неожиданные результаты. Я не использовал wp_reset_query () в приведенном выше коде (который был помещен в мой файл header.php. Затем, когда я попал в single.php, в основном я получаю страницы с подробностями других категорий, что разочаровывает. Позже я понял, что я забыл сбросить запрос сверху.Вскоре он начал работать как шарм.
источник