Myślę, że teraz rozumiem, co próbujesz zrobić. Gdy uruchomisz niestandardowe zapytanie z WP_Queryustawionym 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_Querynadal działa w całej bazie danych i zlicza wszystkie posty spełniające kryteria zapytania.
Można to zobaczyć, patrząc na $found_postsi $max_num_pageswł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_rowsktóry używa wartości boolowskich, których można użyć do zwolnienia zapytania po znalezieniu 5 potrzebnych postów. Zmusi to WP_Querynie szukać więcej postów spełniających kryteria po tym, jak pobierze liczbę zapytań. Ten parametr jest już wbudowany get_posts, dlatego get_postsjest nieco szybszy niż WP_Querychociaż get_postsuż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'