WordPress开发第二篇即hook机制

我们可以把wp_head()以及wp_footer()看成是"钩子",我们可以用别的hook  function来钩住它。首先wp_head只有一行代码,那就是do_action(‘wp_head‘),而wp_footer也只有do_action(‘wp_footer‘)而已,因此我们可以使用do_action来表现的更加简洁一些。</span>

当我们执行到输出header.php时,就会执行到wp_head(),就如同执行do_action(‘wp_head‘),此时wp核心就会去找所有钩上wp_head这个hook的hook  function。我们可以通过add_action(‘wp_head‘,‘print_sth‘);来给wp_head添加对应的操作,这里需要我们写一个print_sth()函数,我们给出如下范例:

function  print_sth(){

echo "WordPress是很优秀的作品奥。"

}

简单来说,hook机制就是:wp核心或者其他插件、主题提供定制功能的人一个置入定制代码(hook  function)到特定的执行时间点(hook)的机会。

WordPress中的action分为两种,我们一般称之为action  hook以及filter  hook,我们刚才看到的wp_head以及wp_footer都是属于action  hook。

action  hook是当wp核心(主题、插件)在做它们该做的事情的时候,如果执行到有action  hook的代码,也就是do_action语法时,就会去寻找对应的hook  function,进而执行这些hook  functions,也就是那些通过add_action()来加入的hook functions,这样来完成定制功能。但是wp核心并不期望action  hook  functions会有回传值,因此这里的hook 
function被看做一个独立切出来运作的功能。也就是说,wp核心做它该做的事,我们做我们想做的事,做完就各自结束。

filter  hook是使用add_filter来加入hook  functions的,但是所有钩上filter  hook的hook  functions通常都会接收到参数,而wp核心会期待我们拿到它提供的参数,并且做完我们想要做的事情之后,要回传一个值,让wp核心再利用我们回传的值来接着完成它该做的事情。也就是说,通过我们的干涉,修改了wp核心丢给我们的参数,wp核心再接着拿我们改过的参数,继续完成它该做的事,它就像"过滤"操作一样,因此得名为filter。

有时候我们可能很多地方都添加同一个hook,我们决定出现的顺序就是通过hook  function的priority参数来做优先顺序的设定。一般来说默认的优先级都是10.

但是一个网站可能会有很多插件,那么它们彼此之间该如何平衡好呢?我们可以通过$wp_filters这个global变量来取得所有hook的信息,下面是一段代码,这段代码可以获取某个hook所钩住的所有function,如下:

function list_hooked_functions($tag=false)

