2019独角兽企业重金招聘Python工程师标准>>>

要想随心所欲的给主题添加功能,wordpress的钩子和过滤器应该要能明白。wordpress钩子和过滤器也是插件开发的基本知识。

我们通过实例来讲解wordpress钩子,在第一节基础教程中我们说到,要给主题的头部文件加上wp_head();函数,否则有的插件将不能正常工作,该函数位于wp-includes/general-template.php文件的1577行,原函数如下:

  1. function wp_head() {
  2. do_action('wp_head');
  3. }

可一看到这个函数调用了do_action函数,传入参数"wp_head",有兴趣的看官可以继续追溯一下do_action函数,该函数位于wp-includes/plugin.php文件。不过这个函数就比较复杂了,这里就不讲解了,只需要明白会用就好。

我们这样解释do_action函数:do_action执行一个“动作”,这个动作名称就是这个参数"wp_head",这个wp_head动作是不需要定义的,do_action还有定义的功能,也就是先前不需要定义这个wp_head是什么、要干嘛,而do_action就定义了一个名叫wp_head的动作,并执行它。

但是光有一个空名称不行啊,不如你说我们do_action('饭前'),当然这里的参数是假想的,肯定不能用中文嘛,饭前具体干嘛呢?

所以我们还需要一个函数:add_action(),add_action跟do_action位于同一个文件中。

add_action()函数可以给“动作”添加具体事务,比如前面我们已经定义并执行了一个动作“饭前”,然后我们add_action('饭前','洗手'),就给这个“饭前”动作添加了具体内容,在程序中来讲,“洗手”这个参数应该是个函数名称,也就是执行这个函数。

所以我们do_action里面的动作叫做动作钩子(hook),钩子可以挂东西,所以add_action就是往这个钩子上挂函数,然后执行那个钩子的时候,也就是执行所有挂在这个钩子上的函数。

函数:

  1. <?php
  2. do_action($tag, $arg);
  3. //$tag  必需、你想创建的动作钩子的名称
  4. //$arg  传递给已有的动作钩子的值
  5. ?>
  1. <?php
  2. add_action( $tag, $function_to_add, $priority, $accepted_args );
  3. //$tag  参数必需,动作钩子的名称
  4. //$function_to_add  参数为必需,要执行的函数
  5. //$priority  参数为int(整数),数字越小越先调用
  6. //$accepted_args  参数为int(整数),函数需要的参数个数,默认1;
  7. ?>

注意了:我们看到do_action函数和add_action函数还有一个参数,我们将在实例中讲解参数的应用。

先看简单示例一,我们通过wp_head()函数来往wp头部输出一个meta信息:

  1. <?php
  2. add_action('wp_head','echo_author');
  3. function echo_author(){
  4. echo '<meta name="author" content="阿树工作室" />';
  5. }
  6. ?>

我们只需要往wp_head动作上添加一个函数,输出meta信息即可,上面的函数添加在哪里呢?主题的functions.php,或者其它主题被包含的函数文件,好吧,只要主题会执行的地方。

这个应用很简单,很多插件就是这样工作的,像这样来输出css或js代码。

示例二:

这次我们要通过钩子来传递参数了,do_action('hookname',$arg_1,$arg_2,$arg_3)除了钩子名外,还要带3个参数,然后add_action()中,除了钩子名,函数名,优先级,剩下那个就是参数的个数了,也就是挂靠的这个函数需要多少个参数,do_action传了3个参数,那么对应的add_action的accepted_args可以为0、1、2、3。少接受可以,但是多了就木有了。

例如:

  1. <?php
  2. add_action('ashu','function1',10,2);
  3. add_action('ashu','function2',1,3);
  4. function function1($a1,$a2){
  5. echo $a1.'<br />'.$a2;
  6. }
  7. function function2($a1,$a2,$a3){
  8. echo $a1.$a2.$a3.'<br />';
  9. }
  10. $arg_1 = '这里是阿树工作室';
  11. $arg_2 = '这里有主题制作教程';
  12. $arg_3 = '我们提供主题定制服务';
  13. do_action('ashu',$arg_1,$arg_2,$arg_3);
  14. ?>

可以看到定义并执行了一个叫“ashu”的动作钩子,并且传3个参数给动作函数,然后使用add_action,往这个钩子上挂了2个函数,function1函数需要2个参数,function2需要3个参数,所以使用add_action的时候后面对应的参数个数也是2和3。然后优先级分别是10和1,所以function2先执行。

我想到了这里,动作的使用已经很清楚了。然而关于动作钩子(hook)的函数不仅仅只有这两个,还有has_action() do_action_ref_array() remove_action() remove_all_action()....要想再深入了解,可以看官网了。

转载于:https://my.oschina.net/lnmpstudy/blog/130250

