PHP:Wordpress存储序列化数组时如何移除外层字符串计数
问题原因
WordPress 内置的 update_post_meta() 方法默认会对传入的数组、对象类型数据自动执行序列化操作,你提前手动调用 serialize() 处理数组后,传给函数的是序列化后的字符串,函数会对这个字符串再次序列化,就出现了你看到的外层多了 s:xxx:"..." 的结构。
解决方法
新数据存储正确写法
直接把未序列化的原始数组传入 update_post_meta() 即可,不需要手动做序列化处理:
// $your_json_array 是你原本要序列化的原始PHP数组 update_post_meta($post_id, '你的自定义字段键名', $your_json_array);
对应的读取数据时直接调用 get_post_meta() 即可拿到原始数组,不需要手动反序列化:
$your_array = get_post_meta($post_id, '你的自定义字段键名', true);
已存储错误数据的修复
如果已经有大量数据按错误方式存入库中,可以通过两次反序列化拿到正确内容:
// 先取出被二次序列化的内容 $wrong_data = get_post_meta($post_id, '你的自定义字段键名', true); // 第一次反序列化拿到你最初手动序列化的字符串,第二次反序列化拿到原始数组 $correct_array = unserialize(unserialize($wrong_data)); // 也可以重新按正确方式存回数据库 update_post_meta($post_id, '你的自定义字段键名', $correct_array);
内容的提问来源于stack exchange,提问作者Eric Brockman
相关产品推荐
相关产品推荐

