动作,过滤器和钩子(哦我的)
在本文中,我们将解释如何使用动作过滤器和钩子
什么是WordPress中的钩子
If you've worked with WordPress for even a short amount of time, it is very likely that you've heard of hooks (i.e. actions and filters).Hooks are an incredibly important part of the WordPress ecosystem as modifying core files is a big no-no.However, properly placed actions and filters can allow a user to easily overwrite or output some new content to a page or post with ease.从本质上讲,它们使WordPress中的自定义变得简单,并使您的更新在每次需要更新核心文件或主题时免于被覆盖。
WordPress不仅有自己的本地钩子供用户使用,还提供了一个有用的API供主题开发人员根据需要添加自己的动作和过滤器。X和Pro在整个主题中放置了许多有用的钩子,你可能不知道,它们就在那里等着你用它们做一些很酷的事情,让你的生活更轻松!
本文的目的是简要介绍WordPress中有哪些钩子,以及如何使用它们。然后我们将提供一些X/Pro的特定钩子以及如何使用它们的示例,以及整个主题中实现的所有钩子和过滤器的完整列表。Whether you're a complete beginner or an experienced dev, we think everyone will find something useful in this article.
请记住,在对主题进行任何修改时,都应该使用子主题。如果您不熟悉此方法或第一次开始使用X和Pro,请咨询这本文将详细介绍如何使用X和Pro设置我们提供的子主题。注意,下面提供的所有示例都需要放在显然也
file in the root directory of the child theme.
动作和过滤器的区别
最大的区别是行动而且过滤器它们使用的目的是:
- 行动:当某事需要时使用添加.
- 示例:在每篇文章的末尾输出一段内容(we didn't change anything since we are adding new content).
- 使用add_action ()函数。
- 与the连用do_action ()函数。
- 过滤器:当某事需要时使用改变了.
- 示例:覆盖的内容
<标题>
标记在特定的页面或帖子上(nothing is added, we're changing something that was already there). - 使用add_filter ()函数。
- 与the连用apply_filter ()函数。
For the sake of this article, we'll focus primarily on theadd_action ()而且add_filter ()函数,因为这些将允许您根据需要进入WordPress或主题的各个部分。do_action ()而且apply_filter ()主要由WordPress核心团队或主题开发人员使用,这样他们就可以添加钩子,供用户进行定制。
声明的行为
To declare an action (i.e. add some content), you will use theadd_action ()函数。这样做看起来如下所示:
function my_new_action(){//新动作所做的事情。} add_action('action_name', 'my_new_action', 10);
我们这里所拥有的是声明一个动作所需要的最低限度。一个新创建的函数标记了我们希望它是什么,它将执行特定的任务,以及add_action调用,它将我们的函数挂钩到我们希望目标的特定操作。的10在第三个参数中,spot是可选的,是操作的优先级。较小的数字将导致更早的执行,而较大的数字将导致更晚的执行。如果没有提供此参数,则使用默认值10。
如前所述,WordPress有一些自己的本地操作,在主题和插件中经常使用。一个这样的行为,wp_head,非常有名,而且非常有用。这个钩子将输出内容到你的网站的头部部分,允许你在需要特定任务(即社交媒体元信息,分析脚本等)时轻松地在那里放置标记。
例如,假设你有一个来自软件提供商的自定义跟踪代码,他们要求你将其放在报头('
’)你的网站。function third_party_tracking_code() { ?>