我正在使用wp_nav_menu()
使用自定义walker
.
<ul>
<li id="menu-item-799" class="menu-item ... custom-theme-class"><a href="#">custom content</a></li>
<li><a href=""></a></li>
<li><a href=""></a></li>
...
</ul>
现在我想更改
li
输出取决于类名。我用的是这样的东西:
function theme_function($item_output, $item, $depth, $args){
$output = \'\';
// Overview Menu
if ( in_array( \'custom-theme-class\', (array) $item->classes ) ) {
$item_output = \'<div class="navbar-item">\'. wp_kses( $item->title, wp_kses_allowed_html( \'post\' ) ) .\'</div>\';
}
return $item_output;
}
add_filter(\'walker_nav_menu_start_el\', \'theme_function\', 10, 4);
这只是改变
<li ...><a href="#">custom content</a></li>
至
<li ..."><div class="navbar-item">custom content</div></li>
而我希望删除
li
还有标签。所以它变成了
<div class="navbar-item">custom content</div> (without the li tags)
在我的自定义菜单中
walker
我使用了以下方法,但不起作用。
function start_el(&$output, $item, $depth = 0, $args = array() , $id = 0) {
...
if ( in_array( \'custom-theme-class\', (array) $item->classes ) ) {
$output .= \'\';
} else {
$output .= $indent . \'<li\' . $id . $value . $class_names . $data_dropdown . \'>\';
}
}
function end_el(&$output, $item, $depth = 0, $args = array()) {
$classes = empty($item->classes) ? array() : (array)$item->classes;
$has_children = in_array(\'menu-item-has-children\', $classes);
if ($has_children && $depth == 0) {
$output.= "</div>\\n";
}
if ( in_array( \'custom-theme-class\', (array) $item->classes ) ) {
$output .= \'\';
} else {
$output.= "</li>\\n";
}
}
The
li
当菜单与一起使用时,标记仍然显示
custom-theme-class
css类。
我错过了什么?非常感谢您的帮助。
最合适的回答,由SO网友:WebElaine 整理而成
登录时是否有错误?如果您运行的是最新版本的WP,这应该会引发一个错误,因为start\\u el和end\\u el是公共函数。
此外,如果您使用的是自定义walker,则应仅使用walker,而不使用附加的theme\\u函数。
class wpseWalker extends Walker_Nav_Menu {
public function start_el(&$output, $item, $depth = 0, $args = array(), $id = 0) {
$classes = empty( $item->classes ) ? array() : (array) $item->classes;
$classes[] = \'menu-item-\' . $item->ID;
if(in_array(\'custom-theme-class\', $classes) {
$output .= \'<div class="navbar-item">\' . $value;
} else {
$output .= $indent . \'<li\' . $id . $value . $class_names . $data_dropdown . \'>\';
}
}
public function end_el( &$output, $item, $depth = 0, $args = array() ) {
$classes = empty( $item->classes ) ? array() : (array) $item->classes;
$classes[] = \'menu-item-\' . $item->ID;
if(in_array(\'custom-theme-class\', $classes) {
$output .= "</div>\\n";
} else {
$output .= "</li>\\n";
}
}
}