你在说什么
if( !isset( $this->break_point ) )
$this->break_point = ceil( $this->current_menu->count / 2 ) + 1;
这样无法获得顶级项目计数。相反,你应该自己数。您可以使用
wp_get_nav_menu_items(). 每个顶级项都应将menu\\u item\\u parent设置为“0”。
您应该在计算已显示元素的位置创建其他变量。因此,文件顶部应如下所示:
class Split_Menu_Walker extends Walker_Nav_Menu {
public $break_point = null;
public $displayed = 0;
function start_el(&$output, $item, $depth, $args, $id=0) {
global $wp_query;
if( !isset( $this->break_point ) ) {
$menu_elements = wp_get_nav_menu_items( $args->menu );
$top_level_elements = 0;
foreach( $menu_elements as $el ) {
if( $el->menu_item_parent === \'0\' ) {
$top_level_elements++;
}
}
$this->break_point = ceil( $top_level_elements / 2 ) + 1;
}
$indent = ( $depth ) ? str_repeat( "\\t", $depth ) : \'\';
...
...
...
那么你应该增加
$this->displayed++;
每次显示顶级元素时(例如,在start\\u el()函数的末尾):
if( $item->menu_item_parent === \'0\' ) {
$this->displayed++;
}
最后,而不是
if( $this->break_point == $item->menu_order )
您应该使用
if( $this->break_point == $this->displayed )