为什么 update_post_meta 会更改我的元键值?

Why does update_post_meta change the value of my meta key?

当我使用 update_post_meta() 函数更改键的值时:

例如,当我保存这个字符串时:

a:1:{i:1;a:6:{s:5:"index";s:1:"0";s:13:"attachment_id";s:1:"0";s:14:"thumbnail_size";s:0:"";s:4:"name";s:3:"aaa";s:4:"file";s:3:"aaa";s:9:"condition";s:3:"all";}}

它保存在 wp_postmeta table 上为:

s:162;"a:1:{i:1;a:6:{s:5:"index";s:1:"0";s:13:"attachment_id";s:1:"0";s:14:"thumbnail_size";s:0:"";s:4:"name";s:3:"aaa";s:4:"file";s:3:"aaa";s:9:"condition";s:3:"all";}}"

当我使用短字符串时没有问题。如何解决这个问题?

我的代码:

$edd_files='a:1:{i:1;a:6:{s:5:"index";s:1:"0";s:13:"attachment_id";s:1:"0";s:14:"thumbnail_size";s:0:"";s:4:"name";s:3:"aaa";s:4:"file";s:3:"aaa";s:9:"condition";s:3:"all";}}';

update_post_meta($download_id,'edd_download_files',$edd_files);

发生这种情况的原因是因为 update_post_meta() 序列化了您作为第三个参数传递的值(参见 update_metadata())。

您的 $edd_files 变量是一个 serialized 数组 - 不是“JSON 文件”- update_post_meta() 正在再次序列化它 在将其保存到数据库之前,因此您的序列化字符串会发生这样的变化。

我不知道你为什么要分配 $edd_files 序列化字符串,但你可以在将其保存为 post 之前使用 maybe_unserialize() 函数将其转换回数组meta 然后该值将按预期作为序列化字符串保存在数据库中:

$edd_files = 'a:1:{i:1;a:6:{s:5:"index";s:1:"0";s:13:"attachment_id";s:1:"0";s:14:"thumbnail_size";s:0:"";s:4:"name";s:3:"aaa";s:4:"file";s:3:"aaa";s:9:"condition";s:3:"all";}}';

// Convert serialized string back into an array
$edd_files = maybe_unserialize($edd_files);

update_post_meta($download_id, 'edd_download_files', $edd_files);

结果: