“Enable Media Replace”插件不更新WPMeta中的序列化对象

时间:2019-11-13 作者:Chet at C2IT

我们使用WooCommerce和一个名为Product Documents的WooCommerce插件(https://woocommerce.com/products/product-documents/) 将PDF媒体文件与在线商店中的产品关联。

然后,我们的客户端使用名为Enable Media Replace的插件(https://wordpress.org/plugins/enable-media-replace/) 在发布新版本的PDF时交换媒体文件。我们希望所有的产品文档链接也得到更新。

如果我们允许插件重命名新的文件以匹配旧的文件名,那么这很好。但是,如果我们要求插件更改旧链接以匹配新文件名,那么它只在产品内容本身中起作用,而不在产品文档的链接中起作用。事实上,它完全清除了产品文档链接数据。

我们花了一些时间才找出罪魁祸首,但我们终于找到了,我不知道该向何处寻求帮助,也不知道如何在自己身上编写代码。

产品文档插件允许我们将任意数量的文档链接到WooCommerce插件,并将信息与文档(如本文后面的示例)一起存储在元记录中。该插件使用WP标准序列化方法将文档数据序列化为以下内容(单个文档):

{s:5:"label";s:19:"WAW-2322 Spec Sheet";s:13:"file_location";s:75:"https://dc2willoughbyc.wpengine.com/wp-content/uploads/2018/01/WAW-2322.pdf";}
“启用媒体替换”插件,当我们要求它将一个媒体文件替换为另一个媒体文件(使用不同的名称)时,确实会更改文件名(在上面的示例中,从WAW-2322.pdf改为ABCD.pdf就是一个例子)。但是,它不会更新表示后续字符串长度的序列化对象的“s:75”部分。由于文件的长度已更改(减少了4个字符),WP无法再将字符串反序列化为对象,我们的数据是list。

我们的要求是“启用媒体替换”考虑WPMeta字段中的对象序列化,不仅更新文件名,还更新序列化对象中的字符串长度。其他搜索/替换插件(如“更好的搜索和替换”https://wordpress.org/plugins/search-and-replace/) 适当注意这个替换,但“启用媒体替换”的UI对我们的客户来说更好用(而且危险性也小得多!)

我们将非常感谢您对此问题的反馈和帮助。

下面是完整的示例数据。插件将替换文件名,但不会相应地更改文件名的字符串长度。

a:1:{i:0;a:3:{s:4:"name";s:0:"";s:7:"default";b:1;s:9:"documents";a:7:{i:0;a:2:{s:5:"label";s:19:"WAW-2322 Spec Sheet";s:13:"file_location";s:75:"https://dc2willoughbyc.wpengine.com/wp-content/uploads/2018/01/WAW-2322.pdf";}i:1;a:2:{s:5:"label";s:32:"WORD formatted CSI specification";s:13:"file_location";s:99:"https://dc2willoughbyc.wpengine.com/wp-content/uploads/2017/09/224233_Willoughby_Washfountains.docx";}i:2;a:2:{s:5:"label";s:16:"AutoCAD DWG file";s:13:"file_location";s:75:"https://dc2willoughbyc.wpengine.com/wp-content/uploads/2017/09/Aquasurf.dwg";}i:3;a:2:{s:5:"label";s:16:"DXF drawing file";s:13:"file_location";s:83:"https://dc2willoughbyc.wpengine.com/wp-content/uploads/2018/01/DWG_DXF/Aquasurf.dxf";}i:4;a:2:{s:5:"label";s:37:"Install and maintenance documentation";s:13:"file_location";s:86:"https://dc2willoughbyc.wpengine.com/wp-content/uploads/2018/01/WAW-2322-Series-IOM.pdf";}i:5;a:2:{s:5:"label";s:22:"AquaSurf® color chart";s:13:"file_location";s:88:"https://dc2willoughbyc.wpengine.com/wp-content/uploads/2017/05/Aqua-Surf-Color-Table.pdf";}i:6;a:2:{s:5:"label";s:11:"REVIT files";s:13:"file_location";s:114:"https://dc2willoughbyc.wpengine.com/wp-content/uploads/2018/01/AquaWave-Lavatory-2_Station-Willoughby-WAW-2322.rfa";}}}}

1 个回复
最合适的回答,由SO网友:Chet at C2IT 整理而成

插件创建者知道这个问题,正在努力解决。。。

详情如下:https://wordpress.org/support/topic/replacing-media-paths-in-serialized-wpmeta-data/#post-12146774

相关推荐

Testing Plugins for Multisite

我最近发布了一个WordPress插件,它在单个站点上非常有效。我被告知该插件在多站点安装上不能正常工作,我理解其中的一些原因。我已经更新了代码,现在需要一种方法来测试更新后的代码,然后才能转到实时客户的多站点安装。我有一个用于测试的WordPress安装程序的单站点安装,但需要在多站点安装上进行测试。根据我所能找到的唯一方法是在网络上至少有两个站点来安装整个多站点安装,以测试我的插件。设置WordPress的整个多站点安装是插件开发人员的唯一/首选方式,还是有更快的测试环境可用。