Chỉ hiển thị child category trong loop WordPress

1 ngày ago, WordPress Themes, Views
Chỉ hiển thị child category trong loop WordPress

Chỉ Hiển Thị Child Category Trong Loop WordPress

Trong quá trình phát triển theme WordPress, việc hiển thị danh mục (category) là một yêu cầu phổ biến. Tuy nhiên, đôi khi chúng ta chỉ muốn hiển thị danh mục con (child category) trong một vòng lặp cụ thể, thay vì hiển thị tất cả các danh mục. Bài viết này sẽ hướng dẫn chi tiết cách thực hiện việc này, từ cơ bản đến nâng cao, kèm theo ví dụ cụ thể và giải thích rõ ràng.

Hiểu Rõ Về Category Và Child Category Trong WordPress

Trước khi đi sâu vào code, điều quan trọng là phải hiểu rõ cấu trúc danh mục trong WordPress. Danh mục được tổ chức theo cấu trúc phân cấp, tức là một danh mục có thể có nhiều danh mục con, và danh mục con lại có thể có danh mục con khác. Ví dụ, bạn có thể có danh mục “Công nghệ”, sau đó có các danh mục con như “Điện thoại”, “Máy tính”, “Internet”.

Việc quản lý danh mục và danh mục con được thực hiện dễ dàng trong trang quản trị WordPress. Bạn có thể tạo, chỉnh sửa, và xóa các danh mục, cũng như chỉ định danh mục cha (parent category) cho một danh mục con.

Các Hàm WordPress Quan Trọng Liên Quan Đến Danh Mục

WordPress cung cấp một số hàm hữu ích để làm việc với danh mục. Hiểu rõ các hàm này sẽ giúp bạn tùy biến việc hiển thị danh mục một cách linh hoạt.

  • get_categories(): Hàm này trả về một mảng các đối tượng chứa thông tin về các danh mục. Bạn có thể sử dụng nhiều tham số để lọc danh mục, chẳng hạn như chỉ lấy danh mục con của một danh mục cha cụ thể.
  • wp_list_categories(): Hàm này tạo một danh sách HTML các danh mục. Hàm này cũng có nhiều tham số để tùy biến, nhưng thường ít linh hoạt hơn so với get_categories() khi bạn muốn kiểm soát hoàn toàn cách hiển thị.
  • the_category(): Hàm này hiển thị danh sách các danh mục mà một bài viết thuộc về.
  • get_category(): Hàm này trả về một đối tượng chứa thông tin về một danh mục cụ thể, dựa trên ID của danh mục đó.
  • category_exists(): Hàm này kiểm tra xem một danh mục có tồn tại hay không.

Hiển Thị Danh Mục Con Sử Dụng get_categories()

Sử dụng hàm get_categories() là cách linh hoạt nhất để hiển thị danh mục con. Bạn có thể kiểm soát hoàn toàn cách danh mục được hiển thị trong vòng lặp của bạn.

Dưới đây là ví dụ về cách hiển thị danh mục con của danh mục có ID là 10:


  <?php
  $args = array(
    'child_of' => 10, // ID của danh mục cha
    'hide_empty' => 0, // Hiển thị cả danh mục trống
    'orderby' => 'name', // Sắp xếp theo tên
    'order' => 'ASC' // Sắp xếp tăng dần
  );

  $categories = get_categories( $args );

  if ( $categories ) {
    echo '<ul>';
    foreach ( $categories as $category ) {
      echo '<li><a href="' . get_category_link( $category->term_id ) . '" title="' . sprintf( __( 'View all posts in %s' ), $category->name ) . '" ' . '>' . $category->name . '</a></li>';
    }
    echo '</ul>';
  }
  ?>
  

Giải thích:

  • $args: Đây là một mảng các tham số truyền cho hàm get_categories().
  • 'child_of' => 10: Chỉ định rằng chúng ta muốn lấy các danh mục con của danh mục có ID là 10. Thay 10 bằng ID của danh mục cha mà bạn muốn lấy danh mục con.
  • 'hide_empty' => 0: Nếu bạn muốn hiển thị cả các danh mục không có bài viết nào, hãy đặt tham số này là 0. Nếu bạn muốn ẩn các danh mục trống, hãy đặt là 1.
  • 'orderby' => 'name': Sắp xếp danh mục theo tên. Các tùy chọn khác bao gồm ‘ID’, ‘slug’, ‘count’ (số lượng bài viết).
  • 'order' => 'ASC': Sắp xếp theo thứ tự tăng dần. Bạn có thể sử dụng ‘DESC’ để sắp xếp theo thứ tự giảm dần.
  • get_category_link( $category->term_id ): Lấy URL của trang danh mục.
  • $category->name: Lấy tên của danh mục.

