Huy Hòa
  • Home
  • Lập trình
    • WordPress
    • Joomla
    • Marketing
    • Seo Web
    • Thiết kế Web
  • Mẹo Vặt
  • Sức khỏe
  • Làm đẹp
  • Du Lịch
  • Free Tools
    • Chuyển Số Thành Chữ
    • Sửa Lỗi Font Chữ Tiếng Việt Online
    • Phần Mềm Gõ Tiếng Việt Online
  • Liên hệ
Nổi bật
  • Nước vo gạo và những công dụng tuyệt vời mà bạn chưa biết
  • 21 Serum HA tốt nhất hiện nay cho da khô, da dầu nhờn và trị mụn
  • 15 cách làm trắng răng tại nhà cực kỳ hiệu quả và dễ áp dụng
  • 50+ website tải Sound Effects chất lượng cao miễn phí và có phí
  • Đánh giá 10 phần mềm SEO AI tốt nhất hiện nay
Thứ Sáu, Tháng Ba 31
Huy Hòa
  • Home
  • Lập trình
    • WordPress
    • Joomla
    • Marketing
    • Seo Web
    • Thiết kế Web
  • Mẹo Vặt
  • Sức khỏe
  • Làm đẹp
  • Du Lịch
  • Free Tools
    • Chuyển Số Thành Chữ
    • Sửa Lỗi Font Chữ Tiếng Việt Online
    • Phần Mềm Gõ Tiếng Việt Online
  • Liên hệ
Huy Hòa
Home»Lập trình»Cách hiển thị Category trong WordPress sử dụng get category với get_categories()

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

Facebook Twitter Pinterest LinkedIn Tumblr Email
Cách hiển thị Category trong Wordpress
Cách hiển thị Category trong Wordpress

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.

Table of Contents

  • 1 Category là gì?
  • 2 Cách sử dụng hàm get_categories() để get category trong WordPress
    • 2.1 Cú pháp sử dụng:
    • 2.2 Parameters
    • 2.3 Return:
  • 3 Các ví dụ về get category trong WordPress
    • 3.1 Hiển thị tất cả các category
    • 3.2 Hiển thị tất cả product category trong woocommerce
    • 3.3 Get category khi có cat_id
    • 3.4 Get category khi biết category name
    • 3.5 Get category khi biết slug
    • 3.6 Hiển thị category dưới dạng dropdown select
    • 3.7 Get Woocommerce catogry và hiển thị dưới dạng select list
    • 3.8 Liệt kê các bài viết theo danh mục
  • 4 Một số lỗi khi get category trong WordPress
    • 4.1 Tại sao get_categories() chỉ trả về tất cả các danh mục đang có?

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.

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

function get_categories( $args = '' ) {
    $defaults = array( 'taxonomy' => 'category' );
    $args     = wp_parse_args( $args, $defaults );
 
    /**
     * Filters the taxonomy used to retrieve terms when calling get_categories().
     *
     * @since 2.7.0
     *
     * @param string $taxonomy Taxonomy to retrieve terms from.
     * @param array  $args     An array of arguments. See get_terms().
     */
    $args['taxonomy'] = apply_filters( 'get_categories_taxonomy', $args['taxonomy'], $args );
 
    // Back compat.
    if ( isset( $args['type'] ) && 'link' === $args['type'] ) {
        _deprecated_argument(
            __FUNCTION__,
            '3.0.0',
            sprintf(
                /* translators: 1: "type => link", 2: "taxonomy => link_category" */
                __( '%1$s is deprecated. Use %2$s instead.' ),
                '<code>type => link</code>',
                '<code>taxonomy => link_category</code>'
            )
        );
        $args['taxonomy'] = 'link_category';
    }
 
    $categories = get_terms( $args );
 
    if ( is_wp_error( $categories ) ) {
        $categories = array();
    } else {
        $categories = (array) $categories;
        foreach ( array_keys( $categories ) as $k ) {
            _make_cat_compat( $categories[ $k ] );
        }
    } 
    return $categories;
}

Cú pháp sử dụng:

get_categories( string|array $args = '' )

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 (,).

$args_cat = array(
'type' => 'post',
'number' => 100,
'hide_empty'=> 0,
'parent' => 0
);
$categories_cat = get_categories( $args_cat );
$th_1234 = '<h2>Danh sách các chuyên mục trên huyhoa.net</h2>';
foreach ( $categories_cat as $t_cat ) {
$th_1234 .= $t_cat->name. ', ' ;
}

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

