扩展的Walker_Page不输出自定义的start_lvl()或end_lvl()

时间:2015-12-28 13:01:35

标签: php wordpress

我有一个自定义的Walker_Page类,我已经扩展了这个类:

class List_Nav extends Walker_Page {
  function start_lvl( &$output, $depth = 0, $args = array() ) {
    $indent = str_repeat("\t", $depth);
    $output .= "\n$indent<ul class='ListNav'>\n";
  }

  function start_el(&$output, $page, $depth = 0, $args = array(), $current_page = 0) {
    $output .= '<li class="ListNav-item">';
    $output .= '<a class="ListNav-link" href="' . get_permalink($page->ID) . '">' . apply_filters( 'the_title', $page->post_title, $page->ID ) . '</a>';
    $output .= '</li>';
  }

  function end_lvl( &$output, $depth = 0, $args = array() ) {
    $indent = str_repeat("\t", $depth);
    $output .= "\n$indent</ul>\n";
  }
}

但我没有从start_lvlend_lvl函数获得任何输出。我在这里缺少什么或者我需要回来吗?我从<li>获得start_el()输出。

使用时更新

以下是我使用助行器的方法:

if ($post->post_parent) {
  $ancestors=get_post_ancestors($post->ID);
  $root = count($ancestors) - 1;
  $top_parent = $ancestors[$root];
} else {
  $top_parent = $post->ID;
}

$page_list_args = array(
  'child_of'     => $top_parent,
  'depth'        => 0,
  'title_li'     => false,
  'walker'       => new List_Nav
);

wp_list_pages($page_list_args);

1 个答案:

答案 0 :(得分:2)

看起来start_lvl()end_lvl()总是在循环中被调用,而从不在第一级。这适用于所有WordPress Walkers,例如Walker_Nav_MenuWalker_PageWalker_Category

目前还不是很清楚,但是当您查看Core Walker code或阅读有关start_lvl()的{​​{3}}时,您可以猜到它。

但在Walker documentation的文档中,它只是说它......

  

在添加元素之前启动列表。

因此,或许应该做的是文档中的更新。