Bài 12: Custom Taxonomy trong WordPress

Bài trước mình đã hướng dẫn bạn tạo một thể loại bài viết mới bằng các sử dụng hàm register_post_type, tuy nhiên bấy nhiêu đó là chưa đủ để bạn có thể xây dựng những ứng dụng thực tế được. Ví dụ bạn xây dựng một website bán hàng và bạn cần lưu trữ thông tin brand (thương hiêu sản phẩm), điều này trong WordPress không hỗ trợ mà nó chỉ hỗ trợ chuyên mục với tags thôi. Nhưng đừng lo nhé, WordPress có hỗ trợ bạn một số API giúp tạo ra những đối tượng tương tự như category đó là Taxonomies.

1. Custom Taxonomies là gì?

Taxonomy là tập hợp những thể loại giống như category. Mặc định khi bạn cài đặt WordPress sẽ có bốn taxonomies đó là Category, Tag, Link Category và Post Format. Vậy Custom Taxonomies là cách sử dụng những Taxonomies API mà WordPress cung cấp sẵn để tạo ra những Taxonomy mới. Ví dụ bạn xây dựng một website bán hàng thì bạn sẽ tạo thêm một số Taxonomies như Brand, Company, ...

Tất cả những taxonomies sẽ được lưu trong bảng term_taxonomy, không tin bạn hãy mở bảng này lên thì sẽ thấy một record như sau:

Mô hình cơ sở dữ liệu của Taxonomy và Post sẽ có 5 bảng đó là:

Trong đó:

  • wp_terms: Bảng lưu các record của taxonomies, ví dụ bạn tạo ra chuyên mục tin trong nước, thương hiệu Sony thì bảng này sẽ chứa hai item này.
  • wp_term_taxonomy: Bảng lưu thể loại của taxonomies và các thông tin như thông tin về taxonomy đa cấp. Nó có một khóa ngoại trỏ đến bảng term bởi vì nó là bảng cấu hình của term
  • wp_termmeta: Bảng này lưu trữ các metadata của taxonomies
  • wp_term_relationships: Bảng lưu mối quan hệ giữa taxonomies và bài viết
  • wp_posts: Bảng chứa bài viết

Để dễ hiểu thì tôi khuyên bạn nên thử thêm một vài chuyên mục và sau đó vào trong cơ sở dữ liệu để xem cách nó lưu trữ, như vậy sẽ rất dễ tiếp thu.

2. Tạo Taxonomy trong WordPress

Để tạo một taxonomy thì chúng ta sử dụng hàm register_taxonomy(), và tương tự như hàm register_post_type thì hàm này sẽ được đưa vào Hook init.

Cú pháp của hàm này như sau:

register_taxonomy( $taxonomy, $object_type, $args )

Trong đó:

  • $taxonomy là tên của taxonomy cần tạo, chúng ta nên đặt chữ cái thường không dấu và tiếng Anh kế hợp với ký tự gạch dưới. Ví dụ wp_brand, wp_company
  • $object_type: Tên của thể loại mà taxonomy thuộc về, trong hệ thống gồm có thể loại post, page, attachment, revision, nav_menu_item hoặc là một loại thuộc Custom Post Type.
  • $args là một mảng gồm nhiều key và được giải thích ở phần dưới đây.

