Sử dụng tham số để truy vấn với WP_Query trong WordPress

Khi bạn viết theme hay lập trình Plugin, việc truy vấn sử dụng WP_Query trong WordPress là điều không thể tránh khỏi. Có những yêu cầu thiết kế website khó khăn, nhưng nếu nắm bắt được truy vấn WP_Query với các tham số đầu vào và giá trị đầu ra sẽ làm việc code trở nên dễ dàng hơn rất nhiều. Trong bài viết này, mình sẽ chia sẻ với bạn một số cách để sử dụng WP_Query trong WordPress, giúp bạn nắm hiểu rõ hơn về các tham số đầu vào và giá trị đầu ra khi truy vấn.

Cách sử dụng WP_Query trong WordPress

Trước khi bắt đầu vào tìm hiểu các tham số đầu vào và giá trị đầu ra, mình cần nắm rõ cách sử dụng của WP_Query, và để theo dõi kết quả xem câu query đó trả về những thứ gì bạn có thể dùng một plugin của WordPress để làm điều đó là plugin Debug Bar.

WP_Query là một lớp đối tượng được định nghĩa, hoạt động của nó liên quan đến việc truy vấn phức tạp từ các loại Post và Page (kể cả custom post type). Cú pháp của WP_Query như sau:

Trong đó:

  • $query: là biến đối tượng trả về.
  • $args: là một biến mảng chứa các tham số truy vấn.

Để kiểm tra có bài đăng nào trả về trong truy vấn không bạn sử dụng hàm $query->have_posts(). Giá trị trả về của hàm have_posts() là TRUE hoặc FALSE.

Ví dụ như sau:

Dữ liệu trả về được sử dụng trong vòng lặp để lấy dữ liệu. Ví dụ như sau:

Trong đó:

  • $the_query->the_post(): Trả về mảng chứa dữ liệu.
  • wp_reset_postdata(): Khi sử dụng $the_query->the_post(), bạn nên sử dụng để reset về dữ liệu truy vấn mặc định.

Tham số truy vấn trong WP_Query WordPress

Tham số truy vấn theo tác giả

Khi sử dụng tham số “author”, kết quả trả về sẽ là các bài viết của 1 hoặc nhiều các tác giả được liêt kê trong tham số. Có nhiều dạng liệt kê như: ID, name, một mảng, hoặc loại bỏ tác giả đó ra khỏi truy vấn. Cụ thể như sau:

Tham số truy vấn theo danh mục bài viết

Để thực hiện lấy các bài viết trong danh mục, bạn sử dụng các tham số như ‘cat’, ‘category_name’,…. Các cách dùng cụ thể của các tham số như sau:

Tham số truy vấn theo Tags

Để truy vấn lấy danh sách các bài viết theo Tag cũng tương tự như danh mục, cũng có các tham số như sau:

Tham số truy vấn theo Taxonomy

Khi bạn cần lấy các bài viết theo phân loại bài viết thì bạn có thể sử dụng Query với các tham số sau để lấy được danh sách các bài viết.

Lấy các bài viết theo một Taxonomy cụ thể.

Lọc các bài viết với tham số AND

Lọc các bài viết với tham số OR

Lọc các bài viết với tham số OR và AND

Tham số truy vấn tìm kiếm (search)

Được sử dụng khi bạn muốn tìm kiếm một bài viết, tác giả,…..

Tham số truy vấn theo Post và Page

Lấy các bài viết theo post và page.

Lấy danh sách bài viết kiểu post ngoại trừ các post có id được liệt kê.

Tham số truy vấn Post và Page sử dụng mật khẩu

Tham số truy vấn loại post

Tham số truy vấn bài viết theo trạng thái (Status)

Đây là các tham số để sử dụng khi cần lấy danh sách các bài viết theo trạng thái cái này thường sử dụng khi bạn code phần admin của WordPress hơn

publish,pending,draft,auto-draft, future, private, inherit, trash, any

Tham số truy vấn bài viết theo bình luận

Tham số truy vấn bài viết theo phân trang

// Truy vấn theo số post trên một trang

$query = new WP_Query( array( ‘posts_per_page’ => 3 ) );

$query = new WP_Query( array( ‘posts_per_page’ => -1 ) );

// Truy vấn không phân trang

$query = new WP_Query( array( ‘nopaging’ => true ) );

// Truy vấn theo số trang cụ thể

$query = new WP_Query( array( ‘offset’ => 3 ) );

// Truy vấn theo số trang cụ thể cũng như số post trên mỗi trang cụ thể.

$query = new WP_Query( array( ‘posts_per_page’ => 5, ‘offset’ => 3 ) );

$query = new WP_Query( array( ‘paged’ => get_query_var( ‘paged’ ) ) );

Trên Page tĩnh hoặc page template thì dùng đoạn sau

$paged = ( get_query_var(‘page’) ) ? get_query_var(‘page’) : 1;
$query = new WP_Query( array( ‘paged’ => $paged ) );

Tham số truy vấn bài viết theo thứ tự sắp xếp

