WP_Query vs query_posts so với get_posts so với pre_get_posts

Phân tích nhanh

  • query_posts - không sử dụng ngoại trừ trong các trường hợp hiếm hoi
  • 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ả theo định dạng mảng
  • query_posts

    Sử dụng query_posts không được khuyến cáo nữa. Có những cách tốt hơn để hoàn thành những gì bạn đang cố gắng hoàn thành. Đ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 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. Chỉ đơn giản là không có lý do bạn không nên thay đổi truy vấn hiện tại. Tôi chắc chắn có một số trường hợp cạnh mà nó nên được sử dụng, nhưng tôi không thể nghĩ ra bất cứ điều gì ra khỏ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 thành 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ủ…

     function tj_change_home_number ($ query) {if (is_home ()) {$ query-> set ('posts_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ả lại 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 thể hiện của WP_Query . Khi bạn tương tác với các biến đăng bài toàn cục trong một khuôn mẫu, đó là kết quả của WP_Query . Các trường hợp sử dụng cho điều này là rất nhiều, nhưng như với get_posts, tôi muốn khai báo một WP_Query mới cho mục đích kéo các bài viết liên quan, một cái gì đó dọc theo các dòng đó. Chỉ cần ghi nhớ rằng nếu bạn chạy hàm the_post () trong khi lặp qua một WP_Query mới, hãy chạy hàm wp_reset_postdata () sau khi bạn đã thực hiện vòng lặp để đặt lại dữ liệu bài đăng chung thành truy vấn chính ban đầu.

    get_posts

    Bằng cách sử dụng get_posts, bạn đang có hiệu lực gọi một WP_Query mới, và nhận được thông tin đó được trả về trong một định dạng mảng. Tôi thường sẽ sử dụng get_posts khi tôi trả lại bài đăng cho thanh trượt trên trang chủ hoặc gọi một số bài đăng có liên quan trong thanh bên. WP_Query có thể dễ dàng được sử dụng, nhưng nó là một cách tốt để nhận một mảng các bài viết mà không sửa đổi các biến bài viết toàn cục. 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ỉ lặp qua một mảng.

    Điều này có thể hơi khó hiểu, vì vậy hãy đặt câu hỏi trong phần bình luận bên dưới.

    Tài liệu tham khảo:
    WP_Query
    pre_get_posts
    query_posts
    get_posts

Xem Thêm