事实上,WordPress插件机制只是这个Hook。翻译成中文的hooks,让你参与WordPress的核心操作。这是一件伟大的事情。让我们仔细看看。吊钩分类
钩子有两种,一种叫动作,一种叫滤镜。两个钩子的实现原理基本相同,后面会讲到。使用上的区别在于过滤器有返回值,但操作没有。
行动的想法是让你在一种情况下或一个特殊的位置上执行一些功能,比如发邮件。过滤器是让你修改一个WordPress核心需要使用的值,然后WordPress用这些值做一些事情,比如函数的返回值。
动作钩
Wp_head是一个非常常见的动作钩子。在主题开发过程中,开发人员会在head标签中添加函数wp_head()。事实上,正是这个函数调用了wp_head钩子。
如果插件开发人员想在head标签中添加一句话,他可以使用wp_head钩子。这里有一个简单的例子。
//给head tag函数bing _ add _ head _ tag () {echo' add某物';}add_action('wp_head ',' Bing _ add _ head _ tag ');添加代码后,在前台查看网页的源代码,就可以看到我们在head标签中添加了什么。
以上是一个简单的例子,只打印了一句话。使用这个钩子,我们还可以制作一个插件,当我们遇到404页面时,它会向管理员发送一封电子邮件。下面这一条写得很简单。
//向404页的管理员发送电子邮件。函数bing _ 404 _ PAG电子邮件(){if(!is_404())返回;//如果不是404页,退出函数$ to=get _ option(' admin _ email ');//获取管理员地址$subject='遇到404页!';//邮件头$message='404页地址:http://'。$ _服务器['http _ host']。$ _服务器[' request _ uri '];//邮件内容wp_mail($to,$subject,$ message);//发送邮件} add _ action ('WP _ head ',' bing _ 404 _ PAG e _ mail ');过滤钩
根据我个人的经验,过滤器钩子可能很难理解,尤其是对于不熟悉PHP的人。
过滤器钩子允许你改变某些东西的值,过滤器回调函数接受一个参数,即当前值。记住用来调用文章内容的_content()函数,它提供了一个_ content过滤器。
向_content钩子添加一个函数。该函数需要接收一个参数,即当前值。
//所有文章内容都链接到一个新窗口打开函数bing _ auto blank($ content){/$ content变量就是文章内容,因为其他过滤器也需要过滤,所以这个内容可能会被$ content=str _ replace ('a ',' a target=' _ blank ' ',$ content)其他函数过滤掉;//add target='_blank '返回$ content//必须返回过滤后的内容,否则值会丢失。} add _ filter ('the _ content ',' bing _ auto blank ');钩子原理
实际上,在调用add_action()和add_filter()时,只有一个数组元素被添加到$wp_filter全局变量中,这意味着action和filter是一个公共的全局变量,即filter和action不能同名。
当您调用do_action()时,您会发现在$wp_filter的全局变量中有哪些函数被添加到此操作中,您可以在循环中执行此操作。
Apply_filters()比do_action()多了一步,也就是说,它在每次调用该函数时都会接收该函数的返回值,最后返回过滤后的值以供使用。
获取当前钩子列表WordPress的动作和过滤器是插件机制的核心部分,它允许您主动添加需要在特定位置执行的动作。通常,add_action()和add_filter()函数用于挂载函数。
这些钩子存储在$wp_filter全局变量中,因此要获取钩子列表,可以直接获取$wp_filter全局变量。
pre?PHP var _ dump($ GLOBALS[' WP _ filter ']);/pre上面的代码将打印出钩子列表。