Tôi nghĩ rằng bây giờ tôi hiểu những gì bạn đang cố gắng làm. Khi bạn chạy truy vấn tùy chỉnh WP_Query
và đặt giới hạn chỉ nhận 5 bài đăng trên mỗi trang, chỉ có 5 bài đăng sẽ được truy vấn truy vấn và truy vấn đó sẽ chỉ giữ 5 bài đăng, NHƯNG vì mục đích phân trang, WP_Query
vẫn chạy qua toàn bộ cơ sở dữ liệu và đếm tất cả các bài viết phù hợp với tiêu chí của truy vấn.
Điều đó có thể được nhìn thấy khi bạn nhìn vào $found_posts
và $max_num_pages
các thuộc tính của truy vấn. Hãy lấy một ví dụ:
Bạn có 20 bài viết thuộc loại bài đăng mặc định post
. Bạn chỉ cần 5 bài viết mới nhất mà không cần phân trang. Truy vấn của bạn trông như thế này
$q = new WP_Query( 'posts_per_page=5' );
var_dump( $q->posts )
sẽ cung cấp cho bạn 5 bài viết mới nhất như mong đợi
echo $q->found_posts
sẽ cho bạn 20
echo $q->max_num_pages
sẽ cho bạn 4
Tác động của công việc bổ sung này là tối thiểu đối với các trang web chỉ có một vài bài đăng, nhưng điều này có thể gây tốn kém nếu bạn đang chạy một trang web có hàng trăm hoặc hàng nghìn bài đăng. Đây là một sự lãng phí tài nguyên nếu bạn chỉ cần 5 bài viết mới nhất
Có một tham số không có tài liệu được gọi là no_found_rows
sử dụng các giá trị boolean mà bạn có thể sử dụng để thực hiện bảo lãnh truy vấn của mình sau khi tìm thấy 5 bài đăng bạn cần. Điều này sẽ buộc WP_Query
không tìm kiếm thêm bất kỳ bài đăng nào toán học các tiêu chí sau khi nó đã lấy được số lượng bài đăng được yêu cầu. Tham số này đã được tích hợp sẵn get_posts
, đó là lý do tại sao get_posts
nhanh hơn một chút so với WP_Query
mặc dù get_posts
sử dụngWP_Query
Phần kết luận
Tóm lại, nếu bạn sẽ không sử dụng phân trang trên một truy vấn, thì 'no_found_rows=true'
việc truy vấn của bạn để tăng tốc mọi thứ và tiết kiệm lãng phí tài nguyên là điều luôn khôn ngoan .
'posts_per_page=5'