Hướng dẫn lấy bài viết trong wordpress (Vòng lặp get post và Wp_query)

01/08/2016 Wordpress 44718 lượt xem
Lưu bài viết

Lấy bài viết trong wordpress - Tiếp tục với loạt bài hướng dẫn lập trình wordpress, hôm nay mình sẽ hướng dẫn cho các bạn cách lấy bài viết trong wordpress sử dụng vòng lặp (loop) và wp_query. Bài này khá quan trọng chúng ta sẽ sử dụng xuyên suốt trong quá trình lập trình wordpress

Cú pháp để lấy bài viết trong wordpress:

<?php if (have_posts()) : ?>
<?php while (have_posts()) : the_post(); ?>
   // Các thành phần của bài viết
<?php endwhile;?>
<?php endif; ?>

Giải thích:

Đoạn code trên có chức năng kiểm tra có post (bài viết) hay không (have_post()), nếu có post sẽ dùng vòng lặp while để hiện thị các thành phần của post.

Ví dụ:

Trong post mình có 2 bài viết như sau

Lấy bài viết trong wordpress

Để lấy 2 bài viết này hiển thị ở trang chủ ta sử dụng đoạn code như sau đặt vào file index.php

Lấy bài viết trong wordpress

Kết quả hiện thị ở trang chủ sẽ là:

Lấy bài viết trong wordpress

 

Tương tự như thế chúng ta có thể sử dùng vòng lặp này để lấy các thành phần khác của bài viết như: Lấy ngày post, lấy nội dung, lấy phần mô tả, lấy chuyên mục, lấy tác giả...

<?php if (have_posts()) : ?>
<?php while (have_posts()) : the_post(); ?>
	<h2>
		<a href="<?php the_permalink(); // lấy link của bài viết ?>">
			<?php the_title(); // lấy tiêu đề ?>
		</a>
	</h2>
	<div class="meta"><?php echo get_the_date('d - m -Y'); // lấy ngày post bài ?></div>
	<?php the_content(); // lấy toàn bộ nội dung bài post ?>
	<?php the_excerpt(); // Lấy mô tả ngắn của bài post ?>
	<?php the_category(); // lấy category của bài post này ?>
<?php endwhile; ?>
<?php endif; ?>

Đối với các file tương ứng thì lấy bài viết trong wordpress sẽ như sau:

  • Vòng lặp này đặt ở file index.php nó sẽ lấy tất cả bài viết có trong post (Số lượng phụ thuộc vào sự điều chỉnh của chúng ta trong phần cài đặt).
  • Nếu đặt trong file category.php nó sẽ lấy tất cả bài viết có trong chuyên mục tương ứng khi chúng ta vào chuyên mục đó.
  • Đặt trong file single.php nó sẽ lấy 1 bài viết khi chúng ta truy cập đến bài viết tương ứng.
  • Đặt trong author.php nó sẽ lấy tất cả các bài viết mà tác giả đó viết khi chúng ta truy cập đến tác giả tương ứng
  • ...

Sử dụng new Wp_query

Đọc đến đây chắc nhiều bạn thắc mắc như mình muốn lấy bài viết theo chuyên mục thì làm như thế nào? Hoặc mình muốn lấy bài viết mới nhất đặt ở sidebar thì như thế nào? Mình muốn hiển thị chỉ 1 bài viết thì như thế nào?... Để giải quyết các vấn đề đó thì mình xin giới thiệu New Wp_query. 

Đây cũng là 1 vòng lặp get post nhưng chúng ta có thể thêm những điều kiện để lấy được những nội dung mong muốn.

Cú pháp sử dụng:

<?php 
	$args = array(
		'post_status' => 'publish', // Chỉ lấy những bài viết được publish
		'post_type' => 'post', // Lấy những bài viết thuộc post, nếu lấy những bài trong 'trang' thì để là page 
		'showposts' => 12, // số lượng bài viết
		'cat' => 1, // lấy bài viết trong chuyên mục có id là 1
	);
