使用wp-cli:wp post meta add在值的开头添加一个额外的字符串

时间:2014-09-16 12:25:50

标签: wordpress metadata

一位同事使用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添加到标记列表中。

2 个答案:

答案 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"。在实际字符串之前和之后附加了一个额外的字符串。

简单的解决方案是传递数组而不是序列化数据。