给文章注册了自定义字段并设置了 show_in_rest,调 wp/v2/posts 返回的 JSON 里就是看不到这个字段,换单篇接口也一样。乍看像缓存或者权限的锅,追下去往往不是。
add_action('init', function () {
register_post_meta('post', 'price', [
'show_in_rest' => true, 'single' => true,
]);
});
追下去是这么回事:注册代码挂在了 init 之后的钩子上,或者 object_subtype 没写对、字段名带下划线前缀,接口就不会自动暴露它。
「register_meta 不生效」相关的验证我通常做两遍,改完一次、隔天再看一次,确认不是临时生效。一次只改一处,改完立刻验证,几个改动叠在一起,出问题就说不清是谁导致的。
先做最小复现,能稳定跑出来的问题,排查成本会低一个数量级。别只看报错的最后一行,往上看几行,真正的起因通常在上面。
同类问题如果隔一段时间又出现,多半是某个定时任务或重启流程把改动冲掉了。
具体做法是,确认注册代码挂在 init 上并且只执行一次;补上 object_subtype 明确指定文章类型;调单篇文章接口看返回的 meta 节点有没有出现。
验收就看一点,单篇文章接口返回的 meta 里出现该字段而且值正确。
