为何在WordPress中使用update_post_meta()存储自定义文章元数据后,get_post_meta()返回false?
Hi 兄弟,我看了你的代码和遇到的问题,这种情况我做WP开发时也碰到过,咱们一步步来排查解决:
先确认$bID的类型是否正确:虽然你用
get_posts查到了对应的商家文章,但REST请求传过来的bID参数可能是字符串类型(比如"123"),而update_post_meta和get_post_meta更稳妥的是接收整数ID。你可以先把参数转成整数试试:$bID = (int)$request->get_param('bID');检查自定义文章类型的字段支持:你注册
business这个自定义文章类型的时候,有没有在supports参数里加上custom-fields?如果没加这一项,WordPress可能会限制对该类型文章的元数据读写操作。修改注册代码,确保supports数组包含custom-fields:register_post_type('business', array( // 其他配置... 'supports' => array('title', 'editor', 'custom-fields'), // 加上custom-fields ));排查权限问题:REST API端点的权限回调是不是设置正确了?默认情况下,编辑文章元数据需要
edit_post权限。你可以临时在更新元数据前加个权限检查,看看是不是权限不够:if (!current_user_can('edit_post', $bID)) { error_log('没有编辑该文章元数据的权限'); return wp_send_json(array( 'message' => 'error', 'data' => array('code' => 403, 'message' => '权限不足'), )); }如果确实是权限问题,要么调整端点的权限要求,要么确保请求是用有权限的用户(比如管理员)发起的。
手动清除元数据缓存:有时候WordPress的元数据缓存会"滞后",刚更新的数据没同步到缓存里。你可以在所有
update_post_meta操作之后,手动清除对应文章的元缓存:// ...所有update_post_meta代码之后 wp_cache_delete($bID, 'post_meta');之后再调用
get_post_meta应该就能拿到最新值了。统一元键的大小写:虽然MySQL默认不区分大小写,但某些服务器配置下
meta_key是大小写敏感的。你代码里用了whatsApp这种驼峰命名,建议统一改成小写(比如whatsapp),避免潜在的大小写匹配问题。直接验证数据库记录:如果上面的方法都没用,你可以登录phpMyAdmin查看
wp_postmeta表,搜索post_id等于$bID的记录,看看这些元键有没有被正确插入。如果数据库里没有这些记录,说明update_post_meta根本没执行成功,这时候可以打印它的返回值排查:$phoneResult = update_post_meta($bID, 'phone', $phone); error_log('手机号更新结果:' . var_export($phoneResult, true));如果返回
false,那大概率是权限或者文章ID的问题。
备注:内容来源于stack exchange,提问作者itai