?>
<?php $getposts = new WP_query($args); ?>
<?php global $wp_query; $wp_query->in_the_loop = true; ?>
<?php while ($getposts->have_posts()) : $getposts->the_post(); ?>
	<?php //các thành phần cần lấy  ?>
<?php endwhile; wp_reset_postdata(); ?>

Giải thích:

Tương tự như vòng lặp get post thường nó sẽ kiểm tra nếu có post thoải mãn những điều kiện trên thì nó sẽ chạy vòng lặp while để lấy các thành phần.

Đây là các điều điện được thêm vào để lấy bài viết mong muốn.

$args = array(
		'post_status' => 'publish', // Chỉ lấy những bài viết được publish
		'post_type' => 'post', // Lấy những bài viết thuộc post, nếu lấy những bài trong 'trang' thì để là page 
		'showposts' => 12, // số lượng bài viết
		'cat' => 1, // lấy bài viết trong chuyên mục có id là 1
	);

Ngoài ra nó có rất nhiều điều kiện khác để lấy bài viết trong wordpress các bạn có thể tham khảo tại đây

Ví dụ:

Ví dụ 1:   lấy 10 bài viết mới nhất:

<?php 
	$args = array(
		'post_status' => 'publish', // Chỉ lấy những bài viết được publish
		'showposts' => 10, // số lượng bài viết
	);
?>
<?php $getposts = new WP_query($args); ?>
<?php global $wp_query; $wp_query->in_the_loop = true; ?>
<?php while ($getposts->have_posts()) : $getposts->the_post(); ?>
	<?php //các thành phần cần lấy  ?>
<?php endwhile; wp_reset_postdata(); ?>

Ví dụ 2: Lấy 5 bài viết trong chuyên mục Học tập (giả sử chuyên mục học tập có id là 1).

<?php 
	$args = array(
		'post_status' => 'publish', // Chỉ lấy những bài viết được publish
		'showposts' => 5, // số lượng bài viết
                'cat' => 1, // cat_id
	);
?>
<?php $getposts = new WP_query($args); ?>
<?php global $wp_query; $wp_query->in_the_loop = true; ?>
<?php while ($getposts->have_posts()) : $getposts->the_post(); ?>
	<?php //các thành phần cần lấy  ?>
<?php endwhile; wp_reset_postdata(); ?>

Ví dụ 3: lấy tất cả bài viết trong trong phần trang (post_type page).

<?php 
	$args = array(
		'post_status' => 'publish', // Chỉ lấy những bài viết được publish
		'post_type' => 'page', // số lượng bài viết
	);
?>
<?php $getposts = new WP_query($args); ?>
<?php global $wp_query; $wp_query->in_the_loop = true; ?>
<?php while ($getposts->have_posts()) : $getposts->the_post(); ?>
	<?php //các thành phần cần lấy  ?>
<?php endwhile; wp_reset_postdata(); ?>

Ví dụ 4: lấy nội dung của bài viết giới thiệu trong post_type page (Giả sử bài viết giới thiệu có id là 2)

<?php 
	$args = array(
		'post_status' => 'publish', // Chỉ lấy những bài viết được publish
		'post_type' => 'page', // số lượng bài viết
                'p' => 2,
	);
?>
<?php $getposts = new WP_query($args); ?>
<?php global $wp_query; $wp_query->in_the_loop = true; ?>
<?php while ($getposts->have_posts()) : $getposts->the_post(); ?>
	<?php //các thành phần cần lấy  ?>
<?php endwhile; wp_reset_postdata(); ?>

...

Tổng kết:

Trên đây mình xin giới thiệu cho các bạn cách thức lấy bài viết trong wordpress sử dung các vòng lặp get post. Còn nhiều cách khác để lấy bài viết, hay hiển thị bài viết các bạn có thể tham khảo những nguồn tài liệu trên internet.

Bài này mình chỉ cách lấy bài viết 1 cách nhanh nhất nếu các bạn muốn hiểu trỏ quy trình hoạt động của các vòng lặp trên thì có thể tham khảo video dưới đây:

Có gì thắc mắc các bạn có thể CMT phía dưới. Chào thân ái và quyết thắng!