You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Walker_Nav_Menu中检测菜单项的browse all类

解决WordPress自定义菜单中为指定父项子菜单添加按钮的问题

要实现仅为带有browse all类的父菜单项的子菜单包裹容器添加按钮,需要在Walker_Nav_Menu中跟踪当前父菜单项的类,并在生成子菜单结尾时判断是否插入按钮。具体修改如下:

class My_Walker extends Walker_Nav_Menu {
    // 新增属性存储当前父项是否包含目标类
    private $current_parent_has_browse_all = false;

    function start_el(&$output, $item, $depth = 0, $args = array(), $id = 0) {
        // 执行父类默认逻辑,保证菜单基础结构正常生成
        parent::start_el($output, $item, $depth, $args, $id);

        // 仅处理一级菜单且该菜单项有子菜单的情况
        if ($depth === 0 && $args->has_children) {
            // 检查当前菜单项的类是否包含"browse all"
            $this->current_parent_has_browse_all = in_array('browse all', $item->classes);
        }
    }

    function start_lvl(&$output, $depth = 0, $args = array()) {
        $indent = str_repeat("\t", $depth);
        if ($depth == 0) {
            $output .= "\n$indent<div class='sub-menu__depth-1'><ul class='sub-menu sub-menu__main'>\n";
        } else {
            $output .= "\n$indent<ul class='sub-menu'>\n";
        }
    }

    function end_lvl(&$output, $depth = 0, $args = array()) {
        $indent = str_repeat("\t", $depth);
        if ($depth == 0) {
            $output .= "$indent</ul>";
            
            // 如果当前父项包含目标类,插入按钮
            if ($this->current_parent_has_browse_all) {
                $output .= "\n$indent\t<a href='#' class='browse-all-btn'>Browse All</a>";
                // 重置标记,避免影响下一个菜单项
                $this->current_parent_has_browse_all = false;
            }
            
            $output .= "\n$indent</div>\n";
        } else {
            $output .= "$indent</ul>\n";
        }
    }
}

关键逻辑说明

  • 新增$current_parent_has_browse_all属性,临时存储当前要生成子菜单的父项是否携带browse all类
  • 在start_el方法中,检测一级菜单且带有子菜单的项,判断其类列表是否包含目标类并更新标记
  • 在end_lvl处理一级子菜单结尾时,根据标记决定是否插入按钮,插入后重置标记避免干扰后续菜单

内容的提问来源于stack exchange,提问作者yanksi_

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 01:13:59