一位同事使用wp-cli来处理用于wordpress数据迁移/更改的脚本。一次操作我们遇到了一个奇怪的问题。以下是执行命令的示例:
wp post meta add '2677' "_wp_attachment_metadata" 'a:5:{s:5:"width";i:0;s:6:"height";i:0;s:4:"file";s:35:"Uttar-Pradesh_Agra_View-at-Agra.jpg";s:5:"sizes";a:1:{s:9:"thumbnail";a:4:{s:4:"file";s:47:"/uploads150/Uttar-Pradesh_Agra_View-at-Agra.jpg";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:10:{s:8:"aperture";i:0;s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";i:0;s:9:"copyright";s:0:"";s:12:"focal_length";i:0;s:3:"iso";i:0;s:13:"shutter_speed";i:0;s:5:"title";s:0:"";}}'
它将数据插入到数据库中,但它附加了一个字符串,例如' s:484:'在价值之前" a:1:{s:9:"缩略图&#34 ;; a:4 ...."
ie:s:484:" a:1:{s:9:" thumbnail&#34 ;; a:4 ....}"
似乎像字符串长度。它不应该添加。有什么可以做的?我错过了一个带有命令的标志/开关吗?
注意:有人请将wp-cli添加到标记列表中。
答案 0 :(得分:0)
看起来您正在序列化已经序列化的字符串。
$a = array('a','b');
//array(2) {
// [0]=>
// string(1) "a"
// [1]=>
// string(1) "b"
//}
$b = serialize($a);
//string(30) a:2:{i:0;s:1:"a";i:1;s:1:"b";}
$c = serialize($b);
//string(38) s:30:"a:2:{i:0;s:1:"a";i:1;s:1:"b";}";
这正是你的输出。
或者,反过来说:你正在为wp-cli提供一个序列化对象,它会再次序列化它。解决方案是将数组直接提供给wp-cli,而不是之前通过serialize()
运行它。
答案 1 :(得分:0)
当我尝试使用函数更新post meta时,我遇到了同样的问题" update_post_meta"。在实际字符串之前和之后附加了一个额外的字符串。
简单的解决方案是传递数组而不是序列化数据。