Custom Post Type – Category – Tag Cho Custom Post Type
1. Khai báo một Custom Post Type
Bạn nào sử dụng wordpress lâu rồi chắc chắn sẽ thấy trong phần quản lý admin trong wordpress đôi khi có tới 2 phần quản lý, 1 là của phần post 1 là của product, cái này thường gặp trong các theme bán hàng. Thường phân biệt ra 2 phần riêng biệt, 1 phần chuyên dung để upload sản phẩm, 1 phần chuyên để upload bài biết, tin tức.
để khai báo thêm dạng custom post type các bạn tạo một đoạn code tượng tự như sau trong file functions.php:
add_action('init', 'create_product_post_type');
function create_product_post_type(){
register_post_type('product',
array(
'labels' => array(
'name' => __('Product'),
'singular_name' => __('Product'),
'add_new' => __('Add New'),
'add_new_item' => __('Add New Product'),
'edit' => __('Edit'),
'edit_item' => __('Edit Product'),
'new_item' => __('New Product'),
'view' => __('View Product'),
'view_item' => __('View Product'),
'search_items' => __('Search Products'),
'not_found' => __('No Products found'),
'not_found_in_trash' => __('No Products found in Trash')
),
'public' => true,
'show_ui' => true,
'publicy_queryable' => true,
'exclude_from_search' => false,
'menu_position' => 20,
'menu_icon' => get_stylesheet_directory_uri(). '/images/product.png',
'hierarchical' => false,
'query_var' => true,
'supports' => array(
'title', 'editor', 'comments', 'author', 'excerpt', 'thumbnail',
'custom-fields'
),
'rewrite' => array('slug' => 'product', 'with_front' => false),
//'taxonomies' => array('post_tag', 'category'),
'can_export' => true,
//'register_meta_box_cb' => 'call_to_function_do_something',
'description' => __('Product description here.')
)
);
Nhìn vào đoạn code trên các bạn cũng hiểu phần nào rồi đúng không, mình sẽ giải thích sơ qua cấu trúc code trên.
Quan trọng nhất là nội dung của hàm “function create_product_post_type()”, các bạn thay đổi các từ ngữ cho phù hợp với mục đích sử dụng của bạn.
labels: là các chữ hiển thị tương ứng cho các chức năng trong custom post type, nhìn vô đây các bạn biết mình nên làm gì rồi đúng không, đây là code chuẩn mình nghĩ các bạn cũng không cần thay đổi gì đâu.
publicy_queryable: Cho phép query các Product bằng hàm query_posts().
menu_position: chọn vị trí xuất hiện chomenu products, số 20 là tương ứng với vị trí số 20 trong thứ tự menu, các bạn thay đổi sẽ thấy sự khác nhau của vị trí. 20 là vị trí sau mục quản lý Pages
menu_icon: là địa chỉ đường dẫn của icon, kích thước là 16×16.
hierarchical: có được phân cấp cha con hay không
query_var: biến dùng trong phương thức Get.
supports: khai báo các meta box như author, comment…
rewrite: tạo lại đường dẫn sai khi thực hiện query
can_export: có thế xuất nội dung ra file XML
description: diễn giải.
2. Thêm custom taxonomy vào Products
Để đăng ký các custom taxonomy cho post type product, code có cấu trúc tương tự như sau:
add_action('init', 'create_product_taxonomies');
function create_product_taxonomies(){
register_taxonomy('brand', 'product', array(
'hierarchical' => true,
'labels' => array(
'name' => __('Brand'),
'singular_name' => __('Brand'),
'add_new' => __('Add New'),
'add_new_item' => __('Add New Brand'),
'new_item' => __('New Brand'),
'search_items' => __('Search Brands'),
),
));
register_taxonomy('size', 'product', array(
'hierarchical' => false,
'labels' => array(
'name' => __('Size'),
'singular_name' => __('Size'),
'add_new' => __('Add New'),
'add_new_item' => __('Add New Size'),
'new_item' => __('New Size'),
'search_items' => __('Search Sizes'),
),
));
register_taxonomy('price', 'product', array(
'hierarchical' => false,
'labels' => array(
'name' => __('Price'),
'singular_name' => __('Price'),
'add_new' => __('Add New'),
'add_new_item' => __('Add New Price'),
'new_item' => __('New Price'),
'search_items' => __('Search Prices'),
),
));
}
create_product_taxonomies: là hàm để đăng ký một taxonomy cho wordpress
register_taxonomy
: Đăng ký 1 custom taxonomy tên là brand, và post type là product và có phân cấpTương tự đăng ký thêm 2 taxonomy size và brand. Về cơ bản với 2 code ở trên ta đã có một custom post type theo ý mình. Hãy thử tạo product, query_posts(), hiển thị lên trang xem như thế nào?
3. Hiển thị bài post
Với bài post mặc định thì khi được load WP sẽ dùng template file là single.php để hiển thị nội dung. Nhưng với custom post type thì ta phải khai báo một file có định dạng single-tên-custom-post-pype.php (vd: single-product.php với product là tên custom post type). Trong file này ta có thể xài vòng loop bình thường mà ai xài WP cũng thuộc lòng
if (have_posts()){
while (have_posts()){
the_post();
//xuất nội dung của post ở đây.
}
}else{
echo "No posts found";
}
4. Trình bày danh sách dạng archive.php
Phiên bản hiện tại của WP là 3.0.3, với phiên bản này thì WP không hỗ trợ archive cho custom post type. Theo lời giới thiệu của một số developer đang làm core của WP thì phiên bản 3.1 mới có hỗ trợ chức năng này. Tuy nhiên hiện tại thì có 2 plugins hỗ trợ ta làm việc này. Một trong số chúng mà tôi thấy dễ xài là Simple Custom Post Type Archives, sau khi kích hoạt plugin này thì ta phải tạo file dạng: type-tên-custom-post-type.php (vd: type-product.php) và lưu ở thư mục theme.
Nội dung file ta có thể sử dụng vòng loop để hiển thị danh sách các bài post bình thường như file archive.php
5. query_posts với custom post type
Đoạn code sau sẽ thực hiện truy vấn những bài post thuộc post type là product, có title hoặc content chứa chữ izwebz, và số post hiển thị là 10
//function dùng để filter
function filter_where($where = '') {
//post_title, post_content like '%izwebz%'
$text = 'izwebz';
$where .= " AND (post_title like '%$text%' OR post_content like '%$text%')";
return $where;
}
// đăng ký filter với WP
add_filter('posts_where', 'filter_where');
$paged = (get_query_var('paged')) ? get_query_var('paged') : 0;
$args = array('post_type' => 'product', 'paged' => $paged,'showposts' => 10 );
query_posts($args);
if(have_posts()){
while(have_posts()){
the_post();
//xuất nội dung ở đây
}
}else{
echo "No products found";
}
//nhớ reset query sau khi xai query_posts()
wp_reset_query();
add_filter: Đăng ký filter với WP. Đây là 1 kỹ thuật hook cực hay của WP. Nếu sau bài viết này chưa có ai giới thiệu về hook thì tôi xin tình nguyện giới thiệu chúng trong bài tiếp theo
Cuscom post type cho ta nhiều hướng gaiir pháp trong việc code wordpress, nếu bạn sử dụng thuần thục custom post type nó sẽ giúp bạn giải quyết một khối công việc rất lớn, giúp bạn quản lý trang web được tốt hơn.
WordPress hỗ trợ rất tốt, nên hiện nay rất nhiều trang web trên thế giới sử dụng wordpress, nó có thể làm tất cả những tính năng đơn giản đến nâng cao, tôi thấy wordpress có thể làm được tất cả mọi thứ, những tảng web tin tức đến bán hàng, bất động sản, đặt vé máy bay, khách sạn, các chức năng nhưu booking.
WordPress đơn giản cũng chỉ là code PHP thôi, nó cho ta những khuôn mẫu sẵn, ta chỉ việc sử dụng chúng thôi. Chúc bạn thành công.