Cách hiển thị Category trong WordPress sử dụng get category với get_categories()

Trong WordPress, có nhiều cách khác nhau để hiển thị danh sách tất cả các category ra trang chủ hay widget. Mặc định thì WordPress có một Widget tên Categories (đối với post) và Product Categories (đối với Woocommerce) để bạn chèn vào Widget. Tuy nhiên, nếu bạn muốn hiển thị danh sách các Category ra trang chủ, hoặc vào trong page, hoặc bất cứ chỗ nào khác thì lúc đó bạn sẽ cần code thêm chức năng để get category. Ở bài viết này, mình sẽ hướng dẫn các bạn sử dụng hàm get_categories() để hiển thị danh mục bài viết hay danh mục sản phẩm ở bất kỳ đâu trong WordPress.

Category là gì?

Category dịch ra tiếng Việt có nghĩa là thể loại, danh mục. Nó dùng để chỉ một nhóm các đồ vật, sự vật, hiện tượng có các đặc tính hay tính năng tương tự nhau.

Trong WordPress, Category là một thuật ngữ để chỉ một thể loại bài viết hay còn gọi là chuyên mục của bài viết. Trong tiếng Anh, Category là số ít, còn số nhiều là Categories dùng để chỉ các danh mục bài viết, hay danh mục sản phẩm.

Để cho dễ hiểu, chúng ta hãy cùng nhìn vào website huyhoa.net. Ở đây Category là các danh mục như WordPress, Woocommerce, Sức Khỏe, Làm đẹp… Các bài viết cụ thể được gắn vào các Category này tùy theo nội dung của bài viết đó viết về cái gì.

Category giúp cả người viết và người đọc phân biệt được chủ đề của một bài viết cụ thể và gom những bài viết thuộc cùng một chủ đề nào đó vào chung một trang.

Các bài khác cùng chủ đề:
Đánh giá 10 phần mềm SEO AI tốt nhất hiện nay
Hướng dẫn 2 cách xóa phông nền ảnh Online không cần Photoshop
Cách làm mịn da mặt bằng Photoshop mà vẫn giữ được lỗ chân lông
20 công cụ tách nền ảnh tốt nhất và hoàn toàn miễn phí

Ví dụ khi truy cập vào Category Lập Trình trên huyhoa.net thì bạn sẽ chỉ thấy các bài viết liên quan tới WordPress. Sẽ không có chuyện bài viết về sức khỏe hay du lịch mà lại cho vào Category WordPress.

Cách hiển thị Category trong WordPress

Cách sử dụng hàm get_categories() để get category trong WordPress

Để get category trong WordPress, ta có thể sử dụng hàm get_categories().

Để hiểu rõ cách hoạt động cũng như cách sử dụng hàm này, trước tiên ta sẽ xem qua về cú pháp của hàm get_categories().

Mã nguồn: Hàm này được tìm thấy ở trong file wp-includes/category.php

Cú pháp sử dụng:

Parameters

$args: một mảng (array) nhằm xác định các tham số khi truy vấn dữ liệu. Tùy vào mục đích bạn muốn lấy là gì, mảng này sẽ có thể bao gồm 1 hoặc tất cả các tham số sau:

Các tham số này sẽ quyết định danh sách các “category” được hiển thị.

$args = array(
'type' => 'post',
'child_of' => 0,
'parent' => '',
'orderby' => 'name',
'order' => 'ASC',
'hide_empty' => 1,
'hierarchical' => 1,
'exclude' => '',
'include' => '',
'number' => '',
'taxonomy' => 'category',
'pad_counts' => false
);

