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

如何修改WordPress菜单保存逻辑,避免空白标题菜单项被删除?

解决WordPress删除空标题菜单项的问题

我之前做项目时刚好碰到过一模一样的需求,WordPress默认的菜单保存逻辑确实会过滤掉标题为空的菜单项,但咱们可以通过两个钩子组合来完美解决这个问题:

1. 保存菜单时给空标题加占位符

WordPress在保存菜单项时会检查title字段是否为空,为空就直接丢弃。我们可以用wp_save_nav_menu_items钩子,在保存前把空标题替换成一个不可见的零宽空格,让WordPress误以为标题有内容:

add_filter('wp_save_nav_menu_items', 'preserve_empty_title_menu_items', 10, 3);
function preserve_empty_title_menu_items($menu_id, $menu_item_db_id, $menu_item_data) {
    // 检测菜单项标题是否为空(去除首尾空白后判断)
    if (empty(trim($menu_item_data['title']))) {
        // 用零宽空格作为占位符(前端不会显示)
        $menu_item_data['title'] = "\u{200B}";
    }
    return $menu_item_data;
}

2. 读取菜单时还原空标题

保存后,我们需要在前端读取菜单项时把占位符还原为空字符串,这样用户看到的就只有图标了。这里用wp_get_nav_menu_items钩子处理:

add_filter('wp_get_nav_menu_items', 'restore_empty_title_menu_items', 10, 3);
function restore_empty_title_menu_items($items, $menu, $args) {
    foreach ($items as $item) {
        // 把占位符换回空字符串
        if ($item->title === "\u{200B}") {
            $item->title = '';
        }
    }
    return $items;
}

为什么用零宽空格?

零宽空格(\u{200B})是一个不会在页面上显示的特殊字符,既骗过了WordPress的空值检测,又不会影响前端的显示效果,比用空格或者其他可见字符更优雅。

和你的ACF图标字段兼容吗?

完全兼容!你原来用来读取Font Awesome图标的代码不需要任何修改。比如你之前可能是这样在菜单Walker里输出图标的:

// 读取ACF的图标字段
$menu_icon = get_field('menu_icon', $item);
if ($menu_icon) {
    echo '<i class="fa ' . esc_attr($menu_icon) . '"></i>';
}
// 输出标题(空的话就不显示)
echo esc_html($item->title);

这样处理后,空标题的菜单项就只会显示你设置的Font Awesome图标,不会被WordPress删除啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:28:19