Быстрый пробой
- query_posts - не использовать, кроме как в редких случаях
- pre_get_posts - используйте, если хотите изменить запрос по умолчанию на странице
- новый WP_Query - использовать для получения других результатов из основного запроса
- get_posts - так же, как WP_Query, просто возвращает результаты в формате массива
query_posts
Использование query_posts больше не рекомендуется. Есть лучшие способы достичь того, чего вы пытаетесь достичь. Пытаетесь изменить основной запрос? Используйте действие pre_get_posts для фильтрации результатов (см. Ниже). query_posts отбрасывает исходный основной запрос в сторону (после того, как он уже был выполнен) и создает новый основной запрос. Он заменяет все глобальные переменные, связанные с публикацией, и приводит к совершенно новому вызову базы данных. Просто нет причин, по которым вы не должны просто изменять существующий запрос. Я уверен, что есть некоторые крайние случаи, когда это должно использоваться, но я не могу думать ни о чем вне головы. Используйте один из вариантов ниже, так как они, скорее всего, будут более подходящими.
pre_get_posts
Это фильтр. Это изменяет основной запрос к странице. Так, например, мы хотим изменить количество результатов, которые возвращаются на главной странице …
function tj_change_home_number ($ query) {if (is_home ()) {$ query-> set ('posts_per_page', 2); вернуть; }} add_action ('pre_get_posts', 'tj_change_home_number');
Это изменит основной запрос и вернет только 2 сообщения на главной странице.
WP_Query
Основной запрос любого вызываемого шаблона - это экземпляр WP_Query . Когда вы взаимодействуете с глобальными переменными записей в шаблоне, это результат WP_Query . Вариантов использования для этого много, но, как и в случае с get_posts, я бы объявил новый WP_Query для извлечения связанных постов, что-то в этом роде. Просто имейте в виду, что если вы запускаете функцию the_post () во время цикла нового WP_Query, запустите функцию wp_reset_postdata () после завершения цикла, чтобы сбросить глобальные данные поста в исходный основной запрос.
get_posts
Используя get_posts, вы фактически вызываете новый WP_Query и возвращаете эту информацию в формате массива. Обычно я буду использовать get_posts, когда возвращаю сообщения для слайдера на главной странице или вызываю некоторые связанные сообщения на боковой панели. WP_Query также можно легко использовать, но это хороший способ получить массив сообщений без изменения глобальных переменных записей. На мой взгляд, это самый простой и простой в использовании. После того, как ваши данные возвращены, никаких вызовов функций не требуется, просто цикл по массиву.
Это может немного сбивать с толку, поэтому не стесняйтесь задавать вопросы в комментариях ниже.
Ссылка:
WP_Query
pre_get_posts
query_posts
get_posts