$args_cat = array( 'type' => 'post', 'number' => 100, 'hide_empty'=> 0, 'parent' => 0 ); 
$categories_cat = get_categories( $args_cat ); 
$th_1234 = '<h2>Danh sách các chuyên mục trên huyhoa.net</h2>'; 
foreach ( $categories_cat as $t_cat ) 
{ 
	$th_1234 .= '<a href ="'.get_term_link($t_cat->slug, 'category').'">'.$t_cat->name. ', ' ; 
}
echo $th_1234;

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

<?php
$args_cat = array(
'type' => 'product',
'number' => 100,
'hide_empty'=> 0,
'parent' => 0
);
$categories_cat = get_categories( $args_cat );
$th_1234 = '<h2>Danh mục sản phẩm</h2>';
foreach ( $categories_cat as $t_cat )
{
$th_1234 .= '<a href ="'.get_term_link($category->slug, 'product_cat').'">'.$t_cat->name. ', ' ;
}
?>

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:

// get a taxonomy term name by the slug
$category = get_term_by('id', 18, 'category');
$term_name = $category->name;

Ở 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:

WP_Term Object
(
[term_id] => 18
[name] => Tên của Category có id là 18
[slug] => slug-cua-category-co-id-18
[term_group] => 0
[term_taxonomy_id] => 18
[taxonomy] => category
[description] => Mô tả của category ở đây
[parent] => 0
[count] => 10
[filter] => raw
)

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.

// get category ID by category name
$category = get_term_by('name', 'Sức khỏe', 'category');
$term_name = $category->name;

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)

// Get terms whose name begins with "my_name"
get_terms( 'category', array( 'name__like' => 'my_name' ) );

// Get terms whose name contains "my_name"
get_terms( 'category', array( 'search' => 'my_name' ) );

