2012-12-27 18 views
8

Tôi hiện đang sử dụng này để liệt kê tất cả các hạng mục:Liệt kê tất cả hạng mục nhưng chỉ có cháu neo (Wordpress)

<?php 
    $args = array (
    'menu' => 'secondary-navigation', 
    'sort_column' => 'menu_order', 
    'container' => 'false', 
    'title_li' => 0, 
    'hide_empty' => 0 
    ); 
    wp_list_categories($args); 
?> 

này chỉ đơn giản là sẽ liệt kê tất cả các loại trong hệ thống phân cấp và với mỗi mục neo.

loại của tôi đang thực sự thiết lập như thế này:

Parent 
    -> Child 
     -> Grandchild 
      -> Great Grandchild 

Vấn đề của tôi là tôi chỉ muốn chắt có neo. Tôi không muốn Phụ huynh, Trẻ em hoặc cháu có neo.

Mọi đề xuất sẽ được đánh giá cao.

+0

Bạn không muốn các phụ huynh, trẻ em & Cháu xuất hiện ở tất cả? hoặc không muốn họ liên kết? Có thể bạn sẽ cần sử dụng khung tập đi tùy chỉnh để hiển thị danh sách đang thực hiện kiểm tra trên tổ tiên của mục hiện tại (Nếu nó có 3 - hiển thị nó, nếu không thì không). Hoặc nếu bạn đang ẩn tất cả các liên kết, bạn có thể sử dụng CSS. Điều này sẽ giúp http://scribu.net/wordpress/extending-the-category-walker.html – Lleo

Trả lời

0

Vui lòng sử dụng mã này

$categories = get_categories(array(
     'child_of' => 9, 
     'hide_empty' => false 
    )); 
foreach($categories as $cat){ 
    echo $cat->name; 
    echo '<br />'; 
} 

mã này chỉ được thử nghiệm cho các loại hai cấp độ.

Thay thế 9 bằng id danh mục của bạn như với id cateogry "Grandchild". Mã này không được thử nghiệm nhưng đây là việc

Hope hữu ích này cho bạn

1

Bạn có thể liên kết đơn giản là vô hiệu hóa sử dụng CSS tinh khiết mà không thay đổi bất kỳ mã php ở tất cả. Kiểm tra mã sau đây, nó sẽ thay đổi con trỏ chuột, vô hiệu hóa chức năng liên kết, và ẩn các kiểu gạch dưới:

.cat-item a, .cat-item .cat-item .cat-item .cat-item a { 
     cursor: default; 
     pointer-events: none; 
     text-decoration: none; 
} 
.cat-item .cat-item .cat-item a { 
     cursor: pointer; 
     pointer-events: auto; 
     text-decoration: underline; 
     /* also add here any special style for grandchildren categories */ 
} 

Kết quả sẽ chính xác như bạn yêu cầu, chỉ có loại cháu dường như được neo.

Hy vọng rằng sẽ trả lời câu hỏi của bạn

1

Như đã đề cập bởi Lleo Holmes trong các ý kiến, phương pháp tốt nhất là tạo ra một tùy chỉnh Walker Class để thực hiện chức năng này. Tôi mất một đâm vào nó, và đã đưa ra những điều sau đây:

class Depth_Category_Walker extends Walker_Category { 
    private $allowed_depths; 

    function __construct($depths_to_link = array()) { 
     $this->allowed_depths = !is_array($depths_to_link) ? array($depths_to_link) : $depths_to_link; 
    } 

    function start_el(&$output, $category, $current_depth = 0, $args = array(), $id = 0) { 
     extract($args); 
     if(in_array($current_depth, $this->allowed_depths)) { 
      parent::start_el($output, $category, $current_depth, $args, $id); 
     } else { 
      $cat_name = esc_attr($category->name); 
      $cat_name = apply_filters('list_cats', $cat_name, $category); 
      if (!empty($show_count)) 
       $cat_name .= ' (' . intval($category->count) . ')'; 

      if ('list' == $args['style']) { 
       $output .= "\t<li"; 
       $class = 'cat-item cat-item-' . $category->term_id; 
       if (!empty($current_category)) { 
        $_current_category = get_term($current_category, $category->taxonomy); 
        if ($category->term_id == $current_category) 
         $class .= ' current-cat'; 
        elseif ($category->term_id == $_current_category->parent) 
         $class .= ' current-cat-parent'; 
       } 
       $output .= ' class="' . $class . '"'; 
       $output .= ">$cat_name\n"; 
      } else { 
       $output .= "\t$cat_name<br />\n"; 
      } 
     } 
    } 
} 

này mở rộng các lớp Walker_Category để chúng ta có thể gọi parent::start_el() để sản xuất liên kết nếu nó ở độ sâu thích hợp. Hàm khởi tạo chấp nhận một mảng các độ sâu có chứa các mức bạn muốn hiển thị các liên kết. Bất kỳ độ sâu nào nằm ngoài mảng đó sẽ được hiển thị dưới dạng văn bản thuần túy. Lưu ý rằng mã else được lấy từ Walker_Category::start_el, vì vậy điều này có thể bị phá vỡ trong các bản phát hành trong tương lai, nếu lớp cơ sở đã từng được sửa đổi.

Lớp trên có thể được sử dụng bằng cách gọi wp_list_categories như:

<?php 
    $args = array(
     'orderby' => 'menu_order', 
     'title_li' => 0, 
     'hide_empty' => 0, 
     'walker' => new Depth_Category_Walker(2) 
    ); 
?> 
<ul> 
    <?php wp_list_categories($args); ?> 
</ul> 
Các vấn đề liên quan