Logo của Wordpress ngày nay

Tìm hiểu về Custom Post Type của WordPress

WordPress có thể làm được hai thứ cực kì mạnh mẽ: Làm blog cá nhân và làm một CMS đúng nghĩa, nếu các bạn làm blog cá nhân thì không cần phải bàn nhiều, nhưng nếu các bạn làm một CMS như một tòa soạn báo, một trang nhiều tác giả hay làm diễn đàn, thì cần phải chú ý tới nhiều vấn đề, và nếu bạn nghiên cứu WordPress bạn sẽ thấy WordPress rất hay, nhất là Custom Post Type.

Trong WordPress ta có Post và Page là mặc định, trong đó Category và TAG thực chất là Custom Taxonomy được Assigned vào Post. Nếu bạn muốn thêm câu hỏi cho blog, hoặc muốn thêm sản phẩm vào blog thì đó chính là Post, nhưng người ta gọi là Custom Post Type ( loại bài đăng tùy chọn ).

Tôi lấy ví dụ như sau: nếu bạn cài WooCommerce vào blog, thì plugin này sẽ sinh ra một Custom Post Type mới là sản phẩm, và thêm Hóa đơn/ Đơn hàng cùng với Custom Taxonomy là “nhóm sản phẩm”.

VÍ dụ khác là Testimonial, plugin này sẽ tạo ra một Custom Post Type tên là Testimonial và Custom Taxonomy là “Category Testimonial”

Tiếp theo, trong giao diện, để hỗ trợ Custom Post Type mà bạn vừa tạo, bạn cần chú ý hai file mới cần phải tạo nếu bạn muốn hiển thị theo cách riêng của mình, bạn tạo file Archive-{slug}.php và Single-{slug}.php

Okey, giờ thực hành tí nhỉ, ví dụ blog của Jam có phần câu hỏi, các bạn cần phải tạo một Custom Post Type là “câu hỏi”

add_action('init', 'jamviet_ask_init', 1);  

function jamviet_ask_init(){
    $labels = array(
        'name' => 'Câu hỏi',
        'singular_name' => 'Câu hỏi',
        'add_new' => 'Thêm câu hỏi',
        'add_new_item' => 'Thêm mới câu hỏi',
        'edit_item' => 'Chỉnh sửa câu hỏi',
        'new_item' => 'Câu hỏi mới',
        'view_item' => 'Xem câu hỏi',
        'search_items' => 'Tìm câu hỏi',
        'not_found' =>  'Không thấy câu hỏi',
        'not_found_in_trash' => 'Không thấy câu hỏi trong thùng rác',
        'menu_name' => 'Câu hỏi'
    );
    
    $args = array(
        'labels' => $labels,
        'public' => true,
        'publicly_queryable' => true,
        'show_ui' => true,
        'show_in_menu' => true,
        'query_var' => true,
        'rewrite' => true,
        'capability_type' => 'post',
        'has_archive' => true,
        'hierarchical' => false,
        'menu_position' => null,
        'supports' => array('title','editor','author','excerpt','comments'),
        'rewrite' => array('slug' => 'question')
    );
    register_post_type('question',$args);
}

Tiếp theo, vì nếu muốn nhóm các câu hỏi vào trong Tag hoặc Category riêng, tôi thêm hàm sau:

add_action('init', 'jamviet_ask_init2', 1);  

function jamviet_ask_init2(){
    $labelstag = array(
        'name' => 'Nhóm câu hỏi',
        'singular_name' => 'Nhóm câu hỏi',
        'search_items' =>  'Tìm nhóm',
        'all_items' => 'Toàn bộ nhóm',
        'parent_item' => 'Nhóm cha mẹ',
        'parent_item_colon' => 'Nhóm cha mẹ',
        'edit_item' => 'Chỉnh sửa nhóm',
        'update_item' => 'Cập nhật nhóm',
        'add_new_item' => 'Thêm nhóm',
        'new_item_name' => 'Nhóm mới',
    );
    
    register_taxonomy('ask_group',array('question'), array(
        'hierarchical' => false,
        'labels' => $labelstag,
        'show_ui' => true,
        'hierarchical' => true,
        'query_var' => true,
        'rewrite' => array( 'slug' => 'ask_group' )
    ));
}

Thực ra tôi để chúng vào trong một hàm, nhưng do muốn lấy ví dụ cho các bạn nên tôi tách ra làm hai hàm, trường hợp các bạn có thể cho chung với một hàm và sử dụng một lần hook duy nhất, kết quả như sau:

Thêm câu hỏi vào blog
Thêm câu hỏi vào blog

Hú hu, gần như đã xong, nếu các bạn không hiển thị gì đặc biệt, các bạn chỉ cần vào Setting > Permalink > Update để cập nhật lại đường dẫn tĩnh, sau đó nó mới nhận đường dẫn Custom Post Type, trường hợp bạn không làm động tác này thì nó trả về 404 not found mỗi khi bạn truy cập vào câu hỏi.

Okey, nếu bạn muốn tùy chỉnh hiển thị như Jam thì cần chú ý các file sau:

  • Archive-question.php
  • Single-Question.php
  • Taxonomy-ask_group.php

Và sau đó các bạn copy phần tương ứng vào là:

  • Category.php
  • Single.php
  • Category.php

Vào trong các file mới tạo, giờ thì có thể tùy chỉnh chúng theo ý muốn của bạn, đó là cách Jam hay làm, nó nhanh chóng tạo được hiển thị để chúng ta tùy chỉnh nó.

Custom post type có thể làm được gì ?

Custom Post Type có thể làm được mọi thứ, ví dụ như đơn hàng trong mua bán, Status, Sản phẩm, giỏ hàng, hay bất cứ thứ gì bạn muốn, tất cả đều có thể trên Custom Post Type, tùy vào việc bạn tưởng tượng sẽ làm gì với chúng, một số plugin hay dùng chúng để lưu các trường dữ liệu lớn, dài, cho dù muốn hiển thị chúng bên ngoài Front Page hay không hiển thị thì Custom Post Type đều có thể làm được.

Custom Post Type đều có thể kết hợp với Custom Taxonomy để nhóm các Custom Post Type lại với nhau, giống như Category và Post vậy !

Bài viết này nhằm giúp các bạn tìm hiểu sơ qua về Custom Post Type, trong các bài viết sau mình sẽ giới thiệu kĩ càng hơn cùng bài thực hành luôn cho các bạn nắm rõ, chúc các bạn thành công !

TÁC GIẢ:

Tôi là Jam, thâm niên 7 năm thiết kế website và làm SEO. Hãy theo dõi blog của tôi để nhận được nhiều chia sẻ thú vị xung quanh chủ đề công nghệ.

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *