Myślę, że teraz rozumiem, co próbujesz zrobić. Gdy uruchomisz niestandardowe zapytanie z WP_Query
ustawionym limitem, aby uzyskać tylko 5 postów na stronę, zapytanie będzie pobierało tylko 5 postów, a to zapytanie będzie zawierało tylko 5 postów, ALE ze względu na paginację, WP_Query
nadal działa w całej bazie danych i zlicza wszystkie posty spełniające kryteria zapytania.
Można to zobaczyć, patrząc na $found_posts
i $max_num_pages
właściwości zapytania. Weźmy przykład:
Masz 20 postów należących do domyślnego typu postu post
. Ty tylko potrzebujesz najnowszych 5 posty bez paginacji. Twoje zapytanie wygląda następująco
$q = new WP_Query( 'posts_per_page=5' );
var_dump( $q->posts )
da ci 5 najnowszych postów zgodnie z oczekiwaniami
echo $q->found_posts
da tobie 20
echo $q->max_num_pages
da tobie 4
Wpływ tej dodatkowej pracy jest minimalny na witryny zawierające tylko kilka postów, ale może to być kosztowne, jeśli prowadzisz witrynę z setkami lub tysiącami postów. Jest to marnowanie zasobów, jeśli kiedykolwiek będziesz potrzebować tylko 5 najnowszych postów
Istnieje nieudokumentowany parametr o nazwie, no_found_rows
który używa wartości boolowskich, których można użyć do zwolnienia zapytania po znalezieniu 5 potrzebnych postów. Zmusi to WP_Query
nie szukać więcej postów spełniających kryteria po tym, jak pobierze liczbę zapytań. Ten parametr jest już wbudowany get_posts
, dlatego get_posts
jest nieco szybszy niż WP_Query
chociaż get_posts
używaWP_Query
Wniosek
Podsumowując, jeśli nie zamierzasz używać paginacji w zapytaniu, zawsze mądrze jest 'no_found_rows=true'
w zapytaniu przyspieszyć i zaoszczędzić na marnowaniu zasobów.
'posts_per_page=5'