当我尝试执行此代码时
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";}' );
添加":"在字符串的末尾,它有效...
但我不需要这个":" 这是一个功能错误吗?或者有什么理由吗?或者某种方式解决这个问题?
答案 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()将反序列化序列化字符串并返回原始字符串。