Khi nào nên sử dụng WP_query (), query_posts () và pre_get_posts phần 1 (ok)

https://qastack.vn/wordpress/50761/when-to-use-wp-query-query-posts-and-pre-get-posts

pre_get_postslà một bộ lọc, để thay đổi bất kỳ truy vấn nào . Nó thường được sử dụng để chỉ thay đổi 'truy vấn chính':

add_action('pre_get_posts','wpse50761_alter_query');
function wpse50761_alter_query($query){

      if( $query->is_main_query() ){
        //Do something to main query
      }
}

get_posts ()

Đây thực chất là một trình bao bọc cho một thể hiện riêng biệt của một WP_Queryđối tượng. Điều này trả về một mảng các đối tượng bài. Các phương thức được sử dụng trong vòng lặp ở trên không còn có sẵn cho bạn. Đây không phải là một 'Vòng lặp', chỉ đơn giản là một mảng của đối tượng bài.

<ul>
<?php
global $post;
$args = array( 'numberposts' => 5, 'offset'=> 1, 'category' => 1 );
$myposts = get_posts( $args );
foreach( $myposts as $post ) :  setup_postdata($post); ?>
    <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
<?php endforeach; wp_reset_postdata(); ?>
</ul>

Có các kịch bản hợp pháp để sử dụng query_posts($query), ví dụ:

  1. Bạn muốn hiển thị danh sách các bài đăng hoặc bài đăng loại tùy chỉnh trên một trang (sử dụng mẫu trang)

  2. Bạn muốn phân trang của những bài viết đó hoạt động

Bây giờ tại sao bạn muốn hiển thị nó trên một trang thay vì sử dụng một mẫu lưu trữ?

  1. Nó trực quan hơn cho quản trị viên (khách hàng của bạn?) - họ có thể thấy trang trong 'Trang'

  2. Tốt hơn là thêm nó vào menu (không có trang, họ sẽ phải thêm url trực tiếp)

  3. Nếu bạn muốn hiển thị nội dung bổ sung (văn bản, hình thu nhỏ đăng hoặc bất kỳ nội dung meta tùy chỉnh nào) trên mẫu, bạn có thể dễ dàng lấy nội dung đó từ trang (và tất cả cũng có ý nghĩa hơn đối với khách hàng). Xem nếu bạn đã sử dụng một mẫu lưu trữ, bạn sẽ cần mã hóa nội dung bổ sung hoặc sử dụng ví dụ tùy chọn chủ đề / plugin (điều này làm cho nó ít trực quan hơn cho khách hàng)

Đây là một mã ví dụ đơn giản hóa (sẽ có trên mẫu trang của bạn - ví dụ: page-page-of-post.php):

Bây giờ, để hoàn toàn rõ ràng, chúng ta cũng có thể tránh sử dụng query_posts()ở đây và sử dụng WP_Querythay vào đó - như vậy:

Last updated

Was this helpful?