Sử dụng Custom Post Type trong WordPress

Có thể là Custom Post Type trong wordpress là một khái niệm mới đối với các bạn mới sử dụng WordPress, tuy nhiên tính năng này đã được các nhà phát triển theme wordpress sử dụng rất nhiều và được đánh giá là rất hay đã được hỗ trợ từ mã nguồn WordPress 3.0 trở lên.

Thông thường một wordpress theme dạng business chuẩn người ta sẽ có mục blog (trình bày các vài viết mới), portfolio (trình bày các danh mục đầu tư), và show room gallery … và các portfolio và gallery sẽ đươc trình bày bằng Custom Post Types.

Custom Post Type cho phép bạn sử lại cấu trúc của post bình thường theo tính huống thực tế của bạn, và sẽ không nằm trong mục post nghĩa là các bài viết mới trình bày ở post, Post Types mặc định sẽ không có hiển thị ngoài trang chủ của WordPress, giống như bạn tạo ra rào cản ngăn các thành phần riêng biệt ra.

Một ví dụ và sẽ là bài thực hành của chúng ta ngày hôm nay về Custom Post Type trong WordPress cho các bạn dễ hiểu, chúng ta sẽ thiết kế theme wordpress với hai dạng là blog và portfolio trong đó blog là post bình thường còn portfolio sẽ trình bày một tiêu đề, một hình sắp xếp theo cột mà người ta gọi là show card. và trang index sẽ có hai thành phần đó ở dạng bài viết mới.

Cách khai báo Custom Post Type trong WordPress

Bạn vào file functions.php của theme đang sử dụng khai báo Post Types để sử dụng.

<!--
add_action('init', 'codex_custom_init');
function codex_custom_init() 
{
	$labels = array(
    	'name' => _x('WordPress Portfolios Gallery', 'post type general name'),
		'singular_name' => _x('Portfolios', 'post type singular name'),
    	'add_new' => _x('Add New', 'portfolio'),
    	'add_new_item' => __('Add New Portfolio'),
    	'edit_item' => __('Edit Portfolio'),
    	'new_item' => __('New Portfolio'),
    	'all_items' => __('All Portfolios'),
    	'view_item' => __('View Portfolio'),
    	'search_items' => __('Search Portfolios'),
    	'not_found' =>  __('No portfolios found'),
    	'not_found_in_trash' => __('No portfolios found in Trash'), 
    	'parent_item_colon' => '',
    	'menu_name' => 'Portfolios'
  );
  $args = array(
    'labels' => $labels,
    'public' => true,
    'publicly_queryable' => true,
    'show_ui' => true, 
    'show_in_menu' => true, 
    'query_var' => true,
    'rewrite' => true, //'rewrite' => array("slug" => "portfolios")
    'capability_type' => 'post',
    'has_archive' => true, 
    'hierarchical' => false,
    'menu_position' => null,
    'supports' => array('title','editor','author','comments', 'custom-fields', 'trackbacks') //thumbnail, excerpt
  ); 
  register_post_type('portfolios',$args);
  register_taxonomy_for_object_type('post_tag', 'portfolios');
  register_taxonomy_for_object_type('category','portfolios');
}

-->

Giải thích:

  • Dòng đầu là có tác dụng chạy hàm khai báo trong nó khi khởi tạo admin trong WordPress
  • Mảng labels chứa các labels sẽ hiển thị khi mình khai báo một Custom Post Type trong WordPress
  • supports: Mảng khai báo các thành phần hỗ trợ khi sử dụng Post Types
  • register_post_type: Hàm đăng ký với WP sử dụng một dạng Post Type như khai báo
  • register_taxonomy_for_object_type: sử dụng taxonomy tag, category mặc định của WP phân biệt bằng tham số post_tag, category có thể thêm các object type khác nữa. Thông thường taxonomy sẽ viết riêng và add vào Post Types để sử dụng, tuy nhiên làm như thế cho đơn giản.
  • Trong rewrite có tham số slug là phần hiển thị trên url của bài viết Custom Post Type khai báo như phần chú thích của mình thì sẽ có dạng như sau: http://bcdonline.net/portfolios/ten_bai_viet_custom_post_type

