Hiển thị số post tùy ý trong loop WordPress

Hiển Thị Số Lượng Bài Viết Tùy Ý Trong Loop WordPress
WordPress, một nền tảng quản lý nội dung (CMS) phổ biến, cung cấp nhiều cách để hiển thị nội dung động trên trang web của bạn. Một trong những thao tác cơ bản nhất là hiển thị danh sách các bài viết (posts) trong một vòng lặp (loop). Tuy nhiên, đôi khi bạn không muốn hiển thị tất cả các bài viết mà chỉ muốn giới hạn số lượng hiển thị. Bài viết này sẽ hướng dẫn bạn cách hiển thị một số lượng bài viết tùy ý trong vòng lặp WordPress, đi sâu vào các phương pháp khác nhau và cung cấp các ví dụ cụ thể.
Sử Dụng Tham Số ‘posts_per_page’ trong WP_Query
WP_Query
là một class mạnh mẽ trong WordPress cho phép bạn truy vấn cơ sở dữ liệu và lấy dữ liệu bài viết theo các tiêu chí cụ thể. Một trong những tham số quan trọng nhất của WP_Query
là posts_per_page
. Tham số này xác định số lượng bài viết bạn muốn hiển thị trong vòng lặp.
Ví dụ, để hiển thị 5 bài viết mới nhất, bạn có thể sử dụng đoạn code sau:
<?php
$args = array(
'posts_per_page' => 5
);
$the_query = new WP_Query( $args );
if ( $the_query->have_posts() ) {
while ( $the_query->have_posts() ) {
$the_query->the_post();
?>
<h3><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h3>
<div class="entry-content">
<?php the_excerpt(); ?>
</div>
<?php
}
wp_reset_postdata();
} else {
echo '<p>Không có bài viết nào.</p>';
}
?>
Trong ví dụ này:
- Một mảng
$args
được tạo ra để chứa các tham số cho truy vấn. - Tham số
posts_per_page
được đặt thành 5, giới hạn số lượng bài viết hiển thị. - Một đối tượng
WP_Query
mới được tạo ra sử dụng các tham số đã định nghĩa. - Vòng lặp
while
lặp qua từng bài viết được trả về bởi truy vấn. - Hàm
the_title()
hiển thị tiêu đề của bài viết. - Hàm
the_excerpt()
hiển thị đoạn trích của bài viết. - Hàm
wp_reset_postdata()
được gọi để khôi phục dữ liệu bài viết gốc sau khi vòng lặp kết thúc.
Sử Dụng Tham Số ‘numberposts’ trong get_posts()
Hàm get_posts()
là một hàm khác của WordPress cho phép bạn lấy danh sách các bài viết. Tương tự như WP_Query
, hàm này cũng chấp nhận một mảng các tham số, trong đó có tham số numberposts
. Tham số này xác định số lượng bài viết bạn muốn lấy.
Ví dụ, để lấy 3 bài viết mới nhất, bạn có thể sử dụng đoạn code sau:
<?php
$args = array(
'numberposts' => 3
);
$recent_posts = get_posts( $args );
if ( $recent_posts ) {
foreach( $recent_posts as $post ) {
setup_postdata( $post );
?>
<h3><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h3>
<div class="entry-content">
<?php the_content(); ?>
</div>
<?php
}
wp_reset_postdata();
} else {
echo '<p>Không có bài viết nào.</p>';
}
?>
Trong ví dụ này:
- Một mảng
$args
được tạo ra để chứa các tham số cho hàmget_posts()
. - Tham số
numberposts
được đặt thành 3, giới hạn số lượng bài viết được lấy. - Hàm
get_posts()
được gọi với các tham số đã định nghĩa. - Vòng lặp
foreach
lặp qua từng bài viết được trả về bởi hàmget_posts()
. - Hàm
setup_postdata()
được gọi để thiết lập dữ liệu bài viết cho mỗi bài viết trong vòng lặp. - Hàm
the_title()
hiển thị tiêu đề của bài viết. - Hàm
the_content()
hiển thị nội dung đầy đủ của bài viết. - Hàm
wp_reset_postdata()
được gọi để khôi phục dữ liệu bài viết gốc sau khi vòng lặp kết thúc.
Sử Dụng ‘pre_get_posts’ Action Hook
pre_get_posts
là một action hook cho phép bạn sửa đổi truy vấn chính (main query) của WordPress trước khi nó được thực thi. Điều này có nghĩa là bạn có thể thay đổi số lượng bài viết hiển thị trên các trang như trang chủ, trang lưu trữ, hoặc trang tìm kiếm.
Ví dụ, để giới hạn số lượng bài viết hiển thị trên trang chủ thành 6, bạn có thể thêm đoạn code sau vào file functions.php
của theme:
<?php
function modify_main_query( $query ) {
if ( is_home() && $query->is_main_query() ) {
$query->set( 'posts_per_page', 6 );
}
}
add_action( 'pre_get_posts', 'modify_main_query' );
?>
Trong ví dụ này:
- Một hàm
modify_main_query()
được định nghĩa để sửa đổi truy vấn chính. - Hàm
is_home()
kiểm tra xem trang hiện tại có phải là trang chủ hay không. - Hàm
$query->is_main_query()
kiểm tra xem đây có phải là truy vấn chính hay không. - Nếu cả hai điều kiện đều đúng, hàm
$query->set( 'posts_per_page', 6 )
được gọi để đặt số lượng bài viết hiển thị thành 6. - Hàm
add_action( 'pre_get_posts', 'modify_main_query' )
thêm hàmmodify_main_query()
vào action hookpre_get_posts
.
Kết Hợp Các Tham Số Khác
Ngoài việc giới hạn số lượng bài viết, bạn có thể kết hợp các tham số khác để lọc và hiển thị các bài viết cụ thể. Ví dụ, bạn có thể hiển thị 5 bài viết mới nhất thuộc một danh mục (category) cụ thể.
Ví dụ, để hiển thị 5 bài viết mới nhất thuộc danh mục có ID là 3, bạn có thể sử dụng đoạn code sau:
<?php
$args = array(
'posts_per_page' => 5,
'cat' => 3
);
$the_query = new WP_Query( $args );
if ( $the_query->have_posts() ) {
while ( $the_query->have_posts() ) {
$the_query->the_post();
?>
<h3><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h3>
<div class="entry-content">
<?php the_excerpt(); ?>
</div>
<?php
}
wp_reset_postdata();
} else {
echo '<p>Không có bài viết nào thuộc danh mục này.</p>';
}
?>
Ở đây, tham số cat
được sử dụng để chỉ định ID của danh mục. Bạn cũng có thể sử dụng các tham số khác như tag
(cho thẻ), author
(cho tác giả), hoặc date_query
(cho ngày tháng) để lọc các bài viết theo các tiêu chí khác nhau.
Lưu Ý Khi Sử Dụng Pagination
Khi bạn giới hạn số lượng bài viết hiển thị, bạn có thể muốn sử dụng phân trang (pagination) để cho phép người dùng duyệt qua các trang khác để xem các bài viết còn lại. WordPress cung cấp các hàm tích hợp để tạo phân trang, chẳng hạn như paginate_links()
.
Khi sử dụng phân trang với WP_Query
, hãy đảm bảo rằng bạn đã thiết lập tham số paged
trong mảng tham số của WP_Query
. Tham số này xác định trang hiện tại mà người dùng đang xem.
Ví dụ:
<?php
$paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;
$args = array(
'posts_per_page' => 5,
'paged' => $paged
);
$the_query = new WP_Query( $args );
if ( $the_query->have_posts() ) {
while ( $the_query->have_posts() ) {
$the_query->the_post();
?>
<h3><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h3>
<div class="entry-content">
<?php the_excerpt(); ?>
</div>
<?php
}
echo paginate_links( array(
'total' => $the_query->max_num_pages
) );
wp_reset_postdata();
} else {
echo '<p>Không có bài viết nào.</p>';
}
?>
Trong ví dụ này:
- Biến
$paged
được sử dụng để lấy số trang hiện tại từ URL. - Tham số
paged
được đặt trong mảng tham số củaWP_Query
. - Hàm
paginate_links()
được sử dụng để tạo phân trang, với tham sốtotal
được đặt bằng$the_query->max_num_pages
(tổng số trang).
Kết Luận
Việc hiển thị một số lượng bài viết tùy ý trong vòng lặp WordPress là một kỹ năng quan trọng để tùy chỉnh giao diện và trải nghiệm người dùng trên trang web của bạn. Bằng cách sử dụng các tham số posts_per_page
, numberposts
, hoặc action hook pre_get_posts
, bạn có thể dễ dàng kiểm soát số lượng bài viết được hiển thị và lọc các bài viết theo các tiêu chí cụ thể. Hãy nhớ sử dụng phân trang khi giới hạn số lượng bài viết để cho phép người dùng duyệt qua tất cả nội dung của bạn.