Như bạn đã biết thì trước đây mình đã có một bài cực kỳ chi tiết về WordPress Loop (Vòng lặp của WordPress) để bạn hiểu thêm về cách mà chúng ta sẽ cho hiển thị bài viết trong theme là như thế nào. Cũng từ bài đó, mình đã nhận được một số câu hỏi liên quan về cách sử dụng các tham số như thế nào cho đúng và các tham số nào nên nhớ vì trong một Query nó có rất nhiều tham số khiến bạn phải choáng ngợp.
Vậy thì ở trong bài này, mình sẽ giải thích kỹ hơn về các tham số quan trọng nhất mà bạn cần phải nhớ khi sử dụng WordPress Loop nhằm có thể “lôi” bài viết từ database ra theo đúng ý của mình.
Bạn có thể viết tham số theo dạng thế này nếu như chỉ dùng 1 hoặc 2 tham số.
$new_loop = new WP_Query('posts_per_page=5&s=wordpress');
Trong đó, dấu & sẽ ngăn cách giữa các tham số với nhau.
Nhưng nếu bạn có nhiều tham số thì tốt nhất nên viết thành dạng thế này cho dễ quản lý:
$args = array( 'posts_per_page' => '5', 's' => 'wordpress' ); $new_loop = new WP_Query($args);
Tức là ta sẽ khai báo nó vào một biến để sử dụng. Có một cách mình rất hay xài là tạo các biến này trong file nào đó rồi include vào file functions.php để dễ quản lý nếu theme có nhiều Query khác nhau.
Tham số này tên là posts_per_page
. Giá trị của nó sẽ là một số tự nhiên và số này chỉnh là số bài viết cần hiển thị ra.
$new_loop = new WP_Query( 'posts_per_page=5' );
Tham số này sẽ dùng nhiều nhất khi bạn sử dụng Custom Post Type để Loop nó có thể lấy các bài viết ra từ một post type nào đó. Có thể lấy ra từ nhiều post type khác nhau.
$new_loop = new WP_Query( 'post_type=sanpham' );
Nếu muốn lấy bài từ nhiều post type một lúc thì bạn sẽ viết thế này:
$new_loop = new WP_Query( array( 'post_type' => array( 'post', 'page', 'sanpham' ) ) );
Tham số này rất hữu dụng cho các bạn muốn làm trang tin tức khi sử dụng liên tiếp 2 loop với nhau, đó là bỏ qua các bài đăng sau nó bằng tham số offset
.
$new_loop = new WP_Query( 'offset=3&posts_per_page=4' );
Đoạn trên nghĩa là nó sẽ hiển thị 4 bài nhưng loại trừ 3 bài mới nhất.
Khi website bạn có gắn Sticky Post thì mặc định nó đều gọi ra trong Loop trong mọi trường hợp. Nếu bạn không muốn hiển thị sticky post ở một loop nào đó thì có thể sử dụng tham số ignore_sticky_posts
.
$new_loop = new WP_Query( 'ignore_sticky_posts=1&cat=4&posts_per_page=-1' );
Đoạn trên nghĩa là lấy toàn bộ bài viết (-1) trong category mang ID là 4 nhưng loại trừ sticky post trong category đó.
$new_loop = WP_Query( 'tag=wordpress-co-ban&cat=5' );
Đoạn trên nghĩa là sẽ lấy các bài viết trong category mang ID là 5 có gắn tag là wordpress cơ bản (viết dưới dạng slug).
Ngoài ra, một số tham số liên quan tới tag là:
tag
(string) – Sử dụng slug của tag.tag_id
(int) – Sử dụng với định dạng ID.tag__and
(array) – Lấy bài từ nhiều tag nhưng các bài đó sử dụng chung nhiều tag, sử dụng ID.tag__in
(array) – Lấy bài từ nhiều tag khác nhau, sử dụng ID.tag__not_in
(array) – Không lấy bài từ tag chỉ định, dùng ID.tag_slug__and
(array) – Tương tự với tag__and
nhưng dùng slug.tag_slug__in
(array) – Tương tự với tag__in
nhưng dùng slug.Tương tự với tag, category cũng có các tham số tương tự như vậy, tham khảo tại đây.
Phần ngày tháng này là một trong những tham số khá quan trọng vì nó sẽ có thể giúp ích được cho bạn để giải quyết nhiều vấn đề. Chẳng hạn như bạn muốn lấy bài theo tháng, ngày, giờ, cuối tuần, mùa,…..Hoàn toàn có thể làm được trong tham số này.
$new_query = new WP_Query( 'year=2014&monthnum=06&day=12' );
Ở đoạn trên là ta sẽ lấy bài trong ngày 12 tháng 6 năm 2014.
Nếu bạn cần lấy bài của ngày hôm nay ra thì có thể viết ở dạng như sau:
$today = getdate(); $new_query = new WP_Query( 'year=' . $today["year"] . '&monthnum=' . $today["mon"] . '&day=' . $today["mday"] );
Hoặc lấy toàn bộ bài trong tuần này:
$week = date('W'); $year = date('Y'); $new_query = new WP_Query( 'year=' . $year . '&w=' . $week );
Hoặc bạn cũng có thể lấy chi tiết bài trong thời gian nhất định của những ngày hành chính. Tức là từ 8h đến 17h từ thứ hai đến thứ sáu.
$args = array( 'date_query' => array( array( 'hour'
=> 9, ‘compare’
=> ‘>=’, ), array( ‘hour’
=> 17, ‘compare’
=> ‘<=’, ), array( ‘dayofweek’ => array( 2, 6 ), ‘compare’
=> ‘BETWEEN’, ), ), ‘posts_per_page’ => -1, ); $new_query = new WP_Query( $args );
Tham khảo thêm tại đây.
Ở bài trên chúng ta đã làm quen qua 6 tham số chính khá q
uan trọng trong việc sử dụng Query trong WordPress để lấy bài theo ý muốn. Thực tế sức mạnh của WordPress Query còn lớn hơn nhiều nếu bạn có khả năng sáng tạo tốt và áp dụng hết toàn bộ tinh hoa của WordPress.