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

为何get_post_meta无法返回JSON?技术求助

解决get_post_meta无法返回正确JSON格式数据的问题

嘿,我来帮你排查下这个问题——这种情况我在项目里也碰到过几次,大概率是以下几个原因导致的,咱们一步步来解决:

可能的原因

  • 自定义字段包含<script>标签:你存储的字段值是带完整<script>标签的代码,而get_post_meta返回的是原始存储内容,这时候你拿到的不是纯JSON字符串,而是包含HTML标签的文本,自然没法直接当作JSON来使用。
  • JSON结构不完整/存在转义问题:你问题里的字段值末尾有...,这会导致JSON不完整;另外如果存储时引号被意外转义(比如变成\"),也会让JSON解析失败。
  • get_post_meta参数设置错误:默认情况下get_post_meta的第三个参数是false,会返回数组格式的结果。如果你只存储了单个值,没设这个参数为true的话,拿到的会是包含目标字符串的数组,而非直接的JSON内容。

解决步骤

1. 正确调用get_post_meta

先确保你用对了函数参数,第三个参数设为true来获取单个字符串值:

// 获取指定文章的schema自定义字段
$schema_raw = get_post_meta(get_the_ID(), 'schema', true);

2. 提取纯JSON内容

把字段里的<script>标签去掉,只保留里面的JSON部分:

// 移除开头的script标签及可能的空格
$schema_raw = preg_replace('/^<script type="application\/ld\+json">\s*/', '', $schema_raw);
// 移除结尾的script标签及可能的空格
$schema_raw = preg_replace('/\s*<\/script>$/', '', $schema_raw);
// 清理多余的空白字符
$schema_raw = trim($schema_raw);

3. 验证并解析JSON

用json_decode解析并检查是否有错误:

$schema_data = json_decode($schema_raw, true);

// 检查解析是否成功
if (json_last_error() !== JSON_ERROR_NONE) {
    // 输出错误信息方便排查
    echo 'JSON解析失败: ' . json_last_error_msg();
} else {
    // 这里$schema_data就是可直接使用的关联数组了
    var_dump($schema_data);
}

优化建议

以后存储自定义字段时,直接存储纯JSON字符串,不要带<script>标签。这样获取后无需额外处理标签,能大幅减少出错概率,也更符合数据存储的规范。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:08:53