因为这已经有2年多的历史了,我想,至少我希望,到目前为止,更新已经推出,要么没有问题,要么导致了一系列的故障,然后必须修复。对于任何阅读本文的人来说,我认为它很好地指出了马克·卡普伦在对公认答案的评论中逃避了什么。WordPress的插件数量多得离谱,事实上,即使在非常流行的插件中,开发人员或整个开发团队都会以错误的方式做一些事情。这就是为什么更新经常破坏网站。如果你在听,请停下,哈哈。
在这种情况下,正如评论中所揭示的,开发人员有一个插件,可以直接从主题中调用函数,这可能不是一个他可以控制并可以推送更新的唯一主题,因此陷入了困境。对于这个问题,有一个非常明显且简单的解决方案,可以很好地解决它,并且避免了所有未来版本的中断,无论主题中的函数是否曾经更新过。更不用说,告诉用户他们必须在调用函数的主题中检查所有代码并立即更改,这也是一种非常糟糕的做法,因为您无法正确处理函数更新。发布通知警告用户对所有函数调用的“必需”更改,是解决此问题的完全错误的方法,但是开发人员看不到这一点。他只知道他想如何解决这个问题,所以他只问了对他来说很重要的问题,而且这个问题也是错误的。
假设代码是这样的:
// Plugin functions
...
// version 0.3
public function get_module($id, $name){
// code that only handles $id and $name parameters
}
// version 0.4
public function get_module($module){
// code that only handles $module as an object
}
// Theme code
$modulator = new Plugin_Class();
$module = $modulator->get_module(21, \'My Module\');
真正的问题与要向用户显示的通知或警告无关。一旦版本0.4推出,想必每个使用过该插件的人都会看到网站出现了完全可以避免的致命错误,因为插件代码现在需要一个对象,并且他们正在传递一个id和一个名称,可能在代码中的很多地方,他们现在必须跟踪和处理,因为开发人员没有正确处理它。真正的解决方案应该是这样的:
// Plugin functions
...
// version 0.4
public function get_module_by_id($id){
//code to retrieve and return the module object by its ID
return $module
}
public function get_module($module){
if(!is_object($module)){
$module = $this->get_module_by_id($module);
}
// now you have your module object that you need, the rest of the code should be exactly as it would have for version 0.4
}
// Theme code
$modulator = new Plugin_Class();
$module = $modulator->get_module(21, \'My Module\');
// Still works in every future version of the plugin, until you decide to break it another way with an update of course.
正如我之前所说,向用户发出通知/警告是有时间和地点的,但这不是其中之一。在编写代码之前,请三思而后行,即使用户不知道他们会这么做,他们也会很感激的。;-)