WP_Query vs get_posts


8

Tôi đã đọc một số các câu hỏi về SE về những nhưng tôi vẫn không thể hình dung việc sử dụng sự khác biệt WRT chính xác. Có đúng không khi nói rằng tôi có thể sẽ sử dụng WP_Query cho phần lớn các vòng lặp thứ cấp và chỉ sử dụng get_posts nếu tôi cần kết quả trả về trong một mảng hoặc nói cách khác là sự khác biệt chính giữa hai mảng so với trả về đối tượng , hoặc có một số yếu tố chính khác tôi nên nhận thức?

Câu trả lời:


18

Sự khác biệt giữa get_posts & WP_Query

Bạn có thể xem get_posts()như một giảm bớt WP_Query. Trong thực tế nhìn vào nguồn :

//... prepares query array $r
$get_posts = new WP_Query;
return $get_posts->query($r);

get_posts()sử dụng WP_Query, nhưng chỉ trả về một mảng các bài đăng - không có gì hơn. Hơn nữa, nó đặt:

$r['no_found_rows'] = true;

Thông thường (theo mặc định với WP_Queryđối tượng) - WordPress truy vấn tổng số bài đăng có bao nhiêu - ngay cả khi bạn chỉ sau 10. đầu tiên. Nó thực hiện điều này để nó có thể thực hiện phân trang. Vì vậy, get_posts()thực sự là (hơi) nhanh hơn (nó cũng bỏ qua các bài viết dính).

Sử dụng cái nào ...

Nếu bạn chỉ cần một mảng các bài đăng và không cần sử dụng đối tượng truy vấn get_posts(). Mặt khác, nếu bạn cần quyền truy cập vào các phương thức đối tượng truy vấn, hoặc phân trang hoặc các bài đăng dính ở trên cùng, bạn nên sử dụng WP_Query.


2

Một điều quan trọng cần lưu ý là get_posts()có một loạt các đối số mặc định new WP_Query()không có, bao gồm post_typepost_status. Mặc định của chức năng được cấu hình để tạo điều kiện nhận bài đăng được xuất bản. Nếu bạn muốn một cái gì đó khác biệt, bạn sẽ cần phải chuyển các tham số thos một cách rõ ràng, trong khi với WP_Query()bạn sẽ không phải làm điều đó.

Ví dụ: nếu bạn muốn nhận tất cả các bài đăng, bất kể trạng thái bài đăng của họ, bạn sẽ cần gọi: get_posts( array( "post_type" => 'any' ) );(để trống "post_type" - hoặc bất cứ điều gì empty()sẽ đánh giá truesẽ gây ra get_posts()để áp dụng giá trị mặc định của "xuất bản").


1
WP_Querycó cùng loại bài đăng và trạng thái mặc định.
Milo

@Milo Bạn có chắc không? Nhìn vào các dòng class-wp-query.php 1742 - 1746. Tôi tin rằng mặc định post_typelà "" hoặc "any" cho các truy vấn thuế. Các tài liệu dường như cũng hỗ trợ này.
Tom Auger

Loại bài đăng mặc định anytrong một số trường hợp nhất định, như tìm kiếm hoặc một số truy vấn thuế. Chạy một cái mới WP_Queryvà chỉ vượt qua posts_per_page, nó sẽ mặc định để đăng.
Milo
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.