如何在SQL中更改_wp_Attach_METADATA的特定值?

时间:2016-03-14 作者:Unfu

我不得不调整我上传文件夹中许多现有图像的大小(大约1k)。重新加载后,Wordpress当然无法识别新的维度。我的方法是只更改\\u post\\u元表中的大小。但这看起来像这样:

a:6{s:5:"width";s:3:"330";s:6:"height";s:4:"1067";s:14:"hwstring_small";s:22:"height=\'96\' width=\'29\'";s:4:"file";s:22:"2012/03/2-IMG_1540.png";s:5:"sizes";a:3:{s:9:"thumbnail";a:3:{s:4:"file";s:21:"2-IMG_1540-56x183.png"; ...
我只需要将第一个条目的“宽度”值从“330”更改为其他值。虽然在我看来它就像一本字典,但我没有找到一种在SQL中访问该值的方法。

wp\\u update\\u attachment\\u元数据引用指出,必须提供所有数据,因为现有数据将被擦除。这就是为什么我认为在SQL中这样做会更容易的原因。

4 个回复
最合适的回答,由SO网友:majick 整理而成

您可以通过PHP而不是SQL实现这一点,只需获取现有元数据并更改所需内容,它将为您处理序列化:

$newwidth = \'250\'; // or whatever it is
$attachments = get_posts(array(\'post_type\'=>\'attachment\');
foreach ($attachments as $attachment) {
    $id = $attachment->ID;
    $metadata = wp_get_attachment_metadata($id);
    $metadata[\'width\'] = $newwidth;
    wp_update_attachment_metadata($id,$metadata);
}
但实际上,您可以更好地使用Regenerate Thumbnails Plugin 这可能会修复此问题,并同时重新生成不同的缩略图大小。

SO网友:Rarst

您所看到的是PHPserialized MySQL数据库中以字符串形式保存的数据。SQL根本不知道如何处理它。

关于序列化数据,要记住的最重要的一点是,这不是一件容易编辑的事情。它在格式中嵌入值的长度,如果编辑与长度不匹配,则整个数据都会损坏。

因此,通常操作此类数据的首选方法是使用PHP代码本身。

值得注意的是,有多种解决方案可以重建图像数据(插件、WP-CLI命令),但通常是针对其他大小,而不是原始图像。我不确定他们是否会处理你的案子,但你可以试试。先测试一下,这样不会让事情变得更糟。

SO网友:Hatem Badawi

您需要取消序列化此字符串,然后您将得到一个可以编辑的数组。然后再次序列化此数组。

$attachment_data_array=unserialize(\'a:6{s:5:"width"; ...\');
//change array values as you need 
//for example
$attachment_data_array[\'sizes\'][\'thumbnail\'][\'file\']=\'newlink.jpg\';
//then serialize again
$data=serialize($attachment_data_array);

SO网友:WowPress.host

有一个“修复媒体库”插件可以做到这一点,它更新了\\u wp\\u attachment\\u元数据字段,作为拇指再生的一部分。

https://wordpress.org/plugins/wow-media-library-fix/

相关推荐

Column Images Showing Gaps

我正在使用带有Avada主题的Wordpress。在页面顶部,我有一个fusion滑块。下面我将设置一个包含2列的容器。我为每一列插入了一幅图像。我无法解决如何消除图像左右两侧的间隙(我需要它们转到屏幕边缘)以及融合滑块与下方两幅图像之间的间隙。谢谢