Giải thích:

  • type: ở đây là post type. Mặc định nếu không khai báo thì nó sẽ lấy post type là post. Chúng ta có thể khai báo type để xác định ví dụ như post, page, product (nếu muốn lấy danh mục sản phẩm trong Woocommerce)
  • child_of: Chỉ có 1 hoặc 0. Mặc định khi không khai báo hoặc khai báo sai nó sẽ nhận là 0. 0 có nghĩa là lấy danh sách tất cả các category, nếu là 1 thì nó chỉ lấy các danh mục con mà không lấy danh mục cha. Nhìn vào hình số 2 để hiểu thêm về danh mục con và danh mục cha.
  • parent: Là id của danh mục cha. Nếu khai báo thì nó sẽ chỉ lấy các danh mục là con của danh mục được khai báo này.
  • orderby: Sắp xếp kết quả trả về theo cái gì? Các giá trị có thể khai báo là: id, name, slug, count, term_group. Mặc định hoặc không khai báo thì orderby sẽ là name.
  • order: ASC hoặc DESC. Sắp xếp theo chiều tăng hay giảm dần. Mặt định nó là tăng dần: ASC.
  • hide_empty: 1 hoặc 0. Mặc định là 1. Nếu khai báo là 1 thì nó chỉ hiển thị các category đã có bài viết. 0 thì nó lấy cả, có bài viết hay chưa có bài viết nó đều hiển thị hết.
  • hierarchical: Hiện thị Category theo dạng cây (tree list). Có là 1, không thì khai báo là 0.
  • exclude: nhận giá trị là mảng (array). Nó là danh sách id các category không muốn hiện.
  • include: Ngược lại so với exclude. Đây là một mảng chứa danh sách các category id sẽ được hiển thị.
  • number: Số lượng Category muốn hiển thị. Ví dụ chỉ hiển thị 10 category thì điền 10. Nếu website có nhiều hơn 10 categories mà khai báo number là 10 thì kết quả cũng chỉ hiển thị 10 category.
  • taxomony: Vì category là một trong số rất nhiều taxonomy trong wordpress nên ta có thể khai báo biến taxonomy để lấy danh mục khác như là tag chẳng hạn.

Return:

Kết quả trả về của hàm này là một mảng chứa danh sách các “category object“. Mỗi một Object sẽ chứa danh sách các thuộc tính của một chủ đề như là id, tên, mô tả, …

Các giá trị trả về trong object:

[term_id]=> ID của category
[name]=> Tên hiển thị của category
[slug]=> đường dẫn slug của category
[term_group]=> Nhóm của category
[term_taxonomy_id]=> ID của Taxonomy
[taxonomy]=> Trả về taxonomy: category hoặc tag...
[description]=> Mô tả của category
[parent]=> ID của danh mục cha của category này
[count]=> Số bài viết trong category này
[filter]=> raw
[cat_ID] => ID của category
[category_count]=> Số bài viết trong category này
[category_description]=> Mô tả của category
[cat_name]=> Tên của category
[category_nicename]=> nicename của category
[category_parent]=> ID thư mục cha của category

Các ví dụ về get category trong WordPress

Hiển thị tất cả các category

Đoạn code này sẽ hiển thị tất cả các category đang có trên website WordPress của bạn, kể cả các category không có bài viết nào và hiển thị ra ngoài dạnh text phân cách các category bởi dấu phẩy (,).

Kết quả nó sẽ hiển thị kiểu thé này

Hiển thị danh sách category trong wordpress

Lấy link của một category

Vẫn lấy ví dụ như bên trên, bên trong vòng lặp foreach, ta có thể lấy link của một category bằng cách dùng hàm get_term_link

Giờ, kết quả sẽ hiển thị thế này

Hiển thị danh sách category trong wordpress

Hiển thị tất cả product category trong woocommerce

Các ví dụ bên trên là với post, còn đối với product category trong Woocommerce thì bạn chỉ cần thay taxonomy từ category thành product_cat

Get category khi có cat_id

Lưu ý là đối với wordpress thì category là một taxonomy. Khi đó muốn get category theo id, slug, name hay gì thì cũng quy về là lấy thông tin của taxonomy term. Cụ thể, giả sử ta muốn get category khi biết category ID là 18, lúc đó đoạn code sẽ như thế này:

Ở ví dụ bên trên, mình có dùng hàm get_term_by() để lấy dữ liệu về category có ID 18. Giá trị trả về là một WP_Term Object với các thông tin đầy đủ về category đó. Cụ thể, kết quả trả về sẽ như thế này:

Get category khi biết category name

Tương tự như cách làm bên trên, ta chỉ cần thay id bằng name. Lưu ý là cách này chỉ lấy term đầu tiên nó nhận được.

Nếu các bạn muốn lấy tất cả các category ID theo category name thì phải sử dụng hàm get_terms như bên dưới đây. Sở dĩ dùng cái get_term_by() nó không trả về hết kết quả là vì có thể nó có nhiều category có cùng 1 tên, nhưng ID và slug nó khác nhau (danh mục cha, danh mục con chẳng hạn)

(Nhìn hình bên dưới sẽ thấy có thể có nhiều category trùng tên nhưng lại có id khác nhau)

Demo cấu trúc danh mục category trong wordpress

Get category khi biết slug

Lấy thông tin về category khi biết slug cũng tương tự như vậy

Hiển thị category dưới dạng dropdown select

Để hiện tất cả các category trong WordPress dưới dạng dropdown select, ta có thể dùng hàm wp_dropdown_categories()

Ở đây các bạn cần lưu ý vài thông số:

  • echo: 1 hiển thị luôn ra html code chứ không cần echo nữa. Giá trị là 0 thì nó trả về dạng string
  • hide_empty: 0 là không ẩn các category không có bài viết nào. 1 là ẩn những category chưa có bài viết
  • show_option_none: Là cái option nó hiện đầu tiên được lựa chọn
  • option_none_value: Là giá trị value của cái show_option_none bên trên
  • show_count: Là hiển thị số bài viết của chuyên mục đó ngay sau tên của chuyên mục
  • value_field: là giá trị trong thẻ value của option đó

Hiển thị category dưới dạng dropdown select

Get Woocommerce catogry và hiển thị dưới dạng select list

ĐỐi với post thì taxonomy là category, còn đối với Woocommerce thì taxonomy là, product_cat. Bạn chỉ cần khai báo taxonomy còn các thứ khác thì tương tự như get category của post thôi
Ví dụ:

Liệt kê các bài viết theo danh mục

Về cơ bản thì không thể trực tiếp lấy bài viết và cả danh mục sau đó hiển thị ngay lập tức được trong WordPress. Tuy nhiên, chúng ta có thể dùng đường vòng một chút. Quy trình sẽ như thế này.

Bước 1: Trước tiên bạn cần tạo một truy vấn tùy chỉnh WP_Query để truy xuất tất cả các bài đăng đã được xuất bản

Bước 2: Sử dụng get_the_category, lấy danh sách tất cả các danh mục mà bài đăng thuộc về.

Bước 3: Gán các biến cho tiêu đề bài viết và các thể loại của bài viết

Bước 4: Kết hợp hai biến này để tạo thành một mảng nhiều chiều

Để xem những gì đang xảy ra trong mảng mới tạo, chỉ cần sử dụng var_dump để nó hiện ra.

Bước 5: Sử dụng foreachcác vòng lặp, tạo danh sách bài đăng của bạn được sắp xếp theo thể loại

Cuối cùng là kết hợp lại ta sẽ có đoạn code hoàn chỉnh

Kết quả:

Liệt kê các bài viết theo danh mục

Một số lỗi khi get category trong WordPress

Tại sao get_categories() chỉ trả về tất cả các danh mục đang có?

Bạn Nam Đặng có nhắn tin hỏi mình là tại sao bạn cũng dùng hàm get_categories() để get category nhưng mà kết quả trả về chỉ có 5 danh mục, trong khi bạn đã tạo 8 danh mục. Vậy còn 3 danh mục nữa tại sao nó không hiện?
Mình xin trả lời là do bạn chưa khai báo chế độ hiển thị cả các danh mục chưa có bài viết: “hide_empty” => 0. Bạn chỉ cần thêm “hide_empty” => 0, vào $args thì nó sẽ hiện tất cả các danh mục bạn đã tạo

Content Protection by DMCA.com
Share.
About Author

Leave A Reply