我的标题中有以下菜单:
<?php
$args = array(
\'menu\' => \'Main Menu\',
\'container\' => false,
\'depth\' => 1,
\'items_wrap\' => \'%3$s\',
\'walker\' => new Bar_List_Walker_Nav_Menu
);
wp_nav_menu($args);
?>
我想让输出像这样:
link1 | link2 | link3 | link4 | link5
所以我开始做一个walker函数,这里是我要做的:
class Bar_List_Walker_Nav_Menu extends Walker_Nav_Menu {
public $count;
function start_lvl(&$output, $depth) {}
function end_lvl(&$output, $depth) {}
function start_el(&$output, $item, $depth, $args) {
$attributes = ! empty( $item->target ) ? \' target="\' . esc_attr( $item->target ) .\'"\' : \'\';
$attributes .= ! empty( $item->url ) ? \' href="\' . esc_attr( $item->url ) .\'"\' : \'\';
$item_output .= \'<a\'. $attributes .\'>\';
$item_output .= apply_filters( \'the_title\', $item->title, $item->ID );
$item_output .= \'</a>\';
$output .= apply_filters( \'walker_nav_menu_start_el\', $item_output, $item, $depth, $args );
}
function end_el(&$output, $item, $depth) {
static $count;
$count++;
if(!$this->count >= $count) {
$output .= " | ";
}
}
function walk( $elements, $max_depth ) {
$this->count = count($elements);
parent::walk( $elements, $max_depth );
}
}
这将输出以下错误:
Warning: Missing argument 4 for Bar_List_Walker_Nav_Menu::start_el() in C:\\xampp\\DEV\\Stace\\trunk\\wp-content\\themes\\philosophy\\functions.php on line 100
如果我删除该功能
walk()
从我的学步课上看,它工作得很好,只是计数不再被抓住,结果是一个
|
导航末尾添加了太多内容。
任何人都可以使用代码来获得我想要的输出吗?
最合适的回答,由SO网友:Bo Carlson 整理而成
您可以使用项目内的菜单顺序来查看它是否不是第一个。如果没有,则在锚之前绘制角色。
class Bar_List_Walker_Nav_Menu extends Walker_Nav_Menu {
private $separator = " | ";
function start_el(&$output, $item, $depth, $args) {
if($item->menu_order > 1){
$output .= $this->separator;
}
$attributes = ! empty( $item->target ) ? \' target="\' . esc_attr( $item->target ) .\'"\' : \'\';
$attributes .= ! empty( $item->url ) ? \' href="\' . esc_attr( $item->url ) .\'"\' : \'\';
$output .= \'<a\'. $attributes .\'>\';
$output .= apply_filters( \'the_title\', $item->title, $item->ID );
$output .= \'</a>\';
}
}