将 navbar-dropdown class 应用到菜单的第一级
Apply the navbar-dropdown class to just the first level of a menu
所以我正在为 WordPress 构建一个 Navwalker,但我卡在了一步上,我似乎无法弄清楚如何让它工作。
所以我有一个带有下拉菜单的菜单,它使用 navbar-dropdown
。
所以我希望 start_lvl
只应用于第一个下拉菜单而不是第二个或第三个级别..我怎样才能将导航栏下拉菜单应用到菜单的第一级下拉菜单?
所以如图所示,我希望第一个级别具有 navbar-dropdown
class(以绿色突出显示),但所有其他 ul 级别都没有 navbar-dropdown
.
图片供参考:
class Navwalker extends Walker_Nav_Menu {
public function start_lvl( &$output, $depth = 0, $args = array() ) {
$indent = str_repeat( "\t", $depth );
$output .= "\n$indent<ul role=\"menu\" class=\"navbar-dropdown\">\n";
}
public function start_el( &$output, $item, $depth = 0, $args = array(), $id = 0 ) {
$custom_classes_from_menu = implode(' ', $item->classes); // turn the WP classes object array to string values
$liClasses = 'navbar-item ' . $custom_classes_from_menu; // add the values to your classes list
// If menu it has children
$hasChildren = $args->walker->has_children;
$liClasses .= $hasChildren ? " has-dropdown is-hoverable": "";
if ($hasChildren) {
$output .= "<li class='" . $liClasses . "'>";
$output .= "\n<a class='navbar-link' href='" . $item->url . "'>" . $item->title . "</a>";
}
else {
$output .= "<a class='" . $liClasses . "' href='" . $item->url . "'>" . $item->title;
}
// Adds has_children class to the item so end_el can determine if the current element has children
if ($hasChildren) {
$item->classes[] = 'has_children';
}
}
public function end_el(&$output, $item, $depth = 0, $args = array(), $id = 0 ){
if(in_array("has_children", $item->classes)) {
$output .= "</li>";
}
$output .= "</a>";
}
public function end_lvl (&$output, $depth = 0, $args = array()) {
$output .= "</ul>";
}
}
请将您的 start_lvl 函数更改为:
public function start_lvl( &$output, $depth = 0, $args = array() ) {
$indent = str_repeat( "\t", $depth );
if($depth == 0)
$output .= "\n$indent<ul role=\"menu\" class=\"navbar-dropdown\">\n";
else
$output .= "\n$indent<ul role=\"menu\">\n";
}
希望对您有所帮助。
所以我正在为 WordPress 构建一个 Navwalker,但我卡在了一步上,我似乎无法弄清楚如何让它工作。
所以我有一个带有下拉菜单的菜单,它使用 navbar-dropdown
。
所以我希望 start_lvl
只应用于第一个下拉菜单而不是第二个或第三个级别..我怎样才能将导航栏下拉菜单应用到菜单的第一级下拉菜单?
所以如图所示,我希望第一个级别具有 navbar-dropdown
class(以绿色突出显示),但所有其他 ul 级别都没有 navbar-dropdown
.
图片供参考:
class Navwalker extends Walker_Nav_Menu {
public function start_lvl( &$output, $depth = 0, $args = array() ) {
$indent = str_repeat( "\t", $depth );
$output .= "\n$indent<ul role=\"menu\" class=\"navbar-dropdown\">\n";
}
public function start_el( &$output, $item, $depth = 0, $args = array(), $id = 0 ) {
$custom_classes_from_menu = implode(' ', $item->classes); // turn the WP classes object array to string values
$liClasses = 'navbar-item ' . $custom_classes_from_menu; // add the values to your classes list
// If menu it has children
$hasChildren = $args->walker->has_children;
$liClasses .= $hasChildren ? " has-dropdown is-hoverable": "";
if ($hasChildren) {
$output .= "<li class='" . $liClasses . "'>";
$output .= "\n<a class='navbar-link' href='" . $item->url . "'>" . $item->title . "</a>";
}
else {
$output .= "<a class='" . $liClasses . "' href='" . $item->url . "'>" . $item->title;
}
// Adds has_children class to the item so end_el can determine if the current element has children
if ($hasChildren) {
$item->classes[] = 'has_children';
}
}
public function end_el(&$output, $item, $depth = 0, $args = array(), $id = 0 ){
if(in_array("has_children", $item->classes)) {
$output .= "</li>";
}
$output .= "</a>";
}
public function end_lvl (&$output, $depth = 0, $args = array()) {
$output .= "</ul>";
}
}
请将您的 start_lvl 函数更改为:
public function start_lvl( &$output, $depth = 0, $args = array() ) {
$indent = str_repeat( "\t", $depth );
if($depth == 0)
$output .= "\n$indent<ul role=\"menu\" class=\"navbar-dropdown\">\n";
else
$output .= "\n$indent<ul role=\"menu\">\n";
}
希望对您有所帮助。