wordpress功能集成(二):基础知识-wordpress钩子(转)相关推荐

  1. 什么是人们常用的计算机设备之一,计算机:复习二基础知识复习

    <计算机:复习二基础知识复习>由会员分享,可在线阅读,更多相关<计算机:复习二基础知识复习(15页珍藏版)>请在人人文库网上搜索. 1.基础知识复习2,计算机系统,一.知识框图 ...

  2. 计算机硬件各部件的名称 功能参数,计算机基础知识教程-硬件.ppt

    计算机基础知识教程-硬件 计算机硬件基础结构 机箱内主要部件及分布 机箱后背外接扩展接口 主板扩展接口 计算机工作原理 计算机应用基础知识 主要部件功能及参数指标 CPU CPU性能主要参数 主要部件 ...

  3. 计算机右键功能总结,计算机基础知识:右键快捷菜单功能介绍

    一.选择"打开"就会将该文件夹打开 二.选择"共享"就会打开文件夹共享窗口,可以将该文件夹共享出来,供局域网中其他计算机使用本机资源. 三.选择"发送 ...

  4. ATK MT9V034摄像头的学习(二基础知识)

    认识ATK MT9V034摄像头 ATK MT9V034摄像头都有什么资源? 1.18个引脚 2.24Mhz晶振 3.最大分辨率:752*480 4.最大帧率:60 fps 5.全局曝光 6.HDR ...

  5. Linux基础第一章:基础知识与基础命令

    目录 一.虚拟机的三种网卡模式 二.基础知识 2.1  shell的内外部命令 2.2可以使用type命令来区分内外部命令 2.3命令行头解释 2.4文件具体信息含义 2.5命令行格式 三.基础命令 ...

  6. 软考备考-系统构架师-18-信息系统基础知识相关试题整理

    博客迁移 不恰饭的小站 说明 1 整理2009~2016年系统构架师"信息系统基础知识"题目 2 内容见文档:"考点按章节整理\第 14 章 信息系统基础知识\信息系统基 ...

  7. wordpress页面里可不可以写php,WordPress开发中如何在html中包含php

    WordPress开发中如何在html中包含php 王超 2021-02-18 主题开发 69 次 欢迎阅读这篇关于如何在HTML中使用PHP的文章!在这里,我们试图在一个特定的.PHP文件的层次上具 ...

  8. PHP学习笔记——环境安装/基础知识

    参考资料:http://www.php.cn/course/2.html 编程词典(方便查找某个函数或者知识点):http://www.php.cn/dic/29.html 更多请查看PHP参考手册, ...

  9. 计算机硬件知识哪里学,计算机硬件基础知识 计算机硬件是由哪几部分组成的...

    在学习计算机的时候,自然就要对计算机的软硬件要了解,今天小编想要说的就是计算机硬件的相关知识,而重点所要说的就是计算机硬件的组成部分以及工作原理,有兴趣的朋友快来看一看吧. 计算机硬件基础知识--计算 ...

最新文章

  1. Android学习笔记26:图片切换控件ImageSwitcher的使用
  2. java批量删除接口怎么定义_教你在Java接口中定义方法
  3. hadoop 单机单间_Hadoop单机模式配置
  4. windows查看usb信息命令_Linux dumpe2fs命令:查看文件系统信息
  5. asp.net使用httpModule来实现一个反向代理
  6. Nginx负载均衡与健康检查
  7. 详解C语言中的使用(取地址符)
  8. 灵感爆发:An/flash 影片剪辑动画播放一遍后,摆脱paly()的控制
  9. java资源文件路径_Java 中获取资源(文件)的路径问题总结
  10. uni-app相关知识积累
  11. [HOW TO]-oppo手机安装google play
  12. 新手焊接电路板_新手要如何熟练焊接电子电路板
  13. 2016年物联网最后一件大事,GE Predix平台上线-免费试用资格申请
  14. android 短信迁移到iphone,将安卓手机上的短信导入到iphone上的方法
  15. 自动采集收录导航系统源码分享
  16. 线程与并行编程【总结】
  17. vscode快捷键使用
  18. 图解让你了解常用锁的种类以及解决方案(内含代码演示)【建议新手收藏】
  19. vue的keep-alive组件清除缓存
  20. 如何正确使用qrcode生成二维码

热门文章

  1. Topology and Geometry in OpenCascade-Face
  2. 对刚接触oracle的人比较有用的一些工具 zt
  3. 网络学习(三)安装VMware Workstation 7
  4. SUSE LINUX系统文件句柄限制的修改
  5. USB和USB2.0万能驱动
  6. kafka java客户端消息的分区与缓存发送
  7. vue瀑布流demo_面试加分企业级Vue瀑布流
  8. JS 网页自动加载js函数
  9. Java校招笔试题-Java基础部分(四)
  10. 深入了解Java的SPI机制