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

调用wp_get_nav_menu_items时WP_Post对象转字符串报错问题

解决“Object of class WP_Post could not be converted to string”错误

嘿,这个问题我之前也踩过坑!你之所以会触发这个报错,核心原因是$menuItems是WP_Post类的实例对象,而不是字符串或普通数组。当你直接用echo $menuItems时,PHP会尝试把对象强制转换成字符串输出,但WP_Post类并没有定义这种转换规则,所以就抛出了这个错误。

正确的处理方式:将WP_Post对象转为JSON格式

JS天然能识别JSON数据,所以我们可以借助WordPress自带的wp_json_encode()函数,把整个菜单对象数组转换成合法的JSON字符串,再传递给JS使用:

<?php
$menu = wp_get_nav_menu_items(3);
// 先判断菜单是否存在,避免空值导致JS语法错误
if ($menu) {
?>
<script>
    // 直接将JSON字符串解析为JS对象数组
    const navMenuItems = <?php echo wp_json_encode($menu); ?>;
    console.log('导航菜单完整数据:', navMenuItems);
    
    // 如果需要逐个输出菜单项,也可以遍历数组
    navMenuItems.forEach(item => {
        console.log('单个菜单项:', item);
    });
</script>
<?php
}
?>

为什么这种方法可行?

  • wp_json_encode()会自动处理WP_Post对象的所有可访问属性,把它转换成JS能识别的键值对结构,同时还会自动处理转义字符,避免出现JS语法错误。
  • 不需要循环输出多个<script>标签,一次性传递整个数组既高效又便于维护。

如果你只需要菜单项的特定属性(比如标题、链接),还可以先在PHP里提取需要的字段,再转为JSON,减少前端接收的数据量:

<?php
$menu = wp_get_nav_menu_items(3);
if ($menu) {
    $simplifiedItems = array_map(function($item) {
        return [
            'title' => $item->title,
            'url' => $item->url,
            'id' => $item->ID
        ];
    }, $menu);
?>
<script>
    const simpleMenuItems = <?php echo wp_json_encode($simplifiedItems); ?>;
    console.log('简化后的菜单项:', simpleMenuItems);
</script>
<?php
}
?>

这样就能完美解决你的console.log报错问题啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:07:20