Sau khi bạn add xong lưu và vào trong quản trị của WordPress bạn sẽ thấy được menu hiển thị như sau:

Menu hiển thị trong admin của custom post type

Menu hiển thị trong admin của custom post type

Lúc này bạn post bài bình thường như ở phần post. Bây giờ ta sẽ đến bước tiếp theo của phần Custom Post Type!

Vòng lăp – Loop trong Custom Post Type

Có 2 cách cho bạn gọi bài từ Custom Post Type ra hiển thị, thứ nhất là nếu ở trong dành riêng cho Custom Post Type tức là có tên đặc trưng như: archive-portfolio.php, single-portfolio.php, category-portfolio.php … ta cứ khai báo loop wordpress bình thường:

if (have_posts()){
  while (have_posts()){
  the_post();
  //xuất nội dung của post ở đây.
}

Nếu là ở trang chung của post mà bạn muốn xuất dữ liệu của Custom Post Type đã khai báo thì bạn phải truy vấn như sau:

<!--
<div id="portfolio">
<?php
$args = array( 'post_type' => 'portfolio', 'posts_per_page' => 9 );
$loop = new WP_Query( $args );
	while ( $loop->have_posts() ) : $loop->the_post();?>

	<?php endwhile; ?>
</div>
-->

Mảng bao gồm post_type và số bài hiển thị posts_per_page, nếu không có thì sẽ loop vô hạn và phân trang bình thường.

Add Custom Post Type vào All in One SEO Pack

All in One SEO Pack là một plugin mạnh về SEO và được sử dụng rộng rãi, rất nhiều người đang dùng loại này, nên để bài viết của Custom Post Type tích hợp vào trong

<!--
function post_type_portfolio_admin_init() {
  // we check if the aiosp_meta function exists, and the AIO SEO plugin is active
	if (function_exists('aiosp_meta') && is_plugin_active('all-in-one-seo-pack/all_in_one_seo_pack.php')) {
    	add_meta_box('aiosp',__('All in One SEO Pack', 'all_in_one_seo_pack'),'aiosp_meta','portfolio');
  	}
}
add_action('admin_init', 'post_type_portfolio_admin_init');
-->
Tùy chọn Custom Post Type vào XML Sitemap

Google XML sitemap là một trong các plugin quan trong khi sử dụng WordPress nó để các bài của Custom Post Type có thể tự động cập nhật vào trong sitemap của bạn thì bạn vào trong phần cấu hình XML Sitemap tìm đến vị trí và làm như trong hình sau đây:

Tùy chọn sử dụng Custom Post Type vào XML Sitemap

Tùy chọn sử dụng Custom Post Type vào XML Sitemap

Add Request Feed cho Custom Post Type

Đọc tin theo dạng Feed là một thế mạnh của WordPress bạn hiển nhiên là không muốn các bài viết Custom Post Type của mình sẽ không có trong danh sách tin feed đúng không nào, bạn làm như sau: Vào trong functions.php code đoạn sau vào

<!--
function myfeed_request($qv) {
	if (isset($qv['feed']) && !isset($qv['post_type']))
		$qv['post_type'] = array('post', 'portfolio');
	return $qv;
}
add_filter('request', 'myfeed_request');
-->

Sau khi hoàn chỉnh các bước trên bạn kết hợp thêm post thumbnail image hay timthumb resize ảnh bạn có thể trình bày được dạng portfolio theo mong muốn.

Demo Custom Post Type Danh mục đầu tư

Demo Custom Post Type Danh mục đầu tư

Kết luận: Đến đây có lẽ sẽ đừng bài giới thiệu của mình, theo mình thì Custom Post Type rất hay và người phát triển theme nên biết và học tập, các bạn có thể xem thêm các nguồn sau đây để học tập và ngâm cứu thêm. 😀

http://codex.wordpress.org/Post_Types
http://codex.wordpress.org/Function_Reference/register_post_type

VN:F [1.9.22_1171]
Rating: 8.7/10 (7 votes cast)
Sử dụng Custom Post Type trong WordPress, 8.7 out of 10 based on 7 ratings
Share This