Chào các bạn! Trong bài viết hôm nay, chúng ta sẽ đi tìm hiểu cách hiển thị bài viết trong WordPress và sử dụng vòng lặp WP_Query.
Hiển thị bài viết trong WordPress
Khi chúng ta cài đặt WordPress, chúng ta sẽ thấy có phần “bài viết” (posts), nơi chứa tất cả các bài viết của trang web. Nhưng làm sao để hiển thị nội dung của các bài viết này trên giao diện? Đó chính là vai trò của vòng lặp “get post” trong WordPress.
Vòng lặp get post trong WordPress
Cú pháp:
<?php if (have_posts()) : ?>
<?php while (have_posts()) : the_post(); ?>
// Thông tin cần lấy của 1 bài viết
<?php endwhile; ?>
<?php endif; ?>
Giải thích:
Đây là một vòng lặp “while” trong PHP thực hiện việc kiểm tra nếu có bài viết thì hiển thị ra.
Sử dụng:
Tùy vào vị trí đặt vòng lặp này mà nó sẽ trả về kết quả khác nhau, cụ thể như sau:
- Đặt ở trang chủ (index.php) sẽ liệt kê danh sách các bài viết mới nhất.
- Đặt ở trang chuyên mục (category.php) sẽ hiển thị danh sách bài viết của chuyên mục đó.
- Đặt ở trang chi tiết (single.php) sẽ hiển thị nội dung của bài viết đó.
- Đặt ở trang kết quả tìm kiếm (search.php) sẽ hiển thị kết quả tìm kiếm của từ khóa tương ứng.
Các thành phần của bài viết có thể hiển thị trong vòng lặp query:
the_title()
: Lấy tiêu đề của bài viết.the_content()
: Lấy nội dung của bài viết.the_excerpt()
: Lấy mô tả của bài viết.the_category()
: Lấy chuyên mục của bài viết.the_author()
: Lấy tác giả của bài viết.the_post_thumbnail()
: Lấy hình đại diện của bài viết.the_date()
: Lấy ngày xuất bản của bài viết.the_permalink()
: Lấy đường dẫn của bài viết.
Còn một số thành phần khác ít sử dụng, bạn có thể tìm hiểu thêm.
Ví dụ:
Dưới đây là ví dụ hiển thị danh sách 10 bài viết mới nhất, kèm hình đại diện và mô tả ngắn của bài viết:
<?php if (have_posts()) : ?>
<?php while (have_posts()) : the_post(); ?>
<div class="post">
<a href="<?php the_permalink(); ?>">
<?php the_post_thumbnail(); ?>
</a>
<h4>
<a href="<?php the_permalink(); ?>">
<?php the_title(); ?>
</a>
</h4>
<div class="desc">
<?php the_excerpt(); ?>
</div>
</div>
<?php endwhile; else : ?>
<?php endif; ?>
Vòng lặp WP_Query – Lấy bài viết với tham số
Nếu bạn có yêu cầu cao hơn như lấy bài viết với số lượng nhất định, theo chuyên mục hoặc tác giả, v.v… thì vòng lặp “get post” không đáp ứng được. Đó là lúc chúng ta sử dụng vòng lặp WP_Query, cụ thể như sau:
Cú pháp WP_Query:
<?php
$args = array(
'posts_per_page' => -1,
'post_type' => 'post',
'cat' => 1
);
$the_query = new WP_Query($args);
?>
<?php if ($the_query->have_posts()) : ?>
<?php while ($the_query->have_posts()) : $the_query->the_post(); ?>
// Thông tin cần lấy của 1 bài viết
<?php endwhile; ?>
<?php endif; ?>
<?php wp_reset_query(); ?>
Giải thích WP_Query:
Cú pháp của vòng lặp này gồm 2 phần:
- Phần 1 là một mảng ($args) chứa dữ liệu tham số.
- Phần 2 là phần lấy bài viết bình thường như đã truyền tham số phía trên để có kết quả như mong muốn.
Các tham số đầu vào:
Dưới đây là một số tham số đầu vào phổ biến:
posts_per_page
: Số lượng bài viết.post_type
: Loại bài viết, ví dụ: post là bài viết, page là trang.cat
: ID của chuyên mục cần lấy.p
: ID của bài viết cần lấy.post_status
: Trạng thái của bài viết.author
: ID của tác giả.
Và còn rất nhiều tham số khác mà không thể liệt kê hết ở đây. Bạn có thể tìm hiểu thêm thông qua tài liệu chính của WordPress.
Ví dụ:
Dưới đây là một số ví dụ sử dụng vòng lặp WP_Query:
Ví dụ 1: Lấy 10 bài viết mới nhất trong WordPress
<?php
$args = array(
'posts_per_page' => 10,
'post_type' => 'post',
'post_status' => 'publish'
);
$the_query = new WP_Query($args);
?>
<?php if ($the_query->have_posts()) : ?>
<?php while ($the_query->have_posts()) : $the_query->the_post(); ?>
// Thông tin cần lấy của 1 bài viết
<?php endwhile; ?>
<?php endif; ?>
<?php wp_reset_query(); ?>
Ví dụ 2: Lấy 5 bài viết của chuyên mục “tin tức” (ID chuyên mục là 1)
<?php
$args = array(
'posts_per_page' => 5,
'post_type' => 'post',
'post_status' => 'publish',
'cat' => 1
);
$the_query = new WP_Query($args);
?>
<?php if ($the_query->have_posts()) : ?>
<?php while ($the_query->have_posts()) : $the_query->the_post(); ?>
// Thông tin cần lấy của 1 bài viết
<?php endwhile; ?>
<?php endif; ?>
<?php wp_reset_query(); ?>
Ví dụ 3: Lấy 10 bài viết ngẫu nhiên trong WordPress
<?php
$args = array(
'posts_per_page' => 10,
'post_type' => 'post',
'post_status' => 'publish',
'orderby' => 'rand'
);
$the_query = new WP_Query($args);
?>
<?php if ($the_query->have_posts()) : ?>
<?php while ($the_query->have_posts()) : $the_query->the_post(); ?>
// Thông tin cần lấy của 1 bài viết
<?php endwhile; ?>
<?php endif; ?>
<?php wp_reset_query(); ?>
Tổng kết
Hôm nay, chúng ta đã tìm hiểu cách hiển thị bài viết trong WordPress. Đây là kiến thức quan trọng khi lập trình theme WordPress. Hy vọng bài viết đã giúp bạn hiểu rõ hơn về cách lấy bài viết trong WordPress. Bạn cũng có thể tìm hiểu thêm tài liệu chính thức của WordPress. Chúc bạn thành công trong việc học WordPress!