update_post_meta中的错误?字符串更改

时间:2017-10-03 23:19:19

标签: php wordpress function post-meta

当我尝试执行此代码时

update_post_meta( $id, "_woocommerce_my_meta", 'a:1:{s:4:"gtin";s:13:"10";}' );

元正在变为

s:27:"a:1:{s:4:"gtin";s:13:"10";}";

只需将代码更改为

即可
update_post_meta( $id, "_woocommerce_my_meta", ':a:1:{s:4:"gtin";s:13:"10";}' );

添加":"在字符串的末尾,它有效...

但我不需要这个":" 这是一个功能错误吗?或者有什么理由吗?或者某种方式解决这个问题?

1 个答案:

答案 0 :(得分:1)

这不是一个错误。 WordPress有理由这样做。因为,WordPress自动序列化对象和数组,它必须区分作为序列化的数据库meta_value和实际上只是看起来像序列化的字符串的meta_value。要理解这一说明,update_post_meta()调用maybe_serialize()

function maybe_serialize( $data ) {
  if ( is_array( $data ) || is_object( $data ) )
    return serialize( $data );

  // Double serialization is required for backward compatibility.
  // See https://core.trac.wordpress.org/ticket/12930
  // Also the world will end. See WP 3.6.1.
  if ( is_serialized( $data, false ) )
    return serialize( $data );

  return $data;
}

请注意,如果元值是序列化字符串,则会再次序列化。

update_post_meta()和get_post_meta()自动处理对象和数组的序列化和反序列化。您确定需要在调用update_post_meta()时使用序列化值吗?请注意,get_post_meta()将反序列化序列化字符串并返回原始字符串。