Custom single theo Category trong WordPress

Tháng Tám 12, 2015 9:50 sáng

custom-single
Xin chào các bạn. Hôm nay mình xin chia sẻ cách Custom single theo Category trong WordPress.

Như cách bạn đã biết WordPress  cho chúng ta tùy biến các file theo dạng category-id.php, category-slug.php, single-id.php, single-slug.php nhưng vấn đề bây giờ đặt ra ở đây là: sử dụng file để hiện thị chi tiết bài viết theo từng chuyên mục thì làm như thế nào?

Ví dụ: Bạn có 2 chuyên mục WordPress  Joomla.  Giờ bạn muốn hiện thị chi tiết các bài viết trong chuyên mục WordPress khác với các bài viết trong chuyên mục Joomla thì làm thế nào? Mặc định của WordPress thì file  chung để hiện thị chi tiết bài viết là single.php, bạn cũng không thể sử dụng cách đặt tên file theo id, hay slug được. Vì nếu có nhiều bài viết thì sao?

Để giải quyết vấn đề này có 2 cách, bạn mở file functions.php trong thư mục theme của bạn và thêm đoạn code sau:

Cách 1 : tạo file theo dạng single-id_chuyenmuc.php. Ví dụ:  id của chuyên mục WordPress là 1 và id của chuyên mục Joomla là 2 thì sẽ có 2 file sau: single-1.php, single-2.php.

add_filter(‘single_template’, create_function(‘$t’, ‘foreach( (array) get_the_category() as $cat ) { if ( file_exists(TEMPLATEPATH . “/single-{$cat->term_id}.php”) ) return TEMPLATEPATH . “/single-{$cat->term_id}.php”; } return $t;’ ));

 

Cách 2: Tạo file theo dạng single-slug_chuyenmuc.php. Ví dụ:  slug của chuyên mục WordPress là wordpress và slug của chuyên mục Joomla là joomla thì sẽ có 2 file sau: single-cat-wordpress.php, single-cat-joomla.php.
add_filter(‘single_template’, ‘check_for_category_single_template’);
function check_for_category_single_template( $t )
{
foreach( (array) get_the_category() as $cat )
{
if ( file_exists(TEMPLATEPATH . “/single-cat-{$cat->slug}.php”) ) return TEMPLATEPATH . “/single-cat-{$cat->slug}.php”;
if($cat->parent)
{
$cat = get_the_category_by_ID( $cat->parent );
if ( file_exists(TEMPLATEPATH . “/single-cat-{$cat->slug}.php”) ) return TEMPLATEPATH . “/single-cat-{$cat->slug}.php”;
}
}
return $t;
}

Như thế là bác bạn có thể tùy chỉnh cách hiện thị bài viết cho từng chuyên mục theo cách riêng của mình, thêm phần sinh động. Chúc các bạn thành công.

Chuyên mục: ,