Các phần tử của mảng $args:

  • label: Tên mô tả số nhiều dùng cho vấn đề dịch thuật
  • labels: Mảng này gồm nhiều phần tử và chức năng chung là chỉnh sửa text trên giao diện
    • name: Text hiển thị trên menu chính của taxonomy, ví dụ Brand 
    • singular_name: Tên của taxonomy, ví dụ mỗi category thì ta gọi là mỗi category
    • menu_name: Tên hiển thị trên menu, nếu không truyền vào thì nó lấy giá trị của key name
    • all_items: Tìm hiểu sau
    • edit_item: Nhãn hiển thị thay thế cho từ Edit Tag hoặc Edit Category 
    • view_item: Tìm hiểu sau
    • update_item: Nhãn hiển thị cho Update Tag hoặc Update Category
    • add_new_item: Nhãn hiển thị cho Add New tag hoặc Add New Category 
    • new_item_name: Tìm hiểu sau
    • parent_item: Tìm hiểu sau
    • parent_item_colon: Tìm hiểu sau
    • search_items: Nhãn hiển thị cho Search Tag hoặc Search Category
    • popular_items: Nhãn hiển thị cho Popular Tag hoặc Popular Category
    • separate_items_with_commas: Ký tụ seperate trong hộp metabox hiển thị ở trang edit bài viết
    • add_or_remove_items: Nhãn hiển thị cho chuỗi Separate tags with commas ở hộp metabox trong trang edit bài viết
    • choose_from_most_used: Text hiển thị cho đoạn text Choose From Most Use phần Meta Box ở trong trang edit bài viết
    • not_found: Text hiển thị cho phần không tìm thấy bài viết
  • public: Nếu giá trị TRUE thì sẽ hiển thị trên menu
  • show_ui: Nếu giá trị TRUE thì hiển thị giao diện trong admin
  • show_in_menu: Nếu TRUE thì sẽ hiển thị trong Admin Menu
  • show_in_nav_menus: Nếu có giá trị TRUE thì nó sẽ hiển thị bên trang quản lý menu.
  • show_tagcloud: Hiển thị phần tag cloud ngoài frontend
  • show_in_quick_edit: Hiển thị trong phần Quick Edit bài viết
  • meta_box_cb: Hàm callback gọi đến một hàm Custom Meta Box
  • show_admin_column: Nếu giá trị TRUE thì sẽ tạo ra côt phân loại
  • description: Mô tả cho taxonomy này
  • hierarchical: nếu TRUE thì sẽ giống với Category, ngược lại sẽ giống với Tags
  • update_count_callback: Function callback sẽ gọi khi đếm số lượng của bài viết
  • query_var: Tìm hiểu sau
  • rewrite: Cấu hình rewrite URL
  • capabilities: Nhóm quyền của thể loại này

Về phần giải thích từng phần tử thì nó giống nhu trong bài Custom Post Type, vậy nên bạn hãy đọc bài đó trước khi đọc bài này nhé. Hoặc bạn có thể vào link này để xem phần giải thích trên trang chủ của nó.

Ví dụ: Tạo một Taxonomy brand

Bạn tạo một file tên là custom-taxonomy.php nằm trong thư mục includes và require file này vào file wp-learn.php.

Tiếp theo bạn nhập đoạn code sau vào file custom-taxonomy.php.

add_action('init', 'create_brand');

function create_brand() {
    register_taxonomy('brand', 'post', array(
            'label' => 'Brand',
            'labels' => array(
                'name'          => __('Brand'),
                'singular_name' => __('Brand'),
                'add_new_item'  => __('Add New Brand'),
                'new_item'      => __('New Brand'),
                'add_new'       => __('Add Brand'),
                'edit_item'     => __('Edit Brand')
            ),
            'public' => true,
            'hierarchical' => true
        )
    );
}

Bạn lưu lại và vào edit một bài viết bất kì thì sẽ thấy một hộp Meta Box như sau:

Tiếp theo bạn nhìn lên danh sách Admin Menu Item thì sẽ thấy xuất hiện một đường link mới như sau:

Quá đơn giản phải không các bạn :)

3. Lời kết

Qua bài này mình đã hướng dẫn các bạn cách sử dụng hàm register_taxonomy để custom taxonomy trong WordPress, hy vọng qua bài này sẽ giúp bạn hình dung được hệ thống database trong WordPress. 

Để dễ hiểu thì mình khuyên bạn nên lên trang chủ của nó để đọc phần giải thích các tham số truyền vào trong hàm register_taxonomy bởi vì mình dịch sang tiếng Việt sẽ hơi khó hiểu. Hoặc bạn vừa học vừa edit các tham số và vừa vào trong hệ thống giao diện Admin để xem những thay đổi của nó để từ đó rút ra chức năng của từng tham số truyền vào.

Bài này mình dừng tại đây, bài tiếp theo có lẽ chúng ta tiếp tục tìm hiểu về Custom Post Type trong WordPress.

Hãy để lại link bài viết gốc khi chia sẻ bài viết này, mình sẽ report DMCA với những website lấy nội dung mà không để nguồn hoặc copy bài với số lượng lớn.

Nguồn: freetuts.net

Profile photo of adminTheHalfHeart

TheHalfHeart

Có sở thích viết tuts nên đã từng tham gia viết ở một số diễn đàn, đến năm 2014 mới có điều kiện sáng lập ra freetuts.net. Sinh năm 90 và có 1 vợ 2 con, thích ca hát và lập trình.

ĐĂNG BÌNH LUẬN: Đăng câu hỏi trên Group Facebook để được hỗ trợ nhanh nhất.