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:
1 2 3 4 5 |
<?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 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
Kết quả hiện thị ở trang chủ sẽ là:
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ả…
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<?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:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<?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.
1 2 3 4 5 6 |
$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:
1 2 3 4 5 6 7 8 9 10 11 |
<?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).
1 2 3 4 5 6 7 8 9 10 11 12 |
<?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).
1 2 3 4 5 6 7 8 9 10 11 |
<?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)
1 2 3 4 5 6 7 8 9 10 11 12 |
<?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!
Nhan a ơi cho em hỏi phần này mình muốn lấy mô tả của bài viết nhưng giới hạn số ký tự lại thì làm sao anh?
Thích Trả lời 6 năm trước
HuyKira
function teaser($limit) { $excerpt = explode(' ', get_the_excerpt(), $limit); if (count($excerpt)>=$limit) { array_pop($excerpt); $excerpt = implode(" ",$excerpt).'[...]'; } else { $excerpt = implode(" ",$excerpt); } $excerpt = preg_replace('`\[[^\]]*\]`','',$excerpt); return $excerpt.'...'; }
Dán đoạn code này file function.php Cách sử dụng: < ?php echo teaser(30); ?> // 30 là số từ cần lấy!Thích Trả lời 6 năm trước
havantuan189@gmail.comBạn ơi mình lấy 10 bài viết trong category của page tin tức có cat=1 chẳng hạn. Thì phân trang như thế nào nhỉ.
Thích Trả lời 6 năm trước
PHUCEm muốn lấy 3 bài viết trong mục chuyên mục học tập, nhưng nó chỉ lấy đúng 1 bài viết , tức là 3 bài nhưng chỉ 1 link bài viết mới nhất. ko làm thế nào thế nó lấy 3 link khác nhau
Thích Trả lời 5 năm trước
Huy KiraEm gởi đoạn code em đang làm cho anh xem thử?
Thích Trả lời 5 năm trước
Dương Phúc NghĩaAnh ơi! Em muốn lấy danh sách bài viết được đính (sticky) thì $args cần những key và value nào ạ
Thích Trả lời 5 năm trước
Huy KiraEm xem bài viết này nha! LINK
Thích Trả lời 5 năm trước
Kaga AkatsukuTks anh <3
Thích Trả lời 5 năm trước
Quốc Bìnhhay quá Anh ơi ! cảm ơn Anh nhiều ạ <3
Thích Trả lời 4 năm trước
NgaNhờ bạn chỉ cách lấy bài viết từ 1 database khác (trên cùng host) hiển thị lên trang chủ của WordPress với ah.
Thích Trả lời 4 năm trước
An PhatNếu mình muốn nó lấy bài viết theo thời gian chỉ định thì mình thêm code như thế nào bác?
Thích Trả lời 4 năm trước
thinhBạn ơi, hướng dẫn mình đặt avatar trong phần comment giống thế này dc ko bạn?
Thích Trả lời 4 năm trước
tramymediaNếu muốn hiển thị bài viết ở 1 trang wordpress về trang của mình thì sao bạn,
Thích Trả lời 4 năm trước
Nambạn cho mình hỏi. Mình đã hết hạn tên miền, chỉ còn code web giờ cho mình hỏi bài viết sẽ được lưu trong thư mục nào? Mình cám ơn!
Thích Trả lời 3 năm trước
Thái Dương Limousine the_post();
Thích Trả lời 3 năm trước
Trung DươngTrong vi du 4 id bài viết là 1 biến động phát sinh ra khi click chọn trên 1 danh sách các bài viết mới nhất ở cột ở giữa thì làm sao lấy được nội dung bài viết đó ra ở cột bên phải? (thiết kế homepage gồm 3 cột, cột trái là danh sách các bài viết mới nhất, cột phải là 1 sidebar quảng cáo, yêu cầu khi click chọn 1 bài viết bất kỳ trong danh sách bài viết trên cột trái thì nội dung bài đó sẽ hiển thị ở cột giữa)
Thích Trả lời 3 năm trước
Bùi Đức HiệpMình muốn lấy danh sách (Kiểu dạng url của bài viết) mà được phân chia theo Categories thì làm như thế nào được nhỉ
Thích Trả lời 3 năm trước
TriệuCó Plugin nào đơn giản hơn ko b
Thích Trả lời 2 năm trước
Phúc Lộcanh ơi, e muốn hiện bài viết mới mà kiểu 2 bài đầu thì có hình thumbnail, 4 bài tiếp thì không hiện hình thì như nào vậy anh. em cảm ơn
Thích Trả lời 2 năm trước
SonnnCòn đồng k anh cứu em
Thích Trả lời 8 tháng trước
SonnnAnh cứu em đx k
Thích Trả lời 8 tháng trước