(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

// get a taxonomy term name by the slug
$category = get_term_by('slug', 'tin-tuc', 'category')
$term_name = $category->name;

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()

<?php

$args = array(
'show_option_all' => '',
'show_option_none' => __( 'All categories' ),
'option_none_value' => '',
'orderby' => 'ID',
'order' => 'ASC',
'show_count' => 1,
'hide_empty' => 0,
'child_of' => 0,
'include' => '',
'echo' => 1,
'selected' => 0,
'hierarchical' => 1,
'name' => 'category',
'id' => 'category',
'class' => 'form-control',
'depth' => 0,
'tab_index' => 0,
'taxonomy' => 'category',
'hide_if_empty' => false,
'value_field' => 'slug',
);
wp_dropdown_categories( $args );

?>

Ở đâ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ụ:

function huyhoa_category_lists( )
{
$categories = get_categories(
array(
'hide_empty' => 0,
'taxonomy' => 'product_cat' // Khai báo taxonomy cho Woocommerce Product
)
);
$category_lists = array();
$category_lists[0] = __( 'Select Product Category' , 'huyhoa' );
foreach( $categories as $category ){
$category_lists[$category->term_id] = $category->name;
}
return $category_lists;
}

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

$args = array(
'posts_per_page' => -1
);
$query = new WP_Query($args);
$q = array();
while ( $query->have_posts() ) {
}
/* Restore original Post Data */
wp_reset_postdata();

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ề.

$categories = get_the_category();
foreach ( $categories as $key=>$category ) {
$b = '<a href="' . get_category_link( $category ) . '">' . $category->name . '</a>';
}

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

$a = '<a href="'. get_permalink() .'">' . get_the_title() .'</a>';

và

$b = '<a href="' . get_category_link( $category ) . '">' . $category->name . '</a>';

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

$q[$b][] = $a;

Để 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.

?>
<pre><?php var_dump($q); ?></pre>
<?php

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

foreach ($q as $key=>$values) {
echo $key;
echo '<ul>';
foreach ($values as $value){
echo '<li>' . $value . '</li>';
}
echo '</ul>';
}

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

$args = array(
'type' => 'post',
'posts_per_page' => 10 // Số lượng bài viết sẽ lấy. Nếu muốn lấy tất cả thì để là -1
);
$query = new WP_Query($args);
$q = array();
while ( $query->have_posts() ) {
$query->the_post();
$a = '<a href="'. get_permalink() .'">' . get_the_title() .'</a>';
$categories = get_the_category();
foreach ( $categories as $key=>$category ) {
$b = '<a href="' . get_category_link( $category ) . '">' . $category->name . '</a>';
}
$q[$b][] = $a; // Create an array with the category names and post titles
}
/* Restore original Post Data */
wp_reset_postdata();
foreach ($q as $key=>$values) {
echo $key;
echo '<ul>';
foreach ($values as $value){
echo '<li>' . $value . '</li>';
}
echo '</ul>';
}

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

<?php
$args = array(
"hide_empty" => 0,
"type" => "post",
"orderby" => "name",
"order" => "ASC" );
$danhmuc = get_categories($args);
?>

4.7/5 - (200 bình chọn)
Wordpress
Share. Facebook Twitter Pinterest LinkedIn Tumblr Email
Previous ArticleCác lỗi font chữ trên Win 10, 7, chrome, firefox và cách sửa
Next Article Tác dụng cấp ẩm của Axit Hyaluronic cho làn da tươi trẻ, không nếp nhăn
Huy Hoa
  • Website

Related Posts

Đá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í

Hướng dẫn cài đặt, sử dụng, cấu hình Contact Form 7 đầy đủ nhất

Hướng dẫn sử dụng Cloudflare DNS, Cloudflare CDN và bảo mật từ A-Z

get_the_post_thumbnail_url – Get the post thumbnail URL with example

Hướng dẫn sử dụng wp_insert_user có ví dụ cụ thể

WP_Query: Tất cả những thông tin bạn cần biết

Leave A Reply Cancel Reply

Search
SEO - Marketing

get_the_post_thumbnail_url – Get the post thumbnail URL with example

get_the_post_thumbnail_url là hàm dùng để lấy đường dẫn file ảnh đại diện (post thumbnail) của bài viết. Trong Wordpress, hình đại diện của bài viết…

Hàm get_posts() WordPress: Cách sử dụng và ví dụ cụ thể

Cách dùng hàm get_post() trong WordPress để lấy dữ liệu bài viết

Hướng dẫn sử dụng hàm get_terms trong WordPress

Hướng dẫn sử dụng các hàm esc_html_e(), esc_html__(), esc_html() trong WordPress

Hàm get_post_meta() WordPress: Cách sử dụng và ví dụ cụ thể

Hướng dẫn sử dụng hàm get_the_date trong WordPress

Thiết kế Web - Đồ Họa

Download bộ Font chữ viết tay đẹp nhất hiện nay

Font chữ viết tay là bộ font chữ gồm nhiều fonts dành cho các bạn thiết kế đồ họa. Bộ font chữ viết tay bao…

Hàm get_posts() WordPress: Cách sử dụng và ví dụ cụ thể

Hướng dẫn sử dụng hàm get_terms trong WordPress

Giải mã MD5 được không? Những website dịch ngược mã MD5 online tốt nhất

Hướng dẫn sử dụng các hàm esc_html_e(), esc_html__(), esc_html() trong WordPress

Cách làm mịn da mặt bằng Photoshop mà vẫn giữ được lỗ chân lông

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

Wordpress - Woocommerce

get_user_by: Hướng dẫn sử dụng và ví dụ cụ thể

get_user_by là hàm dùng để lấy thông tin về thành viên dựa trên một trường cụ thể nào đó. get_user_by() có thể dùng để lấy…

Hướng dẫn sử dụng hàm get_the_date trong WordPress

Cách làm mịn da mặt bằng Photoshop mà vẫn giữ được lỗ chân lông

Hướng dẫn sử dụng hàm get_terms trong WordPress

Hướng dẫn sử dụng Cloudflare DNS, Cloudflare CDN và bảo mật từ A-Z

WP_Query: Tất cả những thông tin bạn cần biết

20 công cụ tách nền ảnh tốt nhất và hoàn toàn miễn phí

Bài viết mới

Nước vo gạo và những công dụng tuyệt vời mà bạn chưa biết

21 Serum HA tốt nhất hiện nay cho da khô, da dầu nhờn và trị mụn

15 cách làm trắng răng tại nhà cực kỳ hiệu quả và dễ áp dụng

50+ website tải Sound Effects chất lượng cao miễn phí và có phí

Đá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í

Sự khác nhau giữa Collagen và Axit Hyaluronic

Tác dụng cấp ẩm của Axit Hyaluronic cho làn da tươi trẻ, không nếp nhăn

© 2023 All Rights Reserved  by  HuyHoa.Net. DMCA.com Protection Status .
Hosted by Dreamhost. Follow us on  Google News.
  • Giới thiệu
  • Bảo mật
  • Quy định sử dụng
  • Liên hệ

Type above and press Enter to search. Press Esc to cancel.