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

3 giờ ago, WordPress Themes, Views
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_Queryposts_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àm get_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àm get_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àm modify_main_query() vào action hook pre_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ủa WP_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.