Anonim

Быстрый пробой

  • 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

Wp_query против query_posts против get_posts против pre_get_posts