Người Viết : ViKiMi Editor

Hướng dẫn phân trang WordPress cơ bản nhất, sử dụng tuỳ chỉnh truy vấn thông tin CSDL.
Như chúng ta biết rằng WordPress có rất nhiều tính linh hoạt trong các xử lý. Đặc biệt, xử lý phân trang của WordPress luôn cho thấy tính năng phân trang tuyệt vời. Nhờ những khả dụng như vậy nên ưu tiên cho các xử lý phân trang của WordPress luôn đem lại những ích lợi.
Nhưng không phải ai cũng biết rằng mặc định chức năng phân trang của WordPress sẽ không hoạt động với bất kỳ vòng lặp hiển thị Posts nào có sử dụng WP_Query. Vậy làm thế nào để có thể phân trang thành công khi muốn dùng WP_Query! Vì tất cả những gì mong muốn hiển thị theo đúng ý đồ truy vấn đều phải sử dụng tới WP_Query.
Vậy chỉ có một cách là phải hiểu cách tạo vòng lặp tuỳ chỉnh với phân trang WordPress. Như vậy bạn sẽ hoàn toàn yên tâm truy vẫn thông tin cần thiết để hiển thị phân trang. Và cũng chắc chắn rằng các truy vấn mặc định của WordPress không phải là đẹp nhất, nên chúng ta cần phải làm chủ các truy vấn thông tin.
WP_Query là một trong những lớp quan trọng của WordPress, giúp hiển thị bài đăng tuỳ chỉnh. Lớp này cho phép bạn truy vấn đến các bài đăng, các trang… trong cơ sở dữ liệu. Lớp WP_Query cho chúng ta những trang tĩnh, trang hiển thị trên các giao diện đẹp như mong muốn.
Cách chúng ta có thể thực hiện :
Lấy tham số phân trang – là số trang hiện tại được lấy từ truy vấn chính
$paged = get_query_var(‘paged’) ? get_query_var(‘paged’) : 1;
Đây là điều quan trọng, vì nó giúp có thể phân trang thành công.
Tiếp theo, thực hiện tạo mảng tham số truy vấn thông tin theo các điều kiện truy vấn mong muốn. Truyền mảng này vào truy vấn WP_Query để có được các thông tin giúp hiển thị trong vòng lặp các Posts. Vòng lặp sẽ có cách hiển thị tuỳ theo các thiết kế giao diện của Website.
$args = array(
‘post_type’ => ‘post’,
‘post_status’ => ‘publish’,
‘posts_per_page’ => get_option( ‘posts_per_page’ ),
‘paged’=> $paged,
);
$query = new WP_Query( $args );
Khi đã có các thông tin truy vấn cần thiết và các thông tin phân trang, chúng ta sẽ thực hiện công việc hiển thị giao diện mà chúng ta mong muốn bằng vòng lặp như bên dưới.
<?php
if ($query->have_posts()) :
while ($query->have_posts()) : $query->the_post();
$img_url = get_the_post_thumbnail_url(get_the_ID());
$author_id = $post->post_author;
$categories = get_the_category(get_the_ID());
?>
<a href=”<?php the_permalink(); ?>”>
<img src=”<?php echo $img_url; ?>” alt=”Awesome Image”>
</a>
<div class=”post-date”><?php echo get_the_date( ‘F j, Y’ ); ?> </div>
<h4 class=”post-title”><a href=”<?php the_permalink(); ?>”><?php the_title(); ?></a></h4>
<div class=”post-cat”>
<?php foreach ( $categories as $key => $value) { echo $value->category_nicename; } ?>
</div>
<?php
endwhile;
endif;
?>
Công việc cuối cùng là chúng ta sẽ hiển thị đoạn phân trang. Với cách xử lý này chúng ta có thể thực hiện cho một Category hoặc một trang tĩnh bất kỳ, thậm chí là có thể sử dụng để tạo các Shortcode cần thiết hữu ích.
<div class=”nav-links”>
<?php
$total_pgs = $query->max_num_pages;
if ($total_pgs > 1)
{
$current_pg = max(1, get_query_var(‘paged’));
echo paginate_links(array(
‘base’ => get_pagenum_link(1) . ‘%_%’,
‘format’ => ‘/page/%#%’,
‘current’ => $current_pg,
‘total’ => $total_pages,
‘prev_text’ => __(‘<<‘),
‘next_text’ => __(‘>>’),
));
}
?>
</div>
<?php wp_reset_query(); ?>
Thông thường việc gọi Function wp_reset_query() sẽ ngay phía sau vòng lặp, khi các công việc đã kết thúc. Nhưng ở đây có thêm xử lý phân trang nên Function này sẽ được gọi sau xử lý phân trang để đảm bảo chương trình vẫn hoạt động đúng. Function này thực sự quan trọng khi bạn thực hiện liên tục quá nhiều truy vấn tuỳ chỉnh.