Chào các bạn, để tiếp nối chủ đề lập trình theme wordpress hôm nay chúng ta sẽ đi tìm hiểu cách get post trong wordpress cũng như là vòng lặp query post trong wordpress.Đây được xem như là xương sống của wordpress. Chúng ta sẽ sử dụng xuyên suốt trong quá trình xây dựng theme wordpress.Khi cài đặt wordpress lên, chúng ta sẽ thấy xuất hiện phần bài viết (posts), nơi đây chứa tất cả các bài viết của website. Vậy làm sao để hiển thị nội dung của các bài viết đó ra ngoài giao diện? Chúng ta sẽ sử dụng vòng lặp get post để đưa chúng ra.

Hướng dẫn get post trong wordpress và new wp_Query trong wordpress
Hướng dẫn get post trong wordpress và new wp_Query 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ì show ra.

Sử dụng:

Tùy theo 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ẽ list 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) nó 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:

  • <?php the_title(); ?> Lấy tiêu để của bài viết
  • <?php the_content(); ?> Lấy nội dung của bài viết
  • <?php the_excerpt(); ?> Lấy mô tả của bài viết
  • <?php the_category(); ?> Lấy chuyên mục của bài viết
  • <?php the_author(); ?> Lấy tác giả của bài viết
  • <?php the_post_thumbnail(); ?> Lấy hình đại diện của bài viết
  • <?php the_date(); ?> Lấy ngày xuất bản của bài viết
  • <?php 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 mình không liệt kê hết ở đây được các bạn có thể search thêm nha.

Ví dụ:

Hiển thị danh sách bài viết mới nhất, có 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 new WP_Query get bài viết với tham số

Ở phần trên chúng ta đã được biết cách query bài post mặc định của wordpress, nhưng đối với những yêu cầu cao hơn ví dụ như: Get bài viết với số lượng nhất định, get bài viết theo 1 chuyên mục hoặc get bài viết theo 1 tác giả… thì vòng lặp trên không thể đáp ứng.

Vì thế wordpress đã cung cấp cho chúng ta 1 vòng lặp lấy bài viết phụ thuộc vào tham số đó là new Wp_Query, cụ thể như sau:

Cú pháp new 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 new wp_Query:

Cú pháp của vòng lặp này sẽ có 2 phần:

  • Phần 1 là array ($args) dữ liệu tham số
  • Phần 2 là phần get post bình thường như được truyền tham số phía trên vào để cho kết quả như mong muốn.

Các tham số đầu vào:

  • posts_per_page => Số lượng bài viết
  • post_type => là post_type 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ả

 

Tham số get post trong wordpress

File tất cả các tham số của get post trong wordpress

Một số ví dụ:

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, giả sử chuyên mục tin tức có id 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 này Congtyannhien đã hướng dẫn cho các bạn cách get post trong wordpress. Đây phải nói là kiến thức khá quan trọng trong lập trình theme wordpress

Chúc các bạn học wordpress thành công!