问题描述
这个类创建了一个具有不同子级别的菜单:
class Bootstrap_Collapse_NavWalker extends Walker_Nav_Menu{
public function start_lvl( &$output,$depth = 0,$args = null ) {
$output .= "<ul>";
}
public function end_lvl(&$output,$args = []){
$output .= "</ul>";
}
public function start_el(&$output,$item,$args = [],$id = 0){
$itemClasses = empty( $item->classes ) ? array() : (array) $item->classes;
$class_names_li = "";
$class_names_a = "";
$class_names_i = "";
$item_output = "";
$hasChildrenElm = $args->walker->has_children;
if ( $hasChildrenElm ) {
$class_names_li = 'dropdown';
}
if ( $depth === 0 && !$hasChildrenElm ) {
$class_names_a = 'nav-link scrollto';
}
$activeElement = "";
if ( in_array( 'current-menu-item',$itemClasses ) ) $activeElement .'active';
$elementUrl = ! empty( $item->url ) ? esc_url($item->url) : '';
$output .= '<li class="'.$class_names_li.'">';
if ( $hasChildrenElm ) {
$output .= '<a class="'.$class_names_a.$activeElement.'" href="'.$elementUrl.'">
<span>'.$item->title.'</span>';
$class_names_i .= ($depth !== 0) ? "bi bi-chevron-right" : "bi bi-chevron-down";
$output .= '<i class="'.$class_names_i.'"></i>';
}elseif($item->title !== ""){
$output .= '<a class="'.$class_names_a.$activeElement.'" href="'.$elementUrl.'-1">'.$item->title.'</a>';
}
}
public function end_el(&$output,$args = []){
$output .= "</li>";
}
}
我正在等待以下 HTML :
<ul>
<li><a class="nav-link scrollto" href="#menu1">menu 1</a></li>
<li><a class="nav-link scrollto" href="#menu2">menu 2</a></li>
<li class="dropdown">
<a href="#"><span>Drop Down</span> <i class="bi bi-chevron-down"></i></a>
<ul>
<li><a href="#">Drop Down 1</a></li>
<li class="dropdown">
<a href="#"><span>Deep Drop Down</span> <i class="bi bi-chevron-right"></i></a>
<ul>
<li><a href="#">Deep Drop Down 1</a></li>
</ul>
</li>
</ul>
</li>
</ul>
但是它打印了这个 HTML :
<ul>
<li><a class="nav-link scrollto" href="#menu1">menu 1</a></li>
<li><a class="nav-link scrollto" href="#menu2">menu 2</a></li>
<li class="dropdown">
<a href="#dropdownLink"><span>Drop Down</span> <i class="bi bi-chevron-down"></i></a>
<ul>
<a class="" href="#dropdownLink"></a>
<li>
<a class="" href="#dropdownLink"></a>
<a href="#">Drop Down 1</a>
</li>
<li class="dropdown">
<a href="#"><span>Deep Drop Down</span> <i class="bi bi-chevron-right"></i></a>
<ul>
<a class="" href="#dropdownLink"></a>
<li>
<a class="" href="#dropdownLink"></a>
<a href="#">Deep Drop Down 1</a>
</li>
</ul>
</li>
</ul>
</li>
</ul>
正如您在每个菜单级别看到的,脚本再次打印父菜单的锚标记,我无法识别脚本循环何时插入父 TAG 锚,您可以帮我解决这个问题
解决方法
已修复,缺少关闭锚标记正确代码:
class Bootstrap_Collapse_NavWalker extends Walker_Nav_Menu{
public function start_lvl( &$output,$depth = 0,$args = null ) {
$output .= "<ul>";
}
public function end_lvl(&$output,$args = [])
{
$output .= "</ul>";
}
public function start_el(&$output,$item,$args = [],$id = 0){
$itemClasses = empty( $item->classes ) ? array() : (array) $item->classes;
$class_names_li = "";
$class_names_a = "";
$class_names_i = "";
$item_output = "";
$hasChildrenElm = $args->walker->has_children;
if ( $hasChildrenElm ) {
$class_names_li = 'dropdown';
}
if ( $depth === 0 && !$hasChildrenElm ) {
$class_names_a = 'nav-link scrollto';
}
$activeElement = "";
if ( in_array( 'current-menu-item',$itemClasses ) ) $activeElement .'active';
$elementUrl = ! empty( $item->url ) ? esc_url($item->url) : '';
if(!empty($elementUrl)){
$output .= '<li class="'.$class_names_li.'">';
if ( $hasChildrenElm ) {
$output .= '<a class="'.$class_names_a.$activeElement.'" href="'.$elementUrl.'">
<span>'.$item->title.'</span>';
$class_names_i .= ($depth !== 0) ? "bi bi-chevron-right" : "bi bi-chevron-down";
$output .= '<i class="'.$class_names_i.'"></i></a>';
}else{
$output .= '<a class="'.$class_names_a.$activeElement.'11" href="'.$elementUrl.'">'.$item->title.'</a>';
}
}
}
public function end_el(&$output,$args = [])
{
$output .= "</li>";
}
}