【发布时间】:2011-03-28 01:48:02
【问题描述】:
在将博客从 Blogger 转换为 WP 并运行脚本以获取热链接图像以进行托管的过程中,我最终得到了一些时髦的图像名称,例如
act%252Bapandas-210x290.png
这些图像名称会阻止图像显示在网页上,因为 url 编码以文件名本身结尾(不要问!)。我在文件服务器上重命名了它们,没有问题,但名称也在每个帖子的附件元数据中。
如何从wp_postmeta 表中的所有图像引用中删除“%”?它们中的大多数出现在meta_values 中的序列化数组中,用于meta_keys 的_wp_attachment_metadata。我没有找到一个插件,并且不确定如何建立一个纯 SQL 解决方案。
编辑:
正如评论员所说,问题是更改或删除“%”字符并更新数组以报告正确的字符数(即 s:13 表示 yoursite.com is 13 char[]) 我也愿意使用 php 解决方案!有什么能帮我解决这个烂摊子。
后记和解决方案
我并没有真正根据 WordPress 问题来构建这个问题,而是将其构建为 SQL 问题。我相应地给予了我的答案。但我能够在本地解决问题(在Rarst@的帮助下。这是我解决问题的方法,在循环中使用原生 WordPress 函数:
$posts = get_posts(array(
'post_type' => 'attachment',
'numberposts' => -1, ));
foreach( $posts as $post ) {
// retrieve data, unserialized automatically
$meta = get_post_meta($post->ID,'_wp_attachment_metadata', true);
// loop through array to do any search and replaces
// write it back
update_post_meta($post->ID, '_wp_attachment_metadata', $meta); }
这些函数将自动确定您正在检索或写入的数据类型,并在必要时对其进行(取消)序列化。这是通过内部使用 maybe_serialize() 和 maybe_unserialize() 函数来处理的。
【问题讨论】:
-
请参阅@zerkms 的 cmets 了解更改序列化数组数据的陷阱。
-
这就是为什么不建议将数据存储在序列化数组中的原因。
标签: php mysql regex wordpress serialization