Hiển Thị Danh Mục Con Sử Dụng wp_list_categories()

Hàm wp_list_categories() cung cấp một cách nhanh chóng để hiển thị danh mục, nhưng ít linh hoạt hơn get_categories() khi bạn muốn tùy biến HTML.

Dưới đây là ví dụ về cách sử dụng wp_list_categories() để hiển thị danh mục con:


  <?php
  $args = array(
    'child_of' => 10, // ID của danh mục cha
    'title_li' => '' // Loại bỏ tiêu đề mặc định "Categories"
  );
  wp_list_categories( $args );
  ?>
  

Giải thích:

  • 'child_of' => 10: Tương tự như ví dụ trước, chỉ định danh mục cha có ID là 10.
  • 'title_li' => '': Hàm wp_list_categories() mặc định thêm một tiêu đề “Categories” vào danh sách. Chúng ta đặt title_li thành rỗng để loại bỏ tiêu đề này.

Bạn có thể tìm hiểu thêm về các tham số khác của wp_list_categories() trong tài liệu chính thức của WordPress.

Ví Dụ Thực Tế: Hiển Thị Danh Mục Con Trong Sidebar

Một trường hợp sử dụng phổ biến là hiển thị danh mục con trong sidebar của theme. Bạn có thể thêm code này vào file sidebar.php (hoặc file template tương ứng) của theme.


  <aside id="secondary" class="widget-area">
    <section class="widget widget_categories">
      <h2 class="widget-title">Danh Mục Con</h2>
      <ul>
        <?php
          $args = array(
            'child_of' => 5, // Thay 5 bằng ID của danh mục cha bạn muốn hiển thị
            'hide_empty' => 1,
            'orderby' => 'name',
            'order' => 'ASC'
          );

          $categories = get_categories( $args );

          if ( $categories ) {
            foreach ( $categories as $category ) {
              echo '<li><a href="' . get_category_link( $category->term_id ) . '" title="' . sprintf( __( 'Xem tất cả bài viết trong %s' ), $category->name ) . '">' . $category->name . '</a></li>';
            }
          } else {
            echo '<li>Không có danh mục con nào.</li>';
          }
        ?>
      </ul>
    </section>
  </aside>
  

Lưu ý: Đảm bảo thay thế ID danh mục cha (trong ví dụ này là 5) bằng ID danh mục cha mà bạn muốn hiển thị danh mục con.

Lọc Danh Mục Con Bằng PHP Conditional Tags

Trong một số trường hợp, bạn có thể muốn hiển thị danh mục con chỉ trên một số trang nhất định. Bạn có thể sử dụng các PHP conditional tags của WordPress để thực hiện điều này.

Ví dụ, bạn có thể hiển thị danh mục con chỉ trên trang danh mục “Công nghệ” (với ID là 10):


  <?php
  if ( is_category( 10 ) ) { // Kiểm tra xem có phải trang danh mục "Công nghệ" không
    $args = array(
      'child_of' => 10,
      'hide_empty' => 1,
      'orderby' => 'name',
      'order' => 'ASC'
    );

    $categories = get_categories( $args );

    if ( $categories ) {
      echo '<ul>';
      foreach ( $categories as $category ) {
        echo '<li><a href="' . get_category_link( $category->term_id ) . '" title="' . sprintf( __( 'Xem tất cả bài viết trong %s' ), $category->name ) . '">' . $category->name . '</a></li>';
      }
      echo '</ul>';
    }
  }
  ?>
  
  • is_category( 10 ): Kiểm tra xem trang hiện tại có phải là trang danh mục có ID là 10 hay không.
  • Bạn có thể sử dụng các conditional tags khác như is_page(), is_single(), is_home() để lọc theo trang, bài viết, trang chủ, v.v.

Kết Luận

Bài viết này đã trình bày chi tiết cách hiển thị danh mục con trong vòng lặp WordPress, sử dụng cả hàm get_categories()wp_list_categories(). Bạn cũng đã học cách sử dụng PHP conditional tags để lọc việc hiển thị danh mục con trên các trang cụ thể. Với kiến thức này, bạn có thể tùy biến theme WordPress của mình một cách linh hoạt và hiệu quả hơn.

Hãy nhớ rằng việc hiểu rõ cấu trúc danh mục và các hàm WordPress liên quan là rất quan trọng để tùy biến việc hiển thị danh mục theo nhu cầu cụ thể của bạn. Luôn tham khảo tài liệu chính thức của WordPress để tìm hiểu thêm về các tùy chọn và tham số có sẵn.

Related Topics by Tag