update_post_meta 中的错误?换弦
Bug in update_post_meta? String changing
当我尝试执行这段代码时
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";}' );
在字符串末尾添加一个“:”,有效...
但我不需要这个“:”
这是一个功能错误吗?或者有什么理由吗?或者解决这个问题的方法?
这不是错误。 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() 将反序列化序列化字符串和 return 原始字符串。
当我尝试执行这段代码时
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";}' );
在字符串末尾添加一个“:”,有效...
但我不需要这个“:” 这是一个功能错误吗?或者有什么理由吗?或者解决这个问题的方法?
这不是错误。 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() 将反序列化序列化字符串和 return 原始字符串。