{

global $wp_filter;

if ($tag)

{

$hook[$tag]=$wp_filter[$tag];

if (!is_array($hook[$tag]))

{

trigger_error("Nothing found for ‘$tag‘ hook", E_USER_WARNING);

return;

}

}

else

{

$hook=$wp_filter;

ksort($hook);

}

echo ‘<pre>‘;



时间: 2024-10-09 08:24:47

WordPress开发第二篇即hook机制的相关文章

WordPress开发第一篇基本认识

因为是WordPress开发的初级阶段,因此我们首先从主题的制作开始介绍,我希望朋友们可以下载一个主题,或者是下载一个WordPress对照观看,否则只看下面的介绍是极其的乏味的. 首先就是WordPress主题的常用模板文件以及用途: style.css是样式表文件,一般包括主题声明和通用css样式代码 index.php是主页模板,一般用来做网站的首页 header.php是header模板,一般是所有页面的头部公用部分 sidebar.php是侧边模板,一般显示widget小工具 foot

微信开发第二篇:工具篇

自从写了第一篇后,最近一直在整理另一个项目的需求,没有继续研究下去,今天晚上终于开始了我的第二篇. 本次微信的项目是想基于H5做的,所以现在的想法还是先从前端入手. 要做一个移动端H5的网站有很多种方式: 1.使用Html5.css3.js自己从头开始做. 但如果这样,对于目前主要从事项目管理及后端开发工作的我,无疑是困难重重:另外自己也已经对前端的东西很久没碰过了.如果选择这种方式,肯定会本末倒置.最后说不定整个项目都没得戏(虽说这个项目完全是自己的个人爱好!!) 2.使用现在已有的移动端H5

(C/C++)基于SharpUI控件库的插件式框架开发--第二篇可停靠管理

一个软件,不可能只有一个文档界面,会有多个甚至几十二,比如一些浏览器.文档查看等都是多个标签页的形式,在C#中开源的可停靠管理的常用的是Xceed.Wpf.AvalonDock:但是用C/C++开发的开源停靠管理库是没找到,没办法只能自己写一个了. 图1 可停靠管理项目名XPDock,其中所有控件的样式存放在“.bin\layout\Theme\Controls\XPDock.xml”:如图2: 图2 在XPDock控件中,DockingManager为控件主要控件,控件内定义添加视图方法Add

轻松pick移动开发第二篇,rem布局

一.为什么要使用rem布局 前面我写了flex布局的优点,分配伸缩盒容器中子盒子占的份数及排列方式,使其不受屏幕缩放的影响,使布局变得简单.然而,在有些时候,不可避免要给盒子设置高度的值,怎么让高度也随着屏幕大小变化等比例缩放呢?另外,怎么让页面文字大小也随着屏幕的大小变化而缩放呢?rem布局就可以轻松解决这个问题. 二.rem布局的原理 1.rem 首先要了解什么是rem,rem (root em)是一个相对单位,1rem的值是页面html中font-size的大小.在布局中,我们统一使用re

并行开发——第二篇 Task的使用

在我们了解Task之前,如果我们要使用多核的功能可能就会自己来开线程,然而这种线程模型在.net 4.0之后被一种称为基于"任务的编程模型"所冲击,因为task会比thread具有更小的性能开销,不过大家肯定会有疑惑,任务和线程到底有什么区别? 1:任务是架构在线程之上的,也就是说任务最终还是要抛给线程去执行. 2:任务跟线程不是一对一的关系,比如开10个任务并不是说会开10个线程,这一点任务有点类似线程池,但是任务相比线程池有很小的开销和精确的控制. 一:Task 最简单的使用 开启

python开发第二篇

1.第一个程序: #-*-coding:utf-8-*- print("hello word") 1.1解析下: (1)第一行的意思:就是告诉python解释器在编译时候,要使用utf-8的编码去解释. (2)第二行就是打印出"hello word" 咯. 1.2然后怎么执行这段程序呢? (1)打开笔记本,把上面的代码保存成已.py后缀的文件,然后打开cmd,在黑色窗口输入"python 文件的路径",回车...运行完毕. 2.变量 什么是变量?

软件工程迭代开发第二篇

今天增加了一些显示上的内容,使我们的游戏更加便于理解.比如,我们加入了血条的显示,而且用颜色区分开自己的角色.别人的角色和怪物.如下图所示. 屏幕下方那一条紫紫的东西就是经验条,长满之后会升级. 下面我将逐个解释每个模块的实现方法. 首先是血条: 自己的血条: glColor3f(0.2, 1, 0.1); glRectf(wx - 0.025, wy + 0.1, wx - 0.025 + (hp / maxhp)* 0.05, wy + 0.085); //显示血条 其他玩家的血条: glC

API开发第二篇:PHP的设计模式之工厂模式

以前写代码老觉得,搞那么多乱七八槽的设计模式干嘛啊,这不是自己找罪受嘛.现在在这次的API开发过程中才晓得设计模式的厉害,真的是境界不到,永远不能领悟呀.还好坚持编码这么久,终于进入设计模式的运用了,算是一个进步.OK,废话不多说了,进入今天的主题,PHP(面向对象)的基础模式有三:工厂模式.单例模式.注册模式.今天想诉说工厂模式. 工厂模式的作用:不知道为什么用,就像一个人深藏千万两万金,却不知道黄金可以让他富可敌国一样.工厂模式,顾名思义就是一个工厂,这个工厂是生产类对象这个产品的.以前程序

微信开发第二篇----消息应答

接上篇,看ResponseXML(postString);方法如下 /// <summary>        /// 获取用户发送的消息        /// </summary>        /// <param name="postString"></param>        private void ResponseXML(string postString)        {            //使用XMLDocumen