Lọc danh sách bài viết trong wordpress sử dụng action hook – pre_get_posts

Quảng cáo
Ads_ngang
Website dinhthuanit.com có bài Lọc danh sách bài viết trong wordpress sử dụng action hook – pre_get_posts

WordPress cung cấp dữ liệu mặc định trong những template, tỉ dụ ở trang chủ sẽ liệt kê các posts mới nhất hay với trang category/taxonomy là những posts thuộc sở hữu category/term taxonomy đó…
Nhưng bạn cũng cũng có thể điều tiết dữ liệu này trước khi được hiển thị ra các file template. WordPress có filter pre_get_posts giúp bạn lọc bản kê bài viết theo ý muốn.
lọc kết quả bài viết wordpress

Liệt kê các bài viết posts theo điều kiện, theo ngữ cảnh bạn sử dụng hooks pre_get_posts . Ví dụ: nếu muốn trang kết quả kiếm tìm cũng đều có thể cho kết quả cả kiểu post lẫn page, chúng ta chèn đoạn code sau vào functions.php

 function searchfilter($query) { if ($query-> is_search && !is_admin() ) { $query-> set('post_type',array('post','page')); } return $query; } add_filter('pre_get_posts','searchfilter');  

Tham số $query là đối tượng WP_Query . Trong đối tượng này chứa sẵn một số hàm template tag cho bạn kiểm tra điều kiện của dữ liệu hiện tại. Dựa vào đây bạn cũng đều có thể lọc posts/page/post type theo ý muốn.

 //nếu là trang chủ echo $query-> is_home() //nếu là trang kiếm tìm (search template) echo $query-> is_search //query chính để lấy bài viết (loop) $query-> is_main_query()  

Có thể kết hợp thêm các template tag của wordpress như is_admin(),..
Một số ví dụ khác về ứng dụng của hook pre_get_posts .

Hiển thị các bài viết trong một category ở trang chủ

 function my_home_category( $query ) { if ( $query-> is_home() && $query-> is_main_query() ) { $query-> set( 'cat', '123' ); } } add_action( 'pre_get_posts', 'my_home_category' );  

Cho phép hiển thị dữ liệu Custom Post Types trong kết quả tìm kiếm

 function search_filter($query) { if ( !is_admin() && $query-> is_main_query() ) { if ($query-> is_search) { $query-> set('post_type', array( 'post', 'movie' ) ); } } } add_action('pre_get_posts','search_filter');  

Thay đổi con số posts trên một phân trang

 function hwl_home_pagesize( $query ) { if ( is_admin() || ! $query-> is_main_query() ) return; if ( is_home() ) { // Display only 1 post for the original blog archive $query-> set( 'posts_per_page', 1 ); return; } if ( is_post_type_archive( 'movie' ) ) { // Display 50 posts for a custom post type called 'movie' $query-> set( 'posts_per_page', 50 ); return; } } add_action( 'pre_get_posts', 'hwl_home_pagesize', 1 );  

Ngoài hook pre_get_posts bạn cũng có thể sử dụng posts_where , xem thêm cách lọc dữ liệu posts tại đây.

Bài viết Lọc danh sách bài viết trong wordpress sử dụng action hook – pre_get_posts được tổng hợp và biên tập bởi: dinhthuanit.com. Mọi ý kiến đóng góp và phản hồi vui lòng gửi Liên Hệ cho dinhthuanit.com để điều chỉnh. dinhthuanit.com xin cảm ơn.

Bài Viết Liên Quan


Bài Viết Khác


Quảng cáo
Ads_ngang