wordpress中add_filter和add_action用法

WordPress 中有一种叫执行挂勾的机制,允许插件把一些功能“挂载”到 WordPress 当中。

也就是说,在系统运行至某一个环节时,去调用插件内的一些函数。

WordPress中有2个函数可以让我们执行WordPress标准操作到时候调用我们自定义的函数,这2个函数分别是add_action()和add_filter()。

先看看WordPress里面关于这2个函数的定义,在wp-includes/plugin.php文件中,先看add_filter()的定义:

function add_filter($tag, $function_to_add, $priority = 10, $accepted_args = 1) {
    global $wp_filter, $merged_filters;
    $idx = _wp_filter_build_unique_id($tag, $function_to_add, $priority);
    $wp_filter[$tag][$priority][$idx] = array('function' => $function_to_add, 'accepted_args' => $accepted_args);
    unset( $merged_filters[ $tag ] );
    return true;
}

再看看add_action()函数的定义:

function add_action($tag, $function_to_add, $priority = 10, $accepted_args = 1) {
 return add_filter($tag, $function_to_add, $priority, $accepted_args);
}

看到这里你也许就明白了,其实add_action()是调用add_filter()的功能,没有加入新的处理操作,说明这两个函数是没有什么区别的。

下面来详细说说add_filter()函数。

通过add_filter()函数的定义,我们可以看到该函数是把我们要hook的函数的一些变量存储在global $wp_filter这样一个全局数组中的,包括$tag,即我们要hook的函数,$priority即hook的顺序,还有就是$idx这个就是我们自定义函数的名称了。

值得注意的是如果我们在使用add_filter这个函数的时候如果指定顺序,那么默认的就是10,这个在插件开发的时候值得注意一下,以免和其它插件产生冲突。

博客发表新内容时用电子邮件通知朋友:

function email_friends($post_ID)  {    
   $friends = 'bob@example.org'
   mail($friends, "sally's blog updated" , 'I just put something on my blog: http://www.111cn.net');
   return $post_ID; 
}
add_filter('publish_post', 'email_friends');

总结一下:网上很多说到add_filter与add_action的区别,说的主观上的区别,add_filter是指在数据显示之前对数据进行一些处理,而add_action则是执行一下复杂的操作。

其实二者在功能上是没有任何区别的

时间: 2024-09-22 21:46:25

wordpress中add_filter和add_action用法的相关文章

Wordpress中使用SyntaxHighlighter插件用法举例

1.友好的扩展性:通过简单的继承和改写就可以实现新语法的高亮. 2.强大的配置性:SyntaxHighlighter提供多种配置参数,能够充分满足定制化的高亮需求. 3.简便的集成性:即使手动安装SyntaxHighlighter也非常简便,可以轻松实现论坛.博客的语法高亮. WordPress上支持SyntaxHighlighter的语法高亮插件众多,Robin选用的是:syntax-highlighter-and-code- prettifier 这款插件支持绝大多数的配置功能,下面Robi

优化WordPress中CSS和JavaScript

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 WordPress是一个强大的博客程序,但它的主题及插件通常需要一些CSS和Javascript来实现其功能.加载更复杂的主题或是更多插件导致网站速度变慢.加载相关CSS和Javascript耗费了大量的时间,特别是很多博友都是使用国外主机,优化CSS和Javascript可以在最大程度上减少加载时间. 一.CSS和Javascript合并优

解析WordPress中的post_class与get_post_class函数_php技巧

post_class()post_class 是 WordPress 内置的一个用于显示文章 class 名称的函数,该函数通常会为每一篇文章生成独一无二的 clss 值,如果你需要制作你自己的主题,而且还需要一点个性的话,那你最好驻足一下,使用该函数并配合灵活的 css 代码,我们可以制作出个性化十足的 WordPress 博客. post_class 函数描述 该函数通常会为每一篇文章生成独一无二的 clss 值,可以很方便使用于文章所在的节点中. 函数使用 向其他的诸如 header_im

详解WordPress中分类函数wp_list_categories的使用_php技巧

wp_list_categories 函数是 WordPress 中用来罗列系统中分类的函数,该函数拥有许多控制输出的参数,今天突然被一个朋友问到,所以就大概整理了一下. 因为 WordPress 中内置扩展的小工具功能, 所以我们不经任何函数就可以在边栏或是其他我们想要的位置显示一个分类列表, 所以wp_list_categories函数就很少有人用到, 该函数使用起来有点类似于wp_list_bookmarks, wp_list_categories 描述wp_list_categories

几个优化WordPress中JavaScript加载体验的插件介绍_php技巧

WordPress 本身以及主题和插件通常需要加载一些 JavaScript 来实现某些特殊功能.为了最大限度地保证兼容性,不至于出现 JavaScript 失效的情况,所以一般在页头加载 JavaScript 文件.但是根据 Yahoo 开发者论坛的建议,加载 JavaScript 应该尽量在页尾以提高页面的显示(响应.渲染)速度.本文根据作者的使用经验介绍几个相关插件,并说明如何在某些特殊页面仍然在页头加载 JavaScript. 下面先简单介绍几个相关的优化 JavaScript 的 Wo

快速掌握WordPress中加载JavaScript脚本的方法_javascript技巧

在 WordPress 中加载脚本(为 CSS 和 JS,下同)文件,大多数人的做法是直接在 header.php 文件中添加 link 标签,或者把 link 标签通过 wp_head 钩子直接添加到 head 标签里,这种做法是不符合官方规范的. 标准的脚本加载方式应该是使用 WordPress 官方提供的函数(后边会说),统一标准有几个好处,首先就是更加安全和利于管理,其次是更加的方便快捷,而且不仅主题能挂载脚本,插件也可以,并且还能管理脚本,并且调整挂载顺序和位置和其它内容. 在哪个钩子

WordPress中邮件的一些修改和自定义技巧_php技巧

更改邮件内容类型为 HTML在 WordPress 中发送邮件需要使用 wp_mail() 函数,但是邮件内容默认的类型却是"text/plain",也就是不支持 HTML. 如果你想要在邮件内容中添加 HTML 代码,除了发送"Content-Type: text/"的 headers 信息之外,还可以利用过滤器统一修改. /** *WordPress 更改邮件内容类型为 HTML *http://www.endskin.com/mail-content-type

php中php://input的用法详细

下面的例子摘取的是wordpress中的一段代码,里面有用到http://input,有需要的可以进一步研究.  代码如下 复制代码 if (!isset( $HTTP_RAW_POST_DATA ) ) {       $HTTP_RAW_POST_DATA = file_get_contents('php://input');   }     // fix for mozBlog and other cases where xml isn't on the very first line  

ASP.NET2.0中的ClientScriptManager 类用法

asp.net|client ASP.NET2.0中的ClientScriptManager 类用法-如何添加客户端事件 在ASP.NET2.0中,ClientScriptManager 类通过键 String 和 Type 唯一地标识脚本.具有相同的键和类型的脚本被视为重复脚本.因此,我们可以使用脚本类型来避免混淆可能用在页中的来自不同用户控件的相似脚本. <html>  <head>    <title>ClientScriptManager Example<