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

如何在WordPress自定义Nav Walker的end_lvl函数中获取当前分类名称?

在WordPress自定义Nav Walker的end_lvl中动态获取当前分类名称

要解决end_lvl函数里固定分类的问题,核心是在菜单遍历过程中存储当前菜单项对应的产品分类信息,在end_lvl触发时调用。具体实现步骤如下:

1. 在自定义Nav Walker类中添加分类存储属性

在你的自定义Nav Walker类里,新增一个私有属性用来临时保存当前产品分类的slug:

class Your_Custom_Nav_Walker extends Walker_Nav_Menu {
    // 新增属性,临时存储当前产品分类的slug
    private $current_cat_slug = '';

    // ... 保留你已有的其他方法(如start_lvl、start_el等)
}

2. 在start_el方法中捕获当前产品分类信息

修改start_el方法,当遍历到WooCommerce产品分类菜单项时,提取其分类slug并保存到上述属性中:

function start_el(&$output, $item, $depth = 0, $args = null, $id = 0) {
    // 保留你原本的start_el业务代码...

    // 判断当前菜单项是否为产品分类
    if ($item->object === 'product_cat') {
        $term = get_term($item->object_id, 'product_cat');
        $this->current_cat_slug = $term->slug;
    } else {
        // 非产品分类菜单,清空存储的slug
        $this->current_cat_slug = '';
    }

    // 保留你原本的start_el剩余代码...
}

3. 修改end_lvl方法,动态使用当前分类slug

替换原end_lvl中的固定分类参数,改为使用存储的分类slug,同时增加判断避免非分类菜单执行无效查询:

function end_lvl(&$output, $depth=0, $args=null) {
    $indent = str_repeat( "\t", $depth );
    
    $divder_div_start = "<div class=\"megamenu-divder\">";
    $divder_div_end = "</div>";

    $topseller_img_tags = '';

    // 仅当存在有效分类slug时执行产品查询
    if (!empty($this->current_cat_slug)) {
        $query = new WC_Product_Query( array(
            'limit' => 4,
            'orderby' => 'date',
            'order' => 'DESC',
            'return' => 'ids',
            'category' => array( $this->current_cat_slug ),
        ) );

        $products = $query->get_products();
        foreach($products as $p_id){
            $image = wp_get_attachment_image_src( get_post_thumbnail_id( $p_id ));
            // 增加图片存在性判断,避免无图时出现PHP警告
            if ($image) {
                $topseller_img_tags .= "\n<div><img src='$image[0]' width='150' height='150' /></div>";
            }
        }
    }

    $topseller_div_start = "<div class=\"top-seller-megamenu\">";
    $topseller_div_end = "</div>";

    if($depth > 0)
    {
        $output .= "$indent</ul>\n$indent\n$divder_div_start\n$divder_div_end\n$topseller_div_start\n$topseller_img_tags\n$topseller_div_end\n</section>\n";
    }
    else
    {
        $output .= "</ul>";
    }
}

额外说明

  • 确保你的自定义Nav Walker类正确继承Walker_Nav_Menu,并且在注册菜单时指定使用该Walker。
  • 新增的图片存在性判断可以避免产品无特色图片时产生PHP警告。
  • 非产品分类菜单会自动跳过产品查询逻辑,减少无效数据库请求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 02:20:39