Hiển thị bài viết mới theo Category trong WordPress
Hiển thị bài viết mới theo Category trong WordPress một cách đơn giản cho người mới bắt đầu tự code chức năng Wordpress mà không cần dùng đến Plugin
Chào các bạn,
Trong bài viết này mình sẽ nói về cách Hiển thị bài viết mới theo Category trong WordPress, chủ đề này có lẽ đã được khá nhiều Website viết rồi, nhưng hầu như là sử dụng plugin. Đối với những Developer làm việc nhiều với WordPress chắc hẳn đây là một vấn đề khá đơn giản, Nhưng với những bạn mới bước vào tìm hiểu và tự code chức năng thì nó khá quan trọng cho thời điểm khởi đầu.
Cùng bắt đầu nhé!
– Trước tiên bạn cần tìm hiểu về Vòng lặp(Loop) lấy danh sách bài trong WordPress
<?php while (have_posts()) : the_post(); ?> // các thông tin bài viết <?php endwhile ; wp_reset_query() ;?>
WordPress hỗ trợ bạn có thể lấy các bài viết 1 cách dễ dàng với vòng lặp While như bên trên, Với vòng lặp này mặc định bạn sẽ xuất ra tất cả các bài viết ở Post_type là Post(các bài trong mục POST ở trang quản trị) trong Website của mình
Với phần Các thông tin hiển thị của bài viết, bạn có thể tham khảo thêm trong bài viết này:
Các hàm cơ bản của WordPress cho người mới bắt đầu
– Vậy ta cần thêm một số điều kiện cho vòng lặp này để có thể lấy được bài viết theo Category
<?php $vnkings = new WP_Query(array( 'post_type'=>'post', 'post_status'=>'publish', 'cat' => 1, 'orderby' => 'ID', 'order' => 'DESC', 'posts_per_page'=> 4)); ?> <?php while ($vnkings->have_posts()) : $vnkings->the_post(); ?> // các thông tin bài viết <?php endwhile ; wp_reset_query() ;?>
Giải thích :
- new WP_Query(): Tạo Query mới có điều kiện bên trong
- ‘post_type’=>’post’: Hiển thị các bài viết trong Post type là Post
- ‘post_status’=>’publish’: Hiển thị các bài có trạng thái là đã đăng
- ‘cat’ => 1: Hiển thị các bài viết ở Category có ID là 1 (đây chính là mấu chốt của bài này)
- ‘orderby’ => ‘ID’,’order’ => ‘DESC’: Hiển thị bài viết từ mới đến cũ
- ‘posts_per_page’=> 4: Hiển thị số bài viết là 4
- $vnkings->have_posts(): Áp dụng Query trên vào vòng lặp của WordPress
Ví dụ chi tiết:
Chúng ta sẽ làm 1 box Hiển thị bài viết theo Danh mục WordPress Nâng Cao như Vnkings.com
–Tạo phần hiển thị tên danh mục và Link:
<div class="title_category"><a href="<?php echo get_category_link( id_của_category ); ?>"><?php echo get_cat_name( id_của_category);?></a></div>
— Tạo Vòng lặp hiển thị các bài viết của Danh mục này:
<?php $vnkings = new WP_Query(array( 'post_type'=>'post', 'post_status'=>'publish', 'cat' => id_của_category, //thay id_của_category bằng id danh mục bạn muốn hiển thị nhé 'orderby' => 'ID', 'order' => 'DESC', 'posts_per_page'=> 5)); ?> <?php $i=1; while ($vnkings->have_posts()) : $vnkings->the_post(); ?> <?php if($i==1){ ?> <div class="bai_dau_tien"> <a href="<?php the_permalink() ;?>" class="anh_bai_viet"> <?php the_post_thumbnail("thumbnail",array( "title" => get_the_title(),"alt" => get_the_title() ));?> </a> <a href="<?php the_permalink() ;?>" class="tieu_de_bai_viet"><?php the_title() ;?></a> <p class="trich_dan"> <?php the_excerpt() ;?> </p> </div> <?php } else { ?> <div class="cac_bai_con_lai"><a href="<?php the_permalink() ;?>"><?php the_title() ;?></a> </div> <?php } ?> <?php $i++; endwhile ; wp_reset_query() ;?>
Giải thích :
với mục đích hiển thị bài đầu tiên khác với các bài còn lại trong vòng lặp nên mình đã gán biến i=1
, sau đó check nếu i == 1
thì sẽ hiển thị theo div bài đầu tiên
, ngược lại các bài tiếp theo sẽ hiển thị như mặc định. Đây là kiến thức khá cơ bản trong PHP, nếu bạn chưa hiểu có thể để lại comment câu hỏi cho mình
– Nâng cao 1 chút
– nếu bạn muốn lấy bài trong danh mục ở 1 Post type khác không phải Post mặc định của WordPress Thì làm thế nào?
Bạn chỉ cần thay đoạn
'post_type'=>'post_type_của_bạn'
và thêm đoạn lấy ID của danh mục theo Post type này
'tax_query' => array( array( 'taxonomy' => 'post_type_taxonomy_của bạn', 'field' => 'id', 'terms' => 'ID_Của_Danh_Mục_Sản_Phẩm' ) ),
Ví dụ cụ thể:
Bạn có 1 Post type là Product, và Taxonomy chứa danh mục là product_cat
Thì bạn sẽ có đoạn code như sau
<?php $vnkings = new WP_Query(array( 'post_type'=>'product', 'post_status'=>'publish', 'tax_query' => array( array( 'taxonomy' => 'product_cat', 'field' => 'id', 'terms' => 'ID_Của_Danh_Mục_Sản_Phẩm' ) ), 'orderby' => 'ID', 'order' => 'DESC', 'posts_per_page'=> '4')); ?> <?php while ($vnkings->have_posts()) : $vnkings->the_post(); ?> // Nội dung từng sản phẩm <?php $i++; endwhile ; wp_reset_query() ;?>
Sau khi đã hiển thị được các bài viết mới theo danh mục, hãy vận dụng kiến thức CSS để làm đẹp cho phần này nhé. Chúc các bạn thành công!
Bài liên quan
- Đưa trình soạn thảo WordPress 5.0 về phiên bản cũ không dùng plugin
- Thêm chức năng lọc theo Meta Fields trong Dashboard WordPress
- Sửa lỗi không hiển thị Page Template để chọn khi tạo Trang ở WordPress version 4.9
- Thêm reCAPTCHA vào form đăng nhập đăng ký WordPress
- Quản lý thời gian hoạt động cho Vip Member trong WordPress
- Tự tùy biến trang Single theo Category trong WordPress
- Tạo giao diện khác nhau cho từng Category trong WordPress
- Thêm văn bản mặc định vào khung soạn thảo wordpress
Tuyệt vời. Cám ơn bạn nhé. Mình đang vật vã với category của wordpress :))
Cám ơn bạn. Rất hữu ích
Cảm ơn phản hồi của bạn 🙂
Giã sử mình muốn toàn bộ bài viết hiển thị tại trang chủ đều là bài viết trong cùng một catagory và theo post type mặc định thì làm ntn vậy ad? mình dùng theme magxp của mythemshop. hiển thị dạng viral.
Như ví dụ trên chính là ví dụ cho 1 post type hoặc category cụ thể đó bạn
Chịu thua zụ category này. Làm tới làm lui riết thấy nhiêu khê quá bỏ luôn 🙁
Bạn bị vướng đoạn nào nhỉ?
Mình làm hoài mà không được. Có cao thủ nao trợ giúp mình với
Bạn làm đến bước nào và gặp lỗi gì nhỉ?
bác ơi em muốn kiểu này. Nếu danh mục nào có bài viết thì sẽ hiện thị như bác nói ở trên. Vì ở trên thì mình sẽ cho từng danh mục rồi. Giừo em muốn show tất cả danh mục có bài viết thì thêm vòng lặp nào bác
Nếu mình muốn gộp 2 post_type lại : product1 & product2 thì viết thế nào ad ơi??
Cảm ơn bạn viết rất hữu ích từ ad!
Ad ơi, cho mình hỏi xíu nhé:
Mình hiển thì post theo dạng tab, mỗi tab là một post category khác nhau, thì làm nhứ thế nào vậy ad?
Rất mong nhận được câu trả lời!
Xin cảm ơn!
Chào mọi người, mình mới tạo một website và đang gặp phải vấn đề này, mình muốn trang chủ hiển thị bài viết theo từng chuyên mục chứ không chỉ hiển thị bài viết mới nhất. Ai có thể chỉnh sửa theme thì liên hệ giúp mình nhé, cảm ơn rất nhiều.
Cảm ơn vnkings nhiều nha. Nhiều vấn đề mình tìm cả ở những website khác mà ko có mà ở vnkings lại xử lý được. Thanks nhiều ạ ^^
Chúc mừng bạn nhé.
Cảm ơn ơn.
Ở trên nếu mình muốn hiển thị bài viết ở 1 trang wordpress khác thì dc ko bạn.
Được bạn ạ, Bạn cần có Json API của trang cấp dữ liệu, rồi get dữ liệu đổ vào phần đã tạo như trên là được.
Em đang tìm đoạn codes hiển thị Category và giới hạn hiển thị mỗi cat thì làm thế nào nhỉ?
Bạn xem và áp dụng bằng các đoạn code này nhé:
https://wordpress.vnkings.com/hien-danh-muc-con-khi-vao-danh-muc-cha-wordpress.html
Mình đang làm một trang wordpress vệ tinh, mình muốn hiển thị các bài viết mới trong một trang bất kì kiểu như hiển các sản phẩm mới nhất thì có câu lệnh nào đơn giản hơn không ạ?
Chào bạn, đây là Code khá cơ bản để bạn tạo hiển thị bài mới theo danh mục, nếu là site vệ tinh bạn có thể dùng giao diện hỗ trợ sẵn phần chọn category theo Widget bạn ạ.
Chào bạn. Hiện tại site mình có 8 category. Mình muốn hiển thị các bài viết theo thứ tự cho mỗi category đó thì mình phải làm như thế nào? Cảm ơn bạn.
Bạn ơi mình muốn chèn đoạn code vào function.php và gọi ra ở chỗ cần hiển thị thôi. mình đã code được nó hiện ra rồi nhưng mà cái sét điều kiện thì mình không code được toàn sai (vì mình không biết php). bạn có thể chỉnh giúp mình thêm điều kiện để tùy chỉnh bài đầu tiên khác vs các bài còn lại giống code của bạn được không ạ
function sky(){
$vnkings = new WP_Query(array(
'post_type'=>'post',
'post_status'=>'publish',
'cat' => 2,
//thay id_của_category bằng id danh mục bạn muốn hiển thị nhé
'orderby' => 'ID',
'order' => 'DESC',
'posts_per_page'=> 2));
while ($soju->have_posts()) : $vnkings->the_post();
?>
<a href="" class="anh_bai_viet">
get_the_title(),"alt" => get_the_title() ));?>
<a href="" class="tieu_de_bai_viet">
<?php
endwhile;
wp_reset_query();
}
codes hiển thị Category áp dụng cho các theme hả admin, sao em làm mãi k đc nhỉ
Bạn show code bạn viết lên đây mình xem thử.
Bạn cho mình hỏi mình muốn lấy được nhiều text hơn khi sử dụng hàm the_excerpt() thì làm thế nào nhỉ
Chào bạn,
khi viết bài có một ô để bạn nhập mô tả, bạn nhập bao nhiêu thì hàm đó sẽ hiển thị bấy nhiêu. Không cần thiết lập gì khác bạn nhé.
Làm sao cho thể thêm lớp class cho 5 bài viết ạ. Ví dụ: Hiện thị 5 bài viết Hiện thị 5 bài viết tiếp theo Hiện thị 5 bài viết tiếp theo
Làm sao cho thể thêm lớp class cho 5 bài viết ạ. Ví dụ:
Hiện thị 5 bài viết Hiện thị 5 bài viết tiếp theo Hiện thị 5 bài viết tiếp theo
Hay quá cám ơn bác, xài code của bác CSS lại tý là đẹp ngay, xài plugin trên mạng nặng web quá
Làm sao để hiển thị bài viết liên quan trong giữa nội dung vậy admin?
Nếu mình code category.php thì ‘cat’ => 2, mình thay bằng lệnh gì để khi thay đổi danh mục, dữ liệu sẽ được in theo danh mục đó vậy a
Em muốn hiển thị tin tức và bài viết ( các bài đã viết trên web) thì phải làm thế nào. em viết xong tạo chuyên mục rồi. nhưng khi xem trang web lại không xất hiện, chỉ admin mới xem đc. nên em phải làm sao
Nếu không chia ra bài viết đầu tiên mà show bình thường thì viết lại sao ạ (em không biết php) em cũng tự mò nhưng không ra. Mong anh giúp em
Em có thể dùng code này:
A ơi cho e hỏi là. Link danh mục của e bị 404 ạ. E muốn bài viết e xuất hiện trong danh mục thì phải làm sao. E cần phải làm gì
Cám ơn anh!