Khi bạn muốn truy vấn các bài viết theo thứ tự sắp xếp theo điều kiện mà bạn mong muốn thì bạn có thể sử dụng các query sau.

$args = array(
‘orderby’ => ‘title’,
‘order’ => ‘DESC’,
);
$query = new WP_Query( $args );

$args = array(
‘orderby’ => ‘menu_order title’,
‘order’ => ‘DESC’,
);
$query = new WP_Query( $args );

$args = array(
‘orderby’ => ‘rand’,
‘posts_per_page’ => 1,

);
$query = new WP_Query( $args );

Show post phổ biến bằng comment

$args = array(
‘orderby’ => ‘comment_count’
);
$query = new WP_Query( $args );

Show post theo custon fields

$args = array(
‘post_type’ => ‘product’,
‘orderby’ => ‘meta_value_num’,
‘meta_key’ => ‘price’,
);
$query = new WP_Query( $args );

$args = array(
‘orderby’ => array( ‘title’ => ‘DESC’, ‘menu_order’ => ‘ASC’ )
);
$query = new WP_Query( $args );

$args = array(
‘orderby’ => array( ‘meta_value_num’ => ‘DESC’, ‘title’ => ‘ASC’ ),
‘meta_key’ => ‘age’
);
$query = new WP_Query( $args );

$args = array(
‘post_type’ => ‘my_custom_post_type’,
‘meta_key’ => ‘age’,
‘orderby’ => ‘meta_value_num’,
‘order’ => ‘ASC’,
‘meta_query’ => array(
array(
‘key’ => ‘age’,
‘value’ => array( 3, 4 ),
‘compare’ => ‘IN’,
),
),
);
$query = new WP_Query( $args );

$q = new WP_Query( array(
‘meta_query’ => array(
‘relation’ => ‘AND’,
‘state_clause’ => array(
‘key’ => ‘state’,
‘value’ => ‘Wisconsin’,
),
‘city_clause’ => array(
‘key’ => ‘city’,
‘compare’ => ‘EXISTS’,
),
),
‘orderby’ => array(
‘city_clause’ => ‘ASC’,
‘state_clause’ => ‘DESC’,
),
) );

Tham số truy vấn bài viết theo thời gian

Khi muốn truy vấn bài viết theo mốc thời gian mà bạn mong muốn.

$query = new WP_Query( ‘year=2012&monthnum=12&day=12’ );

$args = array(
‘date_query’ => array(
array(
‘year’ => 2012,
‘month’ => 12,
‘day’ => 12,
),
),
);
$query = new WP_Query( $args );

$today = getdate();
$query = new WP_Query( ‘year=’ . $today[‘year’] . ‘&monthnum=’ . $today[‘mon’] . ‘&day=’ . $today[‘mday’] );

$today = getdate();
$args = array(
‘date_query’ => array(
array(
‘year’ => $today[‘year’],
‘month’ => $today[‘mon’],
‘day’ => $today[‘mday’],
),
),
);
$query = new WP_Query( $args );

$week = date( ‘W’ );
$year = date( ‘Y’ );
$query = new WP_Query( ‘year=’ . $year . ‘&w=’ . $week );

$args = array(
‘date_query’ => array(
array(
‘year’ => date( ‘Y’ ),
‘week’ => date( ‘W’ ),
),
),
);
$query = new WP_Query( $args );

$args = array(
‘date_query’ => array(
array(
‘hour’ => 9,
‘compare’ => ‘>=’,
),
array(
‘hour’ => 17,
‘compare’ => ‘<=’,
),
array(
‘dayofweek’ => array( 2, 6 ),
‘compare’ => ‘BETWEEN’,
),
),
‘posts_per_page’ => -1,
);
$query = new WP_Query( $args );

$args = array(
‘date_query’ => array(
array(
‘after’ => ‘January 1st, 2013’,
‘before’ => array(
‘year’ => 2013,
‘month’ => 2,
‘day’ => 28,
),
‘inclusive’ => true,
),
),
‘posts_per_page’ => -1,
);
$query = new WP_Query( $args );

$args = array(
‘date_query’ => array(
array(
‘column’ => ‘post_date_gmt’,
‘before’ => ‘1 year ago’,
),
array(
‘column’ => ‘post_modified_gmt’,
‘after’ => ‘1 month ago’,
),
),
‘posts_per_page’ => -1,
);
$query = new WP_Query( $args );

Tham số truy vấn bài đăng bằng Custom Field

Bạn cũng có thể truy vấn để lấy các bài đăng bẳng Custom Field và với kiểu truy vấn này bạn vẫn có thể dùng các biểu thức logic.

Tham số truy vấn bài đăng bằng quyền user

Khi bạn muốn hiển thị các bài đăng thuộc quyền của một user nào đó bạn có thể sử dụng query này để truy vấn bài đăng đó.

Leave a Reply

Your email address will not be published. Required fields are marked *

Up Next:

Chuẩn hóa dữ liệu đầu vào và ra trong WordPress

Chuẩn hóa dữ liệu đầu vào và ra trong WordPress