我有一个自定义的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_lvl
或end_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);
答案 0 :(得分:2)
看起来start_lvl()
和end_lvl()
总是在循环中被调用,而从不在第一级。这适用于所有WordPress Walkers
,例如Walker_Nav_Menu
,Walker_Page
和Walker_Category
。
目前还不是很清楚,但是当您查看Core Walker code或阅读有关start_lvl()
的{{3}}时,您可以猜到它。
但在Walker documentation的文档中,它只是说它......
在添加元素之前启动列表。
因此,或许应该做的是文档中的更新。