介绍50个 WordPress 动作挂钩
WordPress 之所以能成为世界上最受欢迎的网页内容管理系统,原因就在于它的高度灵活性和可塑性,而这种灵活性和可塑性正是由“挂钩”(Hooks)简洁宜用的结构所决定的。可以说,没有过滤挂钩(Filter Hooks)和动作挂钩(Action Hooks), WordPress 就不会具有这样高的可拓展性,我们也不可能会有如此多的 WordPress 插件和主题可供选择。
在本系列教程中,我将会向你详细介绍 WordPress 中的动作挂钩。在整个教程中,我们将会涵盖有关动作挂钩几乎所有方面的内容。
- 在第一部分,也就是在本文中,我们将会逐步了解到 WordPress 动作挂钩:什么是 WordPress 动作挂钩,以及怎样使用 WordPress 的7大核心动作挂钩。
- 在接下来的五个部分,我们将会接触到大量有关 WordPress 动作挂钩的实例。而在每一个部分,我们都会了解到10个挂钩的优点和它们的使用条件,并通过一些实例来进一步掌握它们。
- 在本系列课程的最后,我们将会进行一次课程回顾与总结,包括所举的50个例子。
这个学习过程将会非常漫长,所以,请做好准备。
什么是 WordPress 动作挂钩
在 Codex ( WordPress 法典)中,给出的定义如下:
动作挂钩由 WordPress 中的特定事件激活,例如:发布一篇文章、更改主题,或者是显示管理控制界面( administration screen)。动作挂钩是在插件(或主题)中定义的自定义PHP函数,即被设定为回应某些特定事件。
所以,从本质上来说,动作挂钩由某个 WordPress 事件激活,可以在事件之前或之后运行。动作挂钩只是WordPress的两种挂钩之一,另一个则是我们之前讲到的过滤挂钩(Filters)——如果想了解更多有关 WordPress 过滤挂钩的内容,请参阅《50个 WordPress 过滤挂钩》一文。
在WordPress中使用动作挂钩
定义动作挂钩只是最简单的一步,幸运的是,学会如何创建和使用动作挂钩也是非常简单的。首先,让我们来看看怎样将相关函数挂载到动作挂钩上,怎样创建新的动作挂钩,清除现有的挂钩和其他在 WordPress core中与动作挂钩相关的函数。
将一个函数挂载到一个动作挂钩上
其中最简单的函数也许就是 add_action():它可以将某个函数挂载到我们即将使用的动作挂钩上
<?php
add_action( $hook_name, $function_name, $priority, $arguments );
?>
让我们来看看这些参数意味着什么:
- $hook_name 是所使用的动作挂钩的名称。
- $function_name 是函数名。
- $priority 是我们规定的一个整数,用来设置函数在此挂钩中的优先级别。
- $arguments 是函数所使用的和动作挂钩同时所允许的参数个数。
让我们来看一个简单的例子:
<?php
add_action( 'add_meta_boxes', 'my_function', 10, 2 );
function my_function( $post_type, $post ) {// do stuff with $post_type and $post
}
?>
很简单,对吧?
从动作挂钩中清除原有函数
我们可以使用以下两个函数清除动作挂钩中的原有函数: remove_action() 和 remove_all_actions()
首先来看一看它们是如何使用的:
<?php
// remove_action( $hook_name, $function_name, $priority );
remove_action( 'login_enqueue_scripts', 'some_function', 10 );
// remove_all_actions( $hook_name, $priority );
remove_all_actions( 'wp_enqueue_scripts', 10 );
?>
remove_action() 有三个参数:挂钩名称、要清除的函数名和使用 add_action() 时设置的优先级别。 remove_all_actions() 函数则没有$function_name 参数,因为它会清除动作挂钩中的所有函数。
创建一个动作挂钩
如果你想要开发 WordPress插件或者主题的话,一个值得推荐的做法是在你的代码中创建一些挂钩,这样其他的开发人员就可以继续扩展你的插件和主题了。而要做到这一点,我们需要两个函数:do_action() 和 do_action_ref_array()。让我们来看看第一个函数是如何运作的:
<?php
do_action( $hook_name, $arg1, $arg2, /* ... */ $argN );
/*
* Usage:
*
* add_action( hook_name, my_function )
*
* function my_function( $arg1, $arg2 ) {* // do stuff with $arg1, $arg2 and so on
* }
*
*/
?>
正如你所看到的那样,这个函数实际上可以包含无限多的参数,你可以根据需要来定义任意多的参数。如果你想在一个数组中保存这些参数,那么你还需要使用第二个函数:
<?php
$args = array( $arg1, $arg2, /* ... */ $argN );
do_action_ref_array( $hook_name, $args );
/*
* Usage:
*
* add_action( hook_name, my_function )
*
* function my_function( $args ) {* // do stuff with $args[0], $args[1] and so on
* }
*
*/
?>
检索动作挂钩被调用的次数
如果你想知道一个动作挂钩被调用的次数,你可以使用一个简单方便的函数来统计:
<?php
function tuts_foo() {$action_count = did_action( 'some_action_name' );
if ( 1 === $action_count ) {// run code if 'some_action_name' has been fired only once
}
}
?>
正如你看到的那样,这个函数中唯一的参数就是动作挂钩的命名。
检查是否存在指定的动作挂钩
假设你正在为一个流行的 WordPress 插件开发其他的扩展插件,你首先需要检查用户是否已经安装了这个 WordPress 插件。(毕竟,如果这个插件没有安装并激活的话,那么你后来开发的插件也将无法使用。)
为了进行这项检查,你可以使用 has_action() 函数以确定这个插件的动作挂钩是可以访问的:
<?php
if( has_action( 'some_popular_plugin_action' ) {add_action( 'some_popular_plugin_action', 'extension_to_the_some_popular_plugin' );
} else {wp_die( 'Sorry to kill your website but I need "Some Popular Plugin" to work with.' );
// CAUTION: This is a joke. Don't shut down a website because your plugin can't work with it.
}
?>
就像 did_action() 函数,has_action() 函数只有一个参数:动作挂钩的名称。
- [2015][老兵][WEB-MKV/871MB][汉语中字][1920x816p][无水印][HQC]
- [2015]刺客聂隐娘.The.Assassin2015.TC720P.X264.AAC 国语中字 2.1G
- [2015]非我/无我/换命游戏/换命法则(台) Self.less.2015.720p.WEB-DL.AAC2.0.H264-RARBG 中英字幕1.32G
- [2015]非我/换命法则/换命游戏/无我 Self.less.2015.1080p.WEB-DL.AAC2.0.H264-RARBG 4.12GB
- [2015]我的母亲.My.Mother.2015.720p.BluRay.x264-WiKi 4.27GB
- [2011][霜花店-导演剪辑未删减][韩版色戒][BD-MP4/2.09G][韩语中字][无水印][720P]
- [2007]最后的兵团 The.Last.Legion.2007.1080p.BluRay.x264.DD5.1-FGT 7.18GB
- [2007]尖峰时刻3/火拼时速3 Rush.Hour.3.2007.1080p.BluRay.x264.DTS-FGT 7.94GB
- [2001]尖峰时刻2/火拼时速2/巅峰时刻2 Rush.Hour.2.2001.720p.WEB-DL.DD5.1.H264-FGT 2.97GB
- [2013]神秘感染/尸控一夜.情/神秘接触/感染 Contracted.2013.1080p.BluRay.x264.DTS-FGT 7.32GB
- [2015]史蒂夫·乔布斯:机器人生 Steve.Jobs.2015.DOCU.720p.WEB-DL.DD5.1.H264-FGT 3.96GB
介绍50个 WordPress 动作挂钩的更多相关文章
- 黄聪:WordPress动作钩子函数add_action()、do_action()源码解析
WordPress常用两种钩子,过滤钩子和动作钩子.过滤钩子相关函数及源码分析在上篇文章中完成,本篇主要分析动作钩子源码. 然而,在了解了动作钩子的源码后你会发现,动作钩子核心代码竟然跟过滤钩子差不多 ...
- WordPress插件制作教程(六): 插件函数之动作(Actions)函数
这一篇为大家说一下WordPress插件函数吧,要制作插件,了解这些函数是非常有必要的 WordPress插件函数分为“动作”(Actions)和过滤器”(Filters),WordPress 使用这 ...
- 经典收藏 50个jQuery Mobile开发技巧集萃
http://www.cnblogs.com/chu888chu888/archive/2011/11/10/2244181.html 1.Backbone移动实例 这是在Safari中运行的一款Ba ...
- (转)经典收藏 50个jQuery Mobile开发技巧集萃
(原)http://www.cnblogs.com/chu888chu888/archive/2011/11/10/2244181.html 经典收藏 50个jQuery Mobile开发技巧集萃 ...
- 决定如何开发你的WordPress主题框架
在本系列教程的第一部分,我介绍了不同类型的主题框架并解释了它们是如何工作的. 在你开始建立你的主题框架之前,你需要考虑它是如何工作的,以及它将会被用来做什么,这样你才能从一开始就找到最合适的开发途径. ...
- WordPress 主题框架是如何工作的
主题框架可以说是无比强大的!对于非技术型的 WordPress 用户来说,主题框架使得建立一个独一无二并看起来像是运行一个量身定制的主题的网站成为可能,并且对于 WordPress 开发者来说,它们能 ...
- cocos2d-x实战 C++卷 学习笔记--第7章 动作、特效(一)
前言: 介绍cocos2d-x中的动作.特效. 动作: 动作(action)包括基本动作和基本动作的组合,这些基本动作有缩放.移动.旋转等,而且这些动作变化的速度也可以设定. 动作类是 Action. ...
- wordpress教程之函数讲解
wordpress函数收集 is_home() : 是否为主页is_single() : 是否为内容页(Post), 是否是单篇文章 is_page() : 是否为内容页(Page), 是否 ...
- (转)每位设计师都应该拥有的50个CSS代码片段
原文地址:http://www.cnblogs.com/fengyuqing/archive/2013/06/15/css_50.html 面对每年如此多的 新趋势 ,保持行业的领先是个很困难问题. ...
随机推荐
- [转:CSS3-前端] CSS3发光和多种图片处理
原文链接:http://www.qianduan.net/css3-image-styles.html 一些上流的CSS3图片样式 神飞 发表于 24. Sep, 2011, 分类: CSS , 46 ...
- poj 1330 Nearest Common Ancestors(LCA:最近公共祖先)
多校第七场考了一道lca,那么就挑一道水题学习一下吧= = 最简单暴力的方法:建好树后,输入询问的点u,v,先把u全部的祖先标记掉,然后沿着v->rt(根)的顺序检查,第一个被u标记的点即为u, ...
- UVa 11292 The Dragon of Loowater 勇者斗恶龙
你的王国里有一条n个头的恶龙,你希望雇佣一些骑士把它杀死(也就是砍掉所有的头).村里有m个骑士可以雇佣,一个能力值为 x 的骑士可以砍掉恶龙一个直径不超过 x 的头,且需要支付 x 个金币.如何雇佣骑 ...
- VS2010开发2dx无法解析的外部符号解决记录
首先新建HelloWorld项目... 想使用Cocos2d扩展包需要引入相关头文件,如:#include “cocos-ext.h”...接下来我们右键工程属性->配置属性->c/c++ ...
- 【Java】List的三种遍历方法
public void List_Test(){ List<String>list = new ArrayList<String>(); for(int i = 0;i < ...
- [转] GIS二次开发(C#+AE)
乘风莫邪 原文GIS二次开发(C#+AE) 此过程描述了使用ArcGIS控件建立和部署应用的方法和步骤. 你可以在下面的目录下找到相应的样例程序: <</FONT>安装目录>/ ...
- [Everyday Mathematics]20150109
设 $A$ 是 $n$ 阶复方阵, 其特征多项式为 $$\bex f(\lm)=(\lm-\lm_1)^{n_1}\cdots(x-\lm_s)^{n_s}, \eex$$ 其中 $\lm_i$ 互不 ...
- Android中TabHost嵌套TabHost
在嵌套TabHost时,先后遇到了以下情况: 问题1:内部TabHos无显示,只显示了其中的一个Activity: 解决:按下文比对主子TabHos的布局文件和java文件并修改: 问题2:如上所做后 ...
- <转>写给浮躁的IT同仁(请不要做浮躁的人)
1.不要看到别人的回复第一句话就说:给个代码吧!你应该想想为什么.当你自己想出来再参考别人的提示,你就知道自己和别人思路的差异. 2.初学者请不要看太多太多的书那会误人子弟的,先找本系统的学,很多人用 ...
- 学习笔记 - 深究Bitmap压缩避免OOM的核心inSampleSize的最佳取值
/** * 测试代码,通过在SDCard根目录放置几种不同大小的图片, 来自动测试压缩方式是否有效同时看是否会内存不够. * * @since * By:AsionTang * At:2014年3月2 ...