Người Viết : ViKiMi Editor

Hướng dẫn lấy về thông tin Bài Đăng của WordPress Website, sử dụng lớp WP_Query !
Trong phần trước những cơ bản sự khác nhau giữa cách sử dụng của lớp WP_Query và Function get_posts() đã cho thấy việc sử dụng tốt nhất, hợp lý nhất. Tuy nhiên không phải là không có lý do để chúng ta cân nhắc cách sử dụng một trong 2 lựa chọn. Nhưng có lẽ dễ hơn đó là lựa chọn dùng lớp WP_Query được cung cấp bởi WordPress.
Có một điều chắc chắn bạn phải sử dụng đó là dùng Function :
<?php wp_reset_postdata(); ?>
Function này có chức năng giúp khôi phục lại dữ liệu bài Đăng gốc có nghĩa là cho phép khôi phục các thẻ mẫu mặc định và sẽ quay lại mọi thứ như trước khi vòng lặp thứ cấp của bạn được bắt đầu. Có thể xét nhanh một ví dụ ở dưới:
<?php /* The First Query */ $args_1 = array( 'post_type' => 'post', 'tag' => 'bread,baking', ); $my_query_1 = new WP_Query( $args_1 ); while ( $my_query_1->have_posts() ) { $my_query_1->the_post(); echo '<li>' . get_the_title() . '</li>'; } wp_reset_postdata(); /* The 2nd Query */ $args_2 = array( 'post_type' => 'post', 'category__not_in' => array( 1, 2 ), ); $my_query_2 = new WP_Query( $args_2 ); while ( $my_query_2->have_posts() ) { $my_query_2->the_post(); echo '<li>' . get_the_title( $my_query_2->post->ID ) . '</li>'; } wp_reset_postdata(); ?>
Chúng ta đã thấy rõ việc phải chạy wp_reset_postdata() trong nhiều truy vấn cùng lúc. Nó thực sự hiệu quả hơn mong đợi!
1 ) Cũng giống như khi sử dụng Function get_posts, với lớp WP_Query của WordPress chúng ta cũng có thể lấy về các thông tin mà chúng ta cần.
a >> Chúng ta có một ví dụ để lọc thông tin bài Đăng theo tác giả bằng cách tạo ra một mảng các tham số truyền vào cho truy vấn sử dụng lớp WP_Query. Các tham số như sau :
§ author (int) – Mã ID của tác giả
§ author_name (string) – Tên user_nicename của tác giả
§ author__in (array) – Mảng ID các tác giả nếu muốn lọc bài viết từ nhiều tác giả cùng một lúc
§ author__not_in (array) – Mảng ID của nhiều tác giả muốn loại trừ không có trong tác giả các Bài Đăng cần hiển thị
Example :
$my_query = new WP_Query( array( ‘author__not_in’ => ‘2,6,8’ ) );
2 ) Lọc thông tin liên quan đến các Categories :
a >> Chúng ta cần tạo một mảng các tham số truyền vào cho truy vấn sử dụng lớp WP_Query. Các tham số được sử dụng như sau :
v cat (int) Sử dụng Category id
v category_name (string) Sử dụng Category slug
v category__and (array) Sử dụng Category id
v category__in (array) Sử dụng Category id
v category__not_in (array) Sử dụng Category id
Example :
$my_query = new WP_Query( array( ‘category_name’ => ‘tin-bong-da’ ) );
3 ) Lọc thông tin liên quan đến các Tags
a >> Chúng ta cần tạo một mảng các tham số truyền vào cho truy vấn sử dụng lớp WP_Query. Các tham số được sử dụng như sau :
v tag (string) – Sử dụng tag slug.
v tag_id (int) – Sử dụng tag id.
v tag__and (array) – Sử dụng tag ids.
v tag__in (array) – Sử dụng tag ids.
v tag__not_in (array) – Sử dụng tag ids.
v tag_slug__and (array) (array) – Sử dụng tag slugs.
v tag_slug__in (array) (array) – Sử dụng tag slugs.
Example :
$my_query = new WP_Query( array( ‘tag__not_in’ => ‘1,2,3’ ) );
4 ) Lọc các thông tin liên quan đến các Taxonomy (/ Bao gồm tất cả các Taxonomy)
a >> Dựa vào các thông tin cần phải lọc dữ liệu, chúng ta có thể sử dụng cách lọc thông tin liên quan đến các Taxonomies. Chúng ta sẽ lấy về các bài Đăng liên quan đến các Taxonomies, bao gồm cả Category & Tag :
Chúng ta sẽ dùng tax_query cho mảng tham số sẽ truyền vào lớp WP_Query.
Ví Dụ 1 : Lọc bài Đăng thuộc một category có Slug là ‘tin-bong-da’
$args = array( ‘post_type’ => ‘post’, ‘tax_query’ => array( array( ‘taxonomy’ => ‘category’, ‘field’ => ‘slug’, ‘terms’ => ‘tin-bong-da’, ), ), ); $my_query = new WP_Query( $args );
Ví Dụ 2 : Lọc bài Đăng thuộc một category có Slug là ‘tin-bong-da’ & ‘tin-the-thao’
$args = array( ‘post_type’ => ‘post’, ‘tax_query’ => array( array( ‘taxonomy’ => ‘category’, ‘field’ => ‘slug’, ‘terms’ => array( ‘tin-bong-da’, ‘tin-the-thao’ ), ), ), ); $my_query = new WP_Query( $args );
Ví Dụ 3 : Lọc bài Đăng không thuộc các categories trong mảng ID truyền vào.
$args = array( ‘post_type’ => ‘post’, ‘tax_query’ => array( array( ‘taxonomy’ => ‘category’, ‘field’ => ‘term_id’, ‘terms’ => array( 103, 115, 206 ), ‘operator’ => ‘NOT IN’, ), ), ); $my_query = new WP_Query( $args );
Ví Dụ 4 : Lọc bài Đăng thuộc các categories trong mảng ID truyền vào.
$args = array( ‘post_type’ => ‘post’, ‘tax_query’ => array( array( ‘taxonomy’ => ‘category’, ‘field’ => ‘term_id’, ‘terms’ => array( 1, 2, 3 ), ‘operator’ => ‘IN’, ), ), ); $my_query = new WP_Query( $args );
Ví Dụ 5 : Lọc bài Đăng không thuộc các categories trong mảng Slug truyền vào.
$args = array( ‘post_type’ => ‘post’, ‘tax_query’ => array( array( ‘taxonomy’ => ‘category’, ‘field’ => ‘slug’, ‘terms’ => array(‘tin-moi’, ‘tin-an-ninh’), ‘operator’ => ‘NOT IN’, ), ), ); $my_query = new WP_Query( $args );
Ví Dụ 6 : Lọc bài Đăng thuộc category có Slug là ‘tin-the-thao’ và thuộc Tag có id = 25
$args = array( ‘numberposts’ => 5, ‘post_type’ => ‘post’, ‘relation’ => ‘AND’, ‘tax_query’ => array( array( ‘taxonomy’ => ‘category’, ‘field’ => ‘slug’, ‘terms’ => ‘tin-the-thao’ ), array( ‘taxonomy’ => ‘post-tag’, ‘field’ => ‘term_id’, ‘terms’ => 25 ) ) ); $my_query = new WP_Query( $args );
Ví Dụ 7 : Lọc bài Đăng thuộc category có Slug là ‘tin-the-thao’ và không thuộc Tag có id = 10, 20, 30
$args = array( ‘post_type’ => ‘post’, ‘tax_query’ => array( ‘relation’ => ‘AND’, array( ‘taxonomy’ => ‘category’, ‘field’ => ‘slug’, ‘terms’ => array( ‘tin-the-thao’ ), ), array( ‘taxonomy’ => ‘post-tag’, ‘field’ => ‘term_id’, ‘terms’ => array( 10, 20, 30 ), ‘operator’ => ‘NOT IN’, ), ), ); $my_query = new WP_Query( $args );
Ví Dụ 8 : Lọc bài Đăng thuộc category có Slug là ‘tin-the-thao’ hoặc Tag có Slug ‘tin-ngoai-le’
$args = array( ‘post_type’ => ‘post’, ‘tax_query’ => array( ‘relation’ => ‘OR’, array( ‘taxonomy’ => ‘category’, ‘field’ => ‘slug’, ‘terms’ => array( ‘tin-the-thao’ ), ), array( ‘taxonomy’ => ‘post-tag’, ‘field’ => ‘slug’, ‘terms’ => array(‘tin-ngoai-le’), ‘operator’ => ‘IN’, ), ), ); $my_query = new WP_Query( $args );
CHÚNG TA CẦN LƯU Ý :
Với lớp WP_Query cũng sẽ cung cấp cho chúng ta thêm chức năng phân trang cực kỳ hiệu quả mà WordPress có sẵn. Chức năng này đơn giản khi sử dụng cùng lớp WP_Query.
[ Một vài điều khác cần lưu ý ]
+ Chúng thấy quan hệ RELATION được truyền vào mảng tham số truy vấn sẽ là khác nhau AND hoặc OR …
+ Tham số OPERATION có các giá trị ‘IN’, ‘NOT IN’, ‘AND’, ‘EXISTS’, ‘NOT EXISTS’ . Mặc định giá trị là ‘IN’ .
+ Tham số Numberposts sẽ giúp chúng ta giới hạn số lượng bài Post được hiển thị.
+ Nếu bạn muốn thực hiện phân trang với số lượng bài Posts trên một Page hãy sử dụng tham số posts_per_page.
[ Một VÍ DỤ mẫu hiển thị khi thực hiện truy vấn bài Posts ]
<div class="content"> <?php $wp_query = new WP_Query(array( ‘category_name’ => ‘tin-bong-da’ )); ?> <?php while ($wp_query->have_posts()): $wp_query->the_post(); ?> <div style=""> <span><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></span> <?php the_post_thumbnail(); ?> </div> <?php endwhile; wp_reset_postdata(); ?> </div>