Требуется разъяснение query_posts

Я понимаю, что делает query_posts и как он работает. Я также знаю, что использовать его не рекомендуется. Но я хотел бы точно знать, что переменная «$ posts» делает в этой настройке:

<?php global $query_string; $posts = query_posts($query_string.'&cat=-9'); if (have_posts()) : while (have_posts()) : the_post(); ... endwhile; else: ... endif; wp_reset_query(); // reset the query ?> 

Может кто-нибудь объяснить, как «$ posts» используется в цикле? спасибо

Может кто-нибудь объяснить, как «$ posts» используется в цикле?

Это не так.

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

 global $query_string; query_posts($query_string.'&cat=-9'); if (have_posts()) : while (have_posts()) : the_post(); ... endwhile; endif; 

Это связано с тем, что query_posts() переопределяет глобальный объект $wp_query , то есть тот же объект запроса, который использует have_posts() такие как have_posts() и the_post() для отображения сообщений.

и именно по этой причине эту функцию нельзя использовать:

  • переопределяя широко используемую глобальную переменную, он легко имеет побочные эффекты
  • он очень медленный, потому что вы переопределяете уже запущенный запрос с другим, выполняя запрос к базе данных 2 раза.

Если вам нужен отдельный запрос из основного (глобального) запроса, чем нет смысла переопределять основной запрос, просто выполните вторичный запрос, используя объект get_posts или get_posts .

Если вам нужно изменить основной запрос, чем изменить его до его запуска, таким образом вы будете запускать только 1 запрос вместо 2, и ваш код будет быстрее. Чтобы изменить основной запрос перед его 'pre_get_posts' , используйте 'pre_get_posts' действия 'pre_get_posts' .