WP_Query | Truy vấn bài viết trong wordpress theo ý mình

Cập nhật lần cuối 20/04/2016 by trong WordPress vào 13/10/2013 có 6382 Views

Chào các bạn!

Update:

20.04.2016: Query bài viết theo meta value định dạng kiểu serialize Click here

30.10.2015: Query bài viết theo meta value định dạng kiểu date và order theo meta value Click here

Hôm này sau một thời gian tìm hiểu về các hàm truy vấn để xuất thông tin bài viết ra ngoài web thì có các cách sau (Các cách mình biết)

  • query_posts() //Không rõ lắm, Nhưng không lên dùng qua nhiều trong cùng một trang
  • get_posts() // An toàn khi dùng
  • WP_Query //An toàn khi dùng tất cả mọi nơi
  • ……

 

Trên đây là một số hàm truy vấn bài viết. Và hôm nay mình sẽ giới thiệu các bạn về hàm WP_Query() .

wp-query

Với hàm WP_Query() bạn có thể làm mọi thứ theo ý bạn. VD: bài mới nhất, bài theo chuyên mục, bài viết theo chủ đề category hoặc slug … Rất thuận lợi và hay đúng không? (Còn các hàm khác mình sẽ nói ở các bài viết sau.)

Nào chúng ra cùng bắt tay vào tìm hiểu nhé.

Tóm tắt:

  1. Cách sử dụng
  2. Các tham số và hàm
  3. Kết luận, chú ý

Nội Dung:

1. Cách sử dụng:

 

VD1: Lấy 5 bài viết tại category có ID là 1

<?php
 $query = array(
 'cat' => 1,
 'posts_per_page' => 5,
 )
 // The Query
 $the_query = new WP_Query($query);
 
 if($the_query->have_posts()):
 // The Loop
 while ( $the_query->have_posts() ) : $the_query->the_post();
 the_title();
 endwhile;
 endif;

 // Reset Post Data
 wp_reset_postdata();
?>

 

Hoặc

<?php
 // The Query
 $the_query = new WP_Query('cat=1&amp;posts_per_page=5);
 
 if($the_query->have_posts()):
 // The Loop
 while ( $the_query->have_posts() ) : $the_query->the_post();
 the_title();
 endwhile;
 endif;

 // Reset Post Data
 wp_reset_postdata();
?>

Nhìn qua như vậy chắc các bạn cũng đã hiểu phần nào đó rồi nhỉ. Và bây giờ chúng ta đến các hàm và tham số của các hàm. Điều này giúp ta xuất được các bài biết ra theo yêu cầu mà ta (Hay khách hàng) yêu cầu.

Các bạn thấy dòng $the_query = new WP_Query(‘cat=1&posts_per_page=5&order=desc’); chứ. Đây là cách viết trực tiếp còn đây $the_query = new WP_Query( $query ); là cách viết gián tiếp.

Với cách viết trực tiếp sẽ nhanh hơn trong trường hợp ít tham số, còn trong trường hợp nhiều tham số thì các bạn hãy dùng cách viết gián tiếp nhé.

Sau đây mình xin giới thiệu một số hàm cơ bản sẽ giúp các bạn truy vấn bài viết được như ý.

$query = array(

//Xuất theo tác giả Chọn 1 trong các điều kiện dưới

'author' => 1, // Xuất bài viết theo id của tác giả

'author' => 2,6,17,38, // Xuất bài viết theo id của một số tác giả

'author' => -44, // Ngoại trừ tác giả có id là 44

'author_name' => 'svl', // Xuất bài viết theo tên tác giả

// Lọc bài Viết theo category Chọn 1 trong các điều kiện dưới

'cat' => 1,2,3,4, // các bài trong category với id=1,2,3,4

'cat' => -1,-2, // Ngoại trừ trong cat có id=1,2

'category_name' => 'svl,html', // các category với slug có tên svl, html

'category__and' => array('2','6'), // Lấy hết các bài trong cat có id = 2,6

'category__in' => array('2','6'), // Lấy bài của cat có id=2 hoặc id = 6

'category__not_in' => array('2','6'), //Lấy bài viết mà trong đó không có một trong 2 cat có id là 2 hoặc 6

// Lọc bài viết theo TAG

/*

* tag (string) - use tag slug.
* tag_id (int) - use tag id.
* tag__and (array) - use tag ids.
* tag__in (array) - use tag ids.
* tag__not_in (array) - use tag ids.
* tag_slug__and (array) - use tag slugs.
* tag_slug__in (array) - use tag slugs.

*/

'tag' => 'svl', //Xuất bài viết bởi tag slug

'tag' => 'svl+html+php', // Gồm tất cả các thẻ

'tag' => array('svl','html','php'), //Gồm các bài viết có hoặc không các thẻ

// Xuất bài viết theo Post & Page

'p' => '2', // Hiện bài viết có id = 2

'page_id' => 2, // Hiện trang có id = 2

);

Ngoài ra còn rất nhiều tham số và hàm khác nữa. Bạn có thể tham khảo tại WP_Query

Bây giờ đến phần offset, order và orderby nha

  1. Offset: $query = new WP_Query( ‘offset=3’ ) ); Với câu lệnh này thì ta sẽ hiện bài viết mới nhất và bỏ qua 3 bài đầu tiên. Nghĩa là sẽ hiện lên bắt đầu từ bài mới thứ 4.
  1. Order: Gồm 2 giá trị là ASC(tăng dần) và DESC(giảm dần) Ví dụ: $query = new WP_Query(‘order=DESC’)
  2. Orderby:

‘none’ – No order (available with Version 2.8).
‘ID’ – Order by post id. Note the captialization.
‘author’ – Order by author.
‘title’ – Order by title.
‘name’ – Order by post name (post slug).
‘date’ – Order by date.
‘modified’ – Order by last modified date.
‘parent’ – Order by post/page parent id.
‘rand’ – Random order.
‘comment_count’ – Order by number of comments (available with Version 2.9).
‘menu_order’ – Order by Page Order. Used most often for Pages (Order field in the Edit Page Attributes box) and for Attachments (the integer fields in the Insert / Upload Media Gallery dialog), but could be used for any post type with distinct ‘menu_order’ values (they all default to 0).
‘meta_value’ – Note that a ‘meta_key=keyname’ must also be present in the query. Note also that the sorting will be alphabetical which is fine for strings (i.e. words), but can be unexpected for numbers (e.g. 1, 3, 34, 4, 56, 6, etc, rather than 1, 3, 4, 6, 34, 56 as you might naturally expect). Use ‘meta_value_num’ instead for numeric values.
‘meta_value_num’ – Order by numeric meta value (available with Version 2.8). Also note that a ‘meta_key=keyname’ must also be present in the query. This value allows for numerical sorting as noted above in ‘meta_value’.

Ôi còn rất là nhiều. Các bạn có thể xem tại  WP_Query đây là mình chỉ lấy mấy cái hay dùng nhất cho các bạn thôi nha.

Chú ý: sau mỗi lần truy vấn phải có wp_reset_postdata() hoặc wp_reset_query() để không ảnh hưởng tới các query khác trên cùng 1 trang

Update:

1. Query bài viết theo meta value định dạng kiểu date và order theo meta value
2. Query bài viết theo meta value định dạng kiểu serialize

Chúc các bạn có được 1 trang web như ý mình. Một CMS thực thụ từ WordPress

WP_Query | Truy vấn bài viết trong wordpress theo ý mình
5 (100%) 3 votes
Từ khóa: ,
  • Bình luận
Có thể bạn quan tâm
x