WordPress

wp query — Kiedy należy używać WP_Query vs query_posts() vs get_posts()?

  • 13 września, 2010
  • 4 min read
wp query — Kiedy należy używać WP_Query vs query_posts() vs get_posts()?


query_posts – Nigdy nie powinieneś używać query_posts. Oprócz tego, co powiedział @Rarst, naprawdę duży problem z query_posts oznacza to, że psuje główny obiekt zapytania (przechowywany w $wp_query ). Wiele wtyczek i niestandardowego kodu opiera się na głównym obiekcie zapytania, więc uszkodzenie głównego obiektu zapytania oznacza, że ​​naruszysz funkcjonalność wtyczek i niestandardowego kodu. Tylko jedną z takich funkcji jest najważniejsza funkcja paginacji, więc jeśli złamiesz główne zapytanie, przerwiesz paginację.

Aby udowodnić, jak źle query_posts to na dowolnym szablonie wykonaj poniższe czynności i porównaj wyniki

var_dump( $wp_query );
query_posts( '&posts_per_page=-1' );
var_dump( $wp_query );

get_posts I WP_Query są właściwym sposobem konstruowania wtórny zapytania ( jak powiązane posty, suwaki, polecane treści i treści na statycznych stronach głównych ) z. Należy zauważyć, że nie powinieneś używać żadnego z nich na rzecz głównego zapytania na stronie głównej, pojedynczej stronie lub jakimkolwiek typie strony archiwum, ponieważ zakłóci to funkcjonalność strony. Jeśli chcesz zmodyfikować główne zapytanie, użyj pre_get_posts aby to zrobić, a nie niestandardowe zapytanie. (AKTUALIZACJA: W przypadku statycznych stron głównych i prawdziwych stron zobacz Używanie pre_get_posts na prawdziwych stronach i statycznych stronach głównych*)

Warto przeczytać!  tworzenie wtyczek - Jak zwiększyć niestandardowe zapytania GET API REST postu WP za pomocą niestandardowych taksonomii

W istocie WP_Query jest używany przez zapytanie główne i jest również używany przez get_postsale chociaż get_posts() wykorzystuje WP_Queryjest kilka różnic

  • get_posts są szybsze niż WP_Query. Marża zależy od ilości wszystkich postów na stronie. Powodem tego jest, get_posts Karnety 'no_found_rows' => true domyślnie do WP_Query który pomija/prawnie przerywa paginację. Z 'no_found_rows' => true, WP_Query pobiera liczbę postów, o które pytano, a następnie wycofuje się, gdzie domyślnie szuka dalej wszystkich postów pasujących do zapytania, aby obliczyć paginację.

    Z tego powodu, get_posts() należy używać wyłącznie w przypadku zapytań niestronicowanych. Paginacja get_posts to naprawdę jeden wielki bałagan. WP_Query należy stosować w przypadku wszystkich zapytań stronicowanych

  • get_posts() nie mają na to wpływu posts_* filtry gdzie WP_Query ulega wpływowi tych filtrów. Powód jest taki, że get_postsdomyślnie przechodzi 'suppress_filters' => true Do WP_Query

  • get_posts ma kilka dodatkowych parametrów, takich jak include, exclude, numberposts I category. Parametry te są zmieniane na prawidłowe parametry dla WP_Query przed przekazaniem WP_Query. include zostaje przemieniony w post__in, exclude do post__not_in, category do cat I numberposts do posts_per_page. Tylko uwaga, Wszystko parametrów, do których można przekazać WP_Query pracuje z get_postsTy Móc zignoruj ​​i nie używaj domyślnych parametrów get_posts

  • get_posts zwraca tylko $posts własność WP_Query chwila WP_Query zwraca cały obiekt. Obiekt ten jest całkiem przydatny, jeśli chodzi o warunki warunkowe, paginację i inne przydatne informacje, które można wykorzystać wewnątrz pętli.

  • get_posts nie używa pętli, ale a foreach pętla do wyświetlania postów. Ponadto domyślnie nie są dostępne żadne tagi szablonów. setup_postdata( $post ) musi zostać użyty, aby udostępnić znaczniki szablonu. WP_Query wykorzystuje pętlę, a znaczniki szablonów są domyślnie dostępne

  • get_posts Karnety 'ignore_sticky_posts' => 1 Do WP_QueryWięc get_posts domyślnie ignoruje przyklejone posty

Warto przeczytać!  To narzędzie SmartCrawl automatyzuje je za Ciebie

Na podstawie powyższego, czy użyć get_posts Lub WP_Query zależy od Ciebie i czego tak naprawdę potrzebujesz od zapytania. Powyższe powinno pomóc Ci w dokonaniu wyboru


Źródło