WordPress挂钩:添加自己的挂钩的初学者指南

WordPress挂钩:添加自己的挂钩的初学者指南

WordPress挂钩:添加自己的挂钩的初学者指南
СОДЕРЖАНИЕ
02 июня 2020

插件是 扩展WordPress的方法。使WordPress进行投标如此容易的原因与散布在源代码中的钩子有关.


想要在发布帖子后立即采取措施吗?要修改摘录长度吗?是否要创建自己的页面浏览量统计信息?找到合适的钩子就是您要做的全部.

但是如何对插件做同样的事情呢?钩子不仅仅用于WordPress,它们本质上是一种您可以在自己的工作中实现的设计模式.

在本文中,我将向您展示如何创建自己的钩子,以使您或其他人可以轻松地基于您的工作.

为什么我们需要挂钩

为了说明钩子有多棒,让我们看一下现实世界中的示例: 高级自定义字段. 该插件可让您向帖子中添加灵活的自定义数据字段;我们正在谈论Google地图,数字字段,多项选择等.

所有这些都是通过漂亮的用户界面完成的,您需要做的就是在前端使用诸如get_field()或the_field()之类的函数。到目前为止,一切都很好.

假设您正在构建一个工具,该工具可以让人们出售商品,提供一个价格字段和一个货币字段。但是,在内部,无论用户选择显示哪种货币,您始终都希望以美元存储价格。.

如果ACF(高级自定义字段)没有任何钩子,则很难做到这一点,您可能需要使用ACF之外的机制来保存此字段。幸运的是,我们被 acf / save_post 行动。您可以使用此操作在保存$ _POST数据之前对其进行修改,这是将价格转换为Dollars的绝佳时机.

这是一个非常实用的钩子示例,但是还有另一个原因:将来的证明和可扩展性。挂钩有点像API,它们为您提供指导;可以这么说的框架。如果您要保存重要数据,则应自动创建一个挂钩,以便其他人可以在需要时操纵数据。如果您要显示对应用程序至关重要的内容(例如图像),请使用过滤器,该过滤器可用于定义所显示的图像数量.

挂钩如何在内部工作

要创建自己的钩子,我们将完全执行WordPress内部的工作-使用do_action()和apply_filters()函数执行所有钩子函数。我们来看一下WordPress源代码,看看它们是如何工作的.

WordPress内部使用wp_trim_excerpt()函数来创建摘录。在WordPress 4.1中,此功能在wp-includes / formatting.php中定义,从2542行开始。如果您将注意力转向2560行,您应该看到以下内容:

$ excerpt_length = apply_filters(’excerpt_length’,55);

这意味着什么:运行钩在excerpt_length钩子中的每个函数,并返回最终值。假设您使用3个可修改摘要长度的插件,那么会发生什么?让我们将这些功能集中在一个地方,看看:

add_filter(’excerpt_length’,’plugin_a_excerpt_modify’,20);
plugin_a_excerpt_modify($ length){
返回$ length-10;
}

add_filter(’excerpt_length’,’plugin_b_excerpt_modify’,32);
plugin_b_excerpt_modify($ length){
返回104;
}

add_filter(’excerpt_length’,’plugin_c_excerpt_modify’,16);
plugin_c_excerpt_modify($ length){
返回20;
}

最后,摘录长度将为104个字长。筛选器按其优先级顺序执行。因此,首先执行插件C的功能。如果没有其他函数挂接,则长度现在为20个字。接下来,插入插件A,长度变为10。最后,插入插件B,长度为104.

do_action()使用完全相同的机制,执行与定义为第一个参数的挂钩相关的所有功能.

请注意,此模式是完全封闭的,它不依赖任何特殊定义。您可以在任何喜欢的地方使用do_action(’lol_hook’),在最坏的情况下,没有函数与lol_hook绑定。换句话说,我们已经具有创建自己的钩子的基础结构!

创建我们自己的挂钩

正如我上面提到的,我们要做的就是确保使用do_action()和/或add_filter并确保 记录下来. 这样,编码人员和用户就会真正知道它的存在.

假设我们要创建一个图库,其中包含直接从数据库中提取的最新上传图像,如下所示:

$ args =数组(
‘post_type’=> ‘附件’,
‘post_status’=> ‘任何’,
‘orderby’=> ‘日期’,
‘订单’=> ‘DESC’,
‘posts_per_page’=> 10,
‘字段’=> ‘ids’
);
$ images =新的WP_Query($ args);
$ gallery ='[‘.’gallery ids ="’。 implode(’,’,$ images)。 ‘"’。’]’;
回声do_shortcode($ gallery);

在此示例中,我们创建一个查询以确保仅检索按日期排序且限制为10个结果的图像。使用fields参数,我确保返回了一个id数组。然后,我根据这些信息构建了一个常规的WordPress画廊简码.

您可以采用两种方法在此处添加挂钩。您可以仅在$ args数组的定义之前添加它,如下所示:

$ posts_per_page = apply_filters(’my_gallery / posts_per_page’,10);

在这种情况下,您将需要在数组中使用$ posts_per_page变量。也许更好的解决方案是修改整个数组。这将允许其他插件(或您将来使用)在画廊中添加类别,标签和其他限制-这是完整的代码:

$ args =数组(
‘post_type’=> ‘附件’,
‘post_status’=> ‘任何’,
‘orderby’=> ‘日期’,
‘订单’=> ‘DESC’,
‘posts_per_page’=> 10,
‘字段’=> ‘ids’
);

$ args = apply_filters(’my_gallery / query_args’,$ args);

$ images =新的WP_Query($ args);
$ gallery ='[‘.’gallery ids ="’。 implode(’,’,$ images)。 ‘"’。’]’;
回声do_shortcode($ gallery);

这里的所有都是它的。现在,其他插件可以使用my_gallery / query_args钩子来修改创建的画廊的功能.

命名注意事项:根本不需要正斜杠。您可以使用“ my_plugin_query_args”或您希望使用的任何其他格式。我更喜欢斜杠,因为它清楚地说明了创建它的插件及其提供的功能.

结论

挂钩功能非常强大,不仅可以用于扩展WordPress,还可以用于扩展您自己的插件甚至主题。您应该注意不要过于费力,并在应用程序的每个角落都添加钩子.

我没有添加一个钩子到订单,发布状态,post_type和posts_per_page上,而是添加了一个可以立即修改整个数组的过滤器。其他数据位可能没有必要添加钩子,这最终取决于您.

祝您创建更多模块化和可扩展的应用程序好运,如果您之前曾在凉爽的地方使用过自己的钩子,请告诉我们!

Jeffrey Wilson Administrator
Sorry! The Author has not filled his profile.
follow me
    Это интересно
    Adblock
    detector