我有一个客户端,它有一个WordPress站点,使用另一个开发人员为其编写的自定义插件。最近,他们运行了WordPress更新程序,其中一个更新删除了该自定义插件,并将其替换为插件库中碰巧具有相同名称的插件。
我正试图弄清楚到底需要改变什么,以避免这种情况在未来再次发生。所讨论的插件在目录/主文件名中没有任何特定的唯一标识符;想象一下是这样的:
foo/foo.php
因此,如果存储库中已经有一个“Foo”插件,那么可以理解为什么WP会混淆两者。
我过去的理解是,避免这种情况的方法是在这些名称中添加唯一标识符,例如:
client-foo/client-foo.php
我认为,添加“client”位是通过使插件特定于运行它的一个WordPress站点来降低冲突几率的方法。
然而,即使在重命名文件之后,我发现更新程序仍然将插件与存储库中的“foo”插件混淆。
接下来,我尝试更改插件元数据标题中的“Name”字段,从
Plugin Name: Foo
至
Plugin Name: Foo (Client)
以及
this 似乎消除了碰撞;更新程序不再将其标记为与公共插件匹配。
所以现在我很困惑。更新程序为避免冲突而检查的唯一内容是插件名称元数据字段,这真的是这样吗?至少对我来说,与我之前认为的方式(比较文件名)相比,这似乎真的很脆弱。
无论如何,我无法找到更新程序用于进行此检查的确切信息,虽然我确实找到了this previously asked question 答案线程从来没有出来说“这就是它的工作原理”所以我想我应该问问。
最合适的回答,由SO网友:gmazzap 整理而成
WordPress在存储库中查找插件的方式不是公共的AFAIK。
根据Otto的回答,您链接了插件url标题和插件名称。
顺便说一句,从要更新的插件列表中删除插件是确保此问题不会再次发生的最佳方法:一旦匹配方法不是公共的,您就无法知道它将来是否会更改。