挂接到插件


12

我正在开发一个插件,该插件在用户通过其他插件执行某些操作时理想地能够执行操作。

我可以在这些插件中添加自定义钩子,但是显然,当我要分发我的插件时,这行不通。有没有办法从我自己的插件向其他人的插件添加挂钩?是要求作者包括自定义钩子,以便其他开发人员可以继续其工作的唯一真正解决方案吗?

示例:当某人转发某篇文章时,我想在插件中做些事情。如果在流行的转推插件中有一个自定义钩子,我可以将其钩住并解雇,那将很棒。没有,所以我可以修改他们的插件以包括它,但这仅适用于我的副本,并且我不想尝试重新分发它。

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


1
好问题!
MikeSchinkel 2010年

“是唯一真正的解决方案,要求作者包括自定义钩子,以便其他开发人员可以从他们的工作中获益吗?” 在大多数情况下,是的。在某些情况下,您可以设法间接挂接到其插件,但通常不是这种情况。告诉他们像在为WordPress核心编写脚本那样编写插件-在可能需要的地方添加过滤器/操作。
Viper007Bond

1
提示:记录下插件确实提供的钩子,以便其他插件作者可以与之交互。
hakre 2010年

Answers:


6

@Ryan Elkins:

我猜答案取决于您如何导入每个用例。在某些情况下,这是您急需解决的问题,在其他情况下,则可能是更重要的用例。这是我想到的两件事:

在WordPress核心中查找备用挂钩

如果它的东西快速和肮脏的某些时候,你可以用其他的下游钩从核心网到修改你需要什么,或者通过使用上游和下游钩ob_start()/ ob_end_clean()(见@Todd帕金斯的回答为“ 通过插件代码与大的HTML输出处理 ”以获得代码示例。)

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

使用所需的挂钩向补丁程序开发人员提交补丁

如果您的用例对您或社区更重要,我建议您继续进行,并将所需的挂钩添加到插件中。然后对其进行良好的测试,以确保它确实能解决您的用例,然后您可以向插件开发人员提交补丁,以希望他或她将其应用。这样,您就可以通过向他们提供经过测试的代码来尽可能地简化它们,并亲自研究用例以确保它确实是您所需要的。我无法告诉您,在尝试实现一个钩子之后,我以为我经常需要某个钩子,而我却需要一个钩子,但是这个钩子与我最初设想的不同。

如果您不熟悉创建补丁程序,那么这是一篇有关修补WordPress核心的好文章,该文章最常用于修补插件,而对于那些不是最重要的事情,希望这样做是显而易见的:

希望这可以帮助?

PS一件事,我感到有些失望,您要解决的问题是只为最终用户设计的插件所占的百分比,即没有自己的挂钩。想象一下WordPress是否像大多数插件一样设计?这将是不灵活且非常利基的解决方案。

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

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


2

难道我们只是需要尝试,并 得到更好的插件的开发者,使我们都可以发挥很好的在一起?

首先,是的。

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

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

您也可以复制其他插件并仅添加任何更改,尽管那样会更加麻烦。


2

我认为您在问题中回答了您的问题,因此它变得有些措辞。

显然,您所谈论的是与Google鼓励Android和Intent系统使用的系统类似的系统,即一个应用程序可以发布它能够代表其他应用程序执行的操作,然后可以将该操作挂接到其他应用程序中并将数据传递回去。向前。就我个人而言,我认为这是我们作为优秀开发人员所需要面对的事情-我们使用WordPress,因为它已经很棒,足以在大多数情况下决定是使用它还是开发类似内部产品的决定。插件库本身还是一回事,主要是作为最终用户+开发人员-为什么在有一个完美的Twitter插件的情况下开发Twitter插件。

同样的“为什么要开发重复项”也是您问题的症结所在。Android Intent系统允许应用程序利用已经创建的功能,并在它们之间传递数据,这是很流行且经常使用的,因为它被大量推入。WordPress中已经实现了类似的系统,但是很少使用,而核心代码中的钩子已被大量使用。

如果存在更多自定义插件中的钩子,将使社区受益,但是正如您所说,没有简便的方法可以在需要的时间/位置添加钩子。

关于您想加入的Twitter插件,给作者发送电子邮件,我相信他很乐意为您添加它们。

如果有一个地方,您认为是在插件中插入一个钩子的好地方,然后对其进行记录并做好记录。如果越来越多的人开始将钩子插入插件中,或者有一个普遍的推动力,那就最终会发生。

因此,请回答您的以下最终问题:

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

是。


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


那会起作用,但是如果其他插件的函数具有相同的名称怎么办?
Arlen Beiler

糟糕,也许不会,因为您必须知道转发的内容和发件人。检查函数是一种运行时解决方案,我们需要的是实时解决方案,该解决方案在有问题的函数被调用或返回数据时运行。
阿伦·贝勒

@Arlen-假设您要创建自己的函数,该函数将检查特定函数是否存在。它会在“ plugins_loaded”之后运行,如果存在,它将设置一个启用功能的布尔值。它高度依赖于代码的不变,但是我看不出为什么它不起作用?
没人在2010年

0

定义一个函数:

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

现在您可以挂上此钩:add_action('my_footer', 'example_function', 1);#更多信息请参阅我的文章


不是=>现在,这个=>这个。正确?
阿伦·贝勒

我了解如何添加自定义钩子-问题是如何从别人的插件中脱钩,理想情况下,该方式不需要直接修改其插件。
瑞安·埃尔金斯

@Arlen:非常感谢,抱歉我的英语不好@Ryan:当插件没有钩子时,这是不可能的;但是当作者在其插件中要求时,您可以检查是否替换了该函数或类。但是也可以要求使用活动的插件,并在WP中更早地将其作为其他插件挂机并替换其功能。
bueltge 2010年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.