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

扩展WordPress REST API展示菜单项slug,解决React前端菜单链接问题

我之前做过React+WordPress的项目,刚好碰到过这个问题,给你分享下具体的解决步骤:

扩展WordPress REST API返回菜单项的Slug字段

1. 在WordPress主题中添加API扩展代码

你需要在WordPress当前启用主题的functions.php文件中加入以下代码,它会通过过滤器拦截菜单的REST响应,把对应内容的slug追加到返回数据里:

// 为REST API返回的菜单项添加slug字段
function add_menu_item_slug_to_rest_response( $response, $menu_item, $request ) {
    // 仅处理关联了页面/文章的菜单项
    if ( ! empty( $menu_item->object_id ) && ! empty( $menu_item->object ) ) {
        $target_post = get_post( $menu_item->object_id );
        if ( $target_post ) {
            // 将slug添加到响应数据中
            $response->data['slug'] = $target_post->post_name;
        }
    }
    return $response;
}
add_filter( 'rest_prepare_nav_menu_item', 'add_menu_item_slug_to_rest_response', 10, 3 );

这段代码的核心是利用rest_prepare_nav_menu_item这个过滤器,在菜单项返回给前端前,通过get_post()获取对应内容的详情,然后把slug(也就是post_name)添加到响应数据里。

2. 在React中利用slug构建正确链接

当你通过WP REST API拉取到菜单数据后,就可以直接用返回的slug字段来生成前端路由链接了。举个简单的示例:

// 假设menuItems是从API接口获取的菜单数组
const NavigationMenu = ({ menuItems }) => {
  return (
    <nav className="site-nav">
      <ul>
        {menuItems.map(item => (
          <li key={item.id}>
            {/* 根据你的React路由规则构建链接,这里示例是/[slug] */}
            <a href={`/${item.slug}`}>{item.title.rendered}</a>
          </li>
        ))}
      </ul>
    </nav>
  );
};

额外提示

  • 如果菜单项是自定义链接(没有关联WP的页面/文章),直接用API返回的url字段即可,不用处理slug;
  • 这段代码对自定义文章类型也同样有效,get_post()会自动识别对应的内容类型并返回正确的slug;
  • 如果你担心主题更新会覆盖functions.php的代码,建议把这段代码放到自定义插件里,这样更安全。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:44:25