[PRE_GET_POSTS] Lọc danh sách bài viết trong wordpress sử dụng action hook – pre_get_posts (ok)

https://www.hoangweb.com/wordpress/wordpress-posts-filter-hook-pre_get_posts

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ả tìm kiếm 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

12345678910

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 đó bạn có thể lọc posts/page/post type theo ý muốn.

123456

//nếu là trang chủecho $query->is_home()//nếu là trang tìm kiế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ủ

123456

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

123456789

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 số lượng posts trên một phân trang

1234567891011121314151617

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ó thể sử dụng posts_where, xem thêm cách lọc dữ liệu posts tại đây.

Last updated