Lấy bài viết bằng WP_Query và Loop trong WordPress

Để hiển thị danh sách bài viết ra trang chủ, chuyên mục bạn sẽ phải sử dụng Loop (Vòng lặp) hoặc WP_Query. Khi bạn hiểu được cách sử dụng sẽ có thể áp dụng cho công việc lập trình Theme WordPress dễ dàng hơn.

Sử dụng Loop trong WordPress để lấy bài viết

Cấu trúc vòng lặp đơn giản:

<?php
if ( have_posts() ) :
while ( have_posts() ) : the_post();

// Nội dung vòng lặp ở đây

endwhile;
endif;

?>
  • Trong cấu trúc trên thì đoạn mã sẽ bắt đầu với while duyệt tất cả các bài viết có trong cơ sở dữ liệu (Database).
  • Hàm have _ posts () dùng để kiểm tra xem danh sách các bài đăng đang được xử lý đã hết chưa hoặc không có mục nào để bắt đầu.
  • Tiếp theo, the_ post () được gọi để tải tất cả dữ liệu bài đăng. Hàm này phải được gọi bên trong vòng lặp của bạn để dữ liệu bài đăng được đặt chính xác.

Các hàm được sử dụng ở bên trong vòng lặp đó là:

  • the_permalink (): Hiển thị URL của bài đăng của bạn.
  • the_title (): Hiển thị tiêu đề của bài đăng.
  • the_ID (): Hiển thị ID duy nhất của bài đăng của bạn.
  • the_content (): Hiển thị toàn bộ nội dung bài đăng của bạn.
  • the_excerpt (): Hiển thị phần trích dẫn của bài đăng của bạn. Nếu trường Trích dẫn được điền trên màn hình Chỉnh sửa bài đăng, trường đó sẽ được sử dụng. Nếu không, WordPress sẽ tự động tạo một đoạn trích ngắn từ nội dung bài đăng của bạn.
  • the_time (): Hiển thị ngày / giờ bài đăng của bạn được xuất bản.
  • the_author (): Hiển thị tác giả của bài đăng.
  • the_tags (): Hiển thị các thẻ được gắn vào bài viết.
  • the_category (): Hiển thị các danh mục được chỉ định cho bài đăng.
  • edit_post_link (): Hiển thị liên kết chỉnh sửa chỉ được hiển thị nếu bạn đã đăng nhập và được phép chỉnh sửa bài đăng.
  • comment_form (): Hiển thị một biểu mẫu nhận xét hoàn chỉnh cho bài đăng của bạn.

Ví dụ:

<?php
if ( have_posts() ) :
while ( have_posts() ) : the_post();
?>
<a href="<?php the_permalink(); ?>"><?php the_title(); ?></a> <br />
<?php
the_content();
endwhile; endif;
?>

Sử dụng đối tượng WP_Query

WP_Query là một lớp được định nghĩa trong WordPress giúp bạn dễ dàng tạo các vòng lặp tùy chỉnh của riêng mình. Cả query _ posts() và get _ posts() đều sử dụng lớp W _Query để truy xuất nội dung WordPress.

Khi bạn đang sử dụng query _ posts (), truy vấn $wp _ biến toàn cục được sử dụng như một phiên bản của WP _ Query, làm cho truy vấn $ wp _ trở thành kho lưu trữ dữ liệu mặc định cho một số hoạt động. Vòng lặp tùy chỉnh có thể được sử dụng ở bất kỳ đâu trong tệp mẫu chủ đề của bạn để hiển thị các loại nội dung khác nhau; chúng phải xây dựng trên các phiên bản riêng biệt của biến Truy vấn WP _.

Ví dụ:

<?php
$listPosts = new WP_Query( 'posts_per_page=5' );
while ( $listPosts- >have_posts() ):
$listPosts->the_post();
?>
<!–– Nội dung ––>
<?php endwhile; ?>

Tham số bài đăng:

  • post_type = post: Tải các bài đăng dựa trên post type. Nếu bạn chỉ muốn xem các trang chứ không phải bài viết, sử dụng post_type = page.
  • posts_per_page = 5 : Số lượng bài viết cần tải trên mỗi trang. Đây là mặc định. Để hiển thị tất cả các bài đăng, hãy đặt tham số này thành –1.
  • offset = 1 : Số lượng bài viết cần bỏ qua trước khi tải

Ví dụ đặt đoạn mã này vào trong file index.php

<?php
$args = array(
'post_type' => 'post',
'posts_per_page' => 6,
'category_name' => 'thu-thuat-wordpress',
'order' => 'desc',
'orderby' => 'ID', // Sắp xếp bài viết theo thứ tự ID
);
$query_posts = new WP_Query( $args );

if( $query_posts->have_posts() ):
while( $query_posts->have_posts() ) : $query_posts->the_post();

echo the_title();

endwhile;
endif;
wp_reset_query(); ?>

Với ví dụ trên bạn sẽ hiển thị được danh sách bài viết theo chuyên mục thủ thuật WordPress. Kể từ bây giờ khi dùng để lấy danh sách bài viết bạn có thể sử dụng ví dụ ở trên để áp dụng.

Kết luận: Loop và WP_Query là những kiến thức không thể thiếu khi tìm hiểu về WordPress. Hi vọng qua bài này bạn đã phần nào hiểu được cách dùng để có thể tùy chỉnh giao diện theo ý của mình rồi.

Bình luận!

Xin lưu ý rằng tất cả các bình luận đều được kiểm duyệt theo chính sách bảo mật và tất cả các liên kết đều là nofollow. KHÔNG sử dụng từ khóa trong trường tên. Hãy để lại một cuộc trò chuyện cá nhân và ý nghĩa. *