Sự cố nhanh
- query_posts - không sử dụng trừ trường hợp cạnh hiếm
- pre_get_posts - sử dụng nếu bạn muốn thay đổi truy vấn mặc định trên một trang
- WP_Query mới - sử dụng để nhận các kết quả khác nhau từ truy vấn chính
- get_posts - giống như WP_Query, chỉ trả về kết quả ở định dạng mảng thay thế
query_posts
Sử dụng query_posts không được khuyến khích nữa. Có nhiều cách tốt hơn để thực hiện những gì bạn đang cố gắng thực hiện. Đang cố gắng thay đổi truy vấn chính? Sử dụng hành động pre_get_posts để lọc kết quả (xem bên dưới). query_posts ném truy vấn chính ban đầu sang một bên (sau khi nó đã được chạy) và tạo một truy vấn chính mới. Nó thay thế tất cả các biến toàn cục liên quan đến bài đăng và dẫn đến một cuộc gọi cơ sở dữ liệu hoàn toàn mới. Đơn giản là không có lý do gì bạn không nên thay đổi truy vấn hiện có. Tôi chắc chắn có một số trường hợp cạnh nên được sử dụng, nhưng tôi không thể nghĩ ra bất kỳ trường hợp nào ngoài đỉnh đầu của tôi. Sử dụng một trong các tùy chọn bên dưới, vì chúng sẽ có nhiều khả năng phù hợp hơn.
pre_get_posts
Đây là một bộ lọc. Điều này sửa đổi truy vấn chính đến một trang. Vì vậy, ví dụ: chúng tôi muốn thay đổi số lượng kết quả được trả về trên trang chủ
hàm tj_change_home_number ($ query) {if (is_home ()) {$ query-> set ('Post_per_page', 2); trở về; }} add_action ('pre_get_posts', 'tj_change_home_number');
Điều này sẽ thay đổi truy vấn chính để chỉ trả về 2 bài đăng trên trang chủ.
WP_Query
Truy vấn chính trên bất kỳ mẫu nào được gọi là một phiên bản của WP_Query . Khi bạn tương tác với các biến bài đăng toàn cầu trong một mẫu, đó là kết quả của WP_Query . Các trường hợp sử dụng cho điều này rất nhiều, nhưng cũng như với get_posts, tôi sẽ khai báo một WP_Query mới với mục đích kéo các bài đăng liên quan, một cái gì đó dọc theo những dòng đó. Chỉ cần lưu ý rằng nếu bạn chạy hàm_post () trong khi lặp qua WP_Query mới, hãy chạy hàm wp_reset_postdata () sau khi bạn hoàn thành việc lặp lại để đặt lại dữ liệu bài đăng toàn cầu về truy vấn chính ban đầu.
get_posts
Bằng cách sử dụng get_posts, bạn có hiệu lực gọi WP_Query mới và nhận thông tin đó được trả về ở định dạng mảng. Tôi thường sẽ sử dụng get_posts khi tôi trả lại các bài đăng cho một thanh trượt trên trang chủ hoặc gọi một số bài đăng liên quan trong một thanh bên. WP_Query có thể dễ dàng được sử dụng, nhưng đó là một cách tốt để nhận được một loạt các bài đăng mà không sửa đổi các biến bài đăng toàn cầu. Theo quan điểm của tôi, nó đơn giản nhất và dễ sử dụng nhất. Không có cuộc gọi chức năng cần thiết sau khi dữ liệu của bạn được trả về, chỉ cần lặp qua một mảng.
Điều này có thể hơi khó hiểu, vì vậy hãy thoải mái đặt câu hỏi trong các ý kiến dưới đây.
Tài liệu tham khảo:
WP_Query
pre_get_posts
query_posts
get_posts
