0

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

  • 当它是一个正常的字符串时,它可以工作
  • 但是当字符串与 JSON 文件相同时,它会附加一些额外的字符串。

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

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表中保存为:

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);
4

1 回答 1

1

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

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

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

$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);

结果:

wp_postmeta 上的序列化字符串

于 2021-11-16T18:29:15.697 回答