Lấy category và custom category trong WordPress

Trong bài viết này Sáu sẽ hướng dẫn cho bạn cách lấy chuyên mục và custom taxonomy trên blog WordPress. Yêu cầu của bài này đòi hỏi bạn phải biết về code PHP căn bản cũng như là kiến thức cơ bản về lập trình WordPress.

Lấy tất cả category và custom taxonomy

Yêu cầu của bài viết được đặt ra là, bạn muốn tạo một custom post type mới và trong đó có custom taxonomy đóng vài trò như một category. Bây giờ bạn muốn lấy tất cả các category của bài viết cũng như tất cả các category của custom post type bạn vừa tạo.

Đối với các chuyên mục của bài viết trên blog WordPress thì bạn có thể truy vấn bằng hàm get_categories đã có sẵn trong bộ core.

<?php
$args = array(
  'orderby' => 'name',
  'parent' => 0
  );
$categories = get_categories( $args );
foreach ( $categories as $category ) {
	echo '<a href="' . get_category_link( $category->term_id ) . '">' . $category->name . '</a><br/>';
}
?>

Với trường hợp bên trên thì không có gì phải nói nhiều rồi, vì nó đã có sẵn và chúng ta cứ thế mà sử dụng, có điều bạn cũng phải tham khảo thêm bài viết hướng dẫn của WordPress.

Bây giờ, bạn sẽ thực hành viết code lấy tất cả các chuyên mục bao gồm category và custom taxonomy trên trang blog hiện tại. Bạn áp dụng code như Sáu đã làm bên dưới:

<?php
function stheme_get_taxonomy($term_id = 0) {
	$taxonomies = get_taxonomies('', 'object');
	if($term_id < 1) {
		return $taxonomies;
	}
	foreach($taxonomies as $tax) {
		$terms = get_terms($tax->name);
		foreach($terms as $term) {
			if($term->term_id == $term_id) {
				return $tax;
			}
		}
	}
}
?>
<?php $taxonomies = stheme_get_taxonomy(); ?>
<?php foreach($taxonomies as $tax) : ?>
	<?php if(empty($tax->hierarchical) || !$tax->hierarchical) continue; ?>
	<?php $terms = get_terms($tax->name); ?>
	<?php foreach($terms as $term) : ?>
		<?php echo $term->name."<br />"; ?>
	<?php endforeach; ?>
<?php endforeach; ?>

Code bên trên Sáu sử dụng hàm get_taxonomies để lấy tất cả các taxonomy hiện có trên blog của bạn và trả về với kiểu giá trị là object.

$taxonomies = get_taxonomies('', 'object');

Sau khi có được danh sách các taxonomy thì bạn duyệt từng taxonomy một và lấy term của nó. Bạn chú ý câu lệnh điều kiện để chúng ta kiểm duyệt xem taxonomy đó có phải là một category hay không:

<?php if(empty($tax->hierarchical) || !$tax->hierarchical) continue; ?>

Nếu nó không phải là chuyên mục thì chúng ta sẽ bỏ qua, ngược lại nếu taxonomy là chuyên mục thì chúng ta sẽ lấy tất cả các term của nó.

<?php $terms = get_terms($tax->name); ?>

Như vậy là chúng ta đã có danh sách các chuyên mục, chỉ cần lưu nó lại hoặc là xuất nó ra bên ngoài để sử dụng. Chúc bạn thành công.

15 bình luận cho “Lấy category và custom category trong WordPress

  1. Sáu cho minh hoi: minh dang viet cai sidebar da cho hien thi duoc taxonomies gio minh muon khi click vao taxonomies nao thi no se hien thi tren trang chu tat ca bai viet cua taxonomies do..

  2. cái đoạn code trên ném vào file nào vậy bạn? và mình thay cái “oject” thành cái gì được bạn ơi? sr mình mới học web nên k biết. mong bạn chỉ kĩ hơn dc k. đoạn code trên mình hiểu cách chạy và viết nhưng kk biết viết chúng vào chỗ nào và ấy các cái khác ntn?

  3. Chào a Sáu , e có một vấn đề mong a giúp ,hiện tại theo cấu trúc wp-template-hierarchy thì khi tạo 1 custom taxonomy mình sẽ tạo ra 1 file theo kiểu taxonomy-slug . sao e tạo nó k nhận là sao nhỉ . mong a rep qua email vanbaodo@gmail.com

      1. Hi a, e vẫn chưa hiểu lắm a có thể giải thích rõ giúp e được không , Giả sử e có 1 custom postype là nha-dat . Trong custom postype này có rất nhiều taxonomy như ( dat-ban , dat-thue , tinh-thanh , quan-huyen ) . Giờ e muốn tạo 1 file hiển thị các bài viết của từng taxonomy một thì làm ntn ạ . E đã thử taxonomy-dat-ban , taxonomy nó đều không nhận . Không biết e phải tạo ntn mới đúng mong a giúp đỡ . Cảm ơn a

Trả lời

Thư điện tử 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 *