【问题标题】:Why does update_post_meta change the value of my meta key?为什么 update_post_meta 会改变我的元键值?
【发布时间】:2021-12-27 17:50:12
【问题描述】:

当我使用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);

【问题讨论】:

    标签: wordpress plugins themes easy-digital-downloads


    【解决方案1】:

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

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

    我不知道您为什么要为 $edd_files 分配一个序列化字符串,但您可以使用 maybe_unserialize() 函数将其转换回数组,然后将其保存为 post 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);
    

    结果:

    【讨论】:

    • 谢谢你的回答很好。我的问题解决了。
    猜你喜欢
    • 1970-01-01
    • 2022-07-04
    • 1970-01-01
    • 2018-07-28
    • 1970-01-01
    • 1970-01-01
    • 2019-01-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多