it-swarm.cn

插入插件

我正在开发一个插件,当用户通过 different 插件执行某些操作时,理想情况下可以执行此操作。

我可以在这些插件中添加自定义钩子,但显然这对我想要分发我的插件时效果不佳。有没有一种方法可以从我自己的插件中添加钩子到其他人的插件?是唯一真正的解决方案,要求作者包含自定义钩子,以便其他开发人员可以建立他们的工作?

示例:当有人转发文章时,我想在我的插件中执行某些操作。如果有一个自定义钩子,无论流行的转推插件是什么,我可以挂钩和发射,这将是伟大的。没有,所以我可以修改他们的插件来包含它,但这只适用于我的副本,我不想尝试重新分发它。

我们是否只需要尝试成为更好的插件开发人员,以便我们可以一起玩好的?

12
Ryan Elkins

@Ryan Elkins:

我想答案取决于每个用例的导入方式。在某些情况下,这将是您需要快速和肮脏的东西,而在其他情况下,它可能是一个更重要的用例。以下是我想到的两件事:

在WordPress Core中查找备用挂钩

如果它有些快速和脏,你可以使用其他下游钩子来修改你需要的东西,或者通过使用ob_start()/ob_end_clean()来修改上游和下游钩子(参见 @Todd Perkins回答 到“通过插件代码处理大型HTML输出“代码示例。”

要追踪你可以使用的钩子,请查看 Instrument Hooks插件 我昨天发布的,以帮助您找到可能使用的钩子。

向Plugin Developer提交带有Desired Hook的补丁

如果您的用例对您或社区更重要,我建议您继续并添加插件所需的挂钩。然后测试它以确保它真正解决您的用例,之后您可以向插件开发人员提交补丁,希望他或她将应用它。通过这种方式,您可以通过提供经过测试的代码使其尽可能简单,并且您可以自己完成用例以确保它真正符合您的需求。我不能告诉你我多久以后认为我需要一个钩子才能找到一个我想要实现的钩子后我需要一个钩子但是一个与我最初想象的不同。

如果你不熟悉创建一个补丁这里有一篇关于修补WordPress核心的好文章,其中大部分内容适用于修补插件,对于那些没有它的人来说,它有望显而易见:

希望这可以帮助?

附:有一件事我觉得有点令人失望,你的问题解决的是仅为最终用户设计的插件的百分比,即没有自己的钩子。想象一下,如果WordPress的设计与大多数插件一样吗?它将是不灵活的,是一个非常小众的解决方案。

如果WordPress能够自动安装其他插件所依赖的插件,那么事情会有所不同吗?因为它是我通常必须从头开始编写我需要的许多功能,因为客户想要某种方式和可用的插件,而90%不允许我灵活地更新剩余的10%。

我真的希望那些领导WordPress社区的人能够确定一种方法来确保插件因为遵循最佳实践而获得奖励(例如为其他开发人员添加挂钩),就像在StackExchange网站上获得好的答案一样。

6
MikeSchinkel

我们只需要尝试   to 是更好的插件开发者,以便我们可以一起玩Nice?

首先,是的。

是唯一真正的解决方案,要求作者包含自定义钩子,以便其他开发人员可以建立他们的工作?

那将是一个很好的解决方案。

您也可以复制其他插件,只需添加任何更改,但这会更麻烦。

2
Arlen Beiler

我想你在问题中回答了你的问题,所以它变得有点夸夸其谈。

显然,你所说的是一个类似于谷歌鼓励使用Android和Intent系统的系统,应用程序可以发布它能够代表其他应用程序执行的操作,然后可以挂钩并将数据传回向前。我个人认为这是我们需要成为优秀开发人员的东西 - 我们使用WordPress,因为它已经很棒,非常棒,可以在大多数情况下决定是否使用它或开发类似的内部产品。插件存储库本身也是同样的事情,主要是作为最终用户+开发人员 - 为什么在有一个非常好的插件时开发一个Twitter插件。

同样的“为什么开发重复”是你问题的关键所在。 Android Intent系统允许应用程序利用已经创建的函数,并在它们之间传递数据,这很受欢迎并经常使用,因为它被大量推动。有一个类似的系统已经在WordPress中实现,但是在核心代码中存在的钩子之外很少使用,这些钩子使用得很多。

如果存在自定义插件中的更多钩子,它将有益于社区,但正如您所说,没有简单的方法在您需要它们的时间/地点添加挂钩。

就你想要加入的Twitter插件而言,给作者发一封电子邮件,我相信他很乐意为你添加它们。

如果你认为有一个地方可以在你的插件中插入一个钩子,那就去做吧,然后把它记录好。如果有更多的人开始将钩子插入插件中,或者存在普遍的推动,那么它最终会发生。

那么回答你的结局问题:

我们是否只需要尝试成为更好的插件开发人员,以便我们可以一起玩好的?

是。


编辑:我已经想到了更多关于实际问题和实现钩子的最佳方法,如果您尝试运行插件的特定功能存在,您是否可以添加一个可以运行的操作?

2
nobody

定义一个函数:

function my_footer() {
    do_action('my_footer');
}

现在你可以挂钩这个钩子:add_action('my_footer', 'example_function', 1);#more informations见 我的帖子

0
bueltge