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():它可以将某个函数挂载到我们即将使用的动作挂钩上

  1. <?php
  2.  
  3. add_action( $hook_name, $function_name, $priority, $arguments );
  4.  
  5. ?>

让我们来看看这些参数意味着什么:

  • $hook_name 是所使用的动作挂钩的名称。
  • $function_name 是函数名。
  • $priority 是我们规定的一个整数,用来设置函数在此挂钩中的优先级别。
  • $arguments 是函数所使用的和动作挂钩同时所允许的参数个数。

让我们来看一个简单的例子:

  1. <?php
  2.  
  3. add_action( 'add_meta_boxes', 'my_function', 10, 2 );
  4.  
  5. function my_function( $post_type, $post ) {
  6.     // do stuff with $post_type and $post
  7. }
  8.  
  9. ?>

很简单,对吧?

从动作挂钩中清除原有函数

我们可以使用以下两个函数清除动作挂钩中的原有函数: remove_action() 和 remove_all_actions()

首先来看一看它们是如何使用的:

  1. <?php
  2.  
  3. // remove_action( $hook_name, $function_name, $priority );
  4. remove_action( 'login_enqueue_scripts', 'some_function', 10 );
  5.  
  6. // remove_all_actions( $hook_name, $priority );
  7. remove_all_actions( 'wp_enqueue_scripts', 10 );
  8.  
  9. ?>

remove_action() 有三个参数:挂钩名称、要清除的函数名和使用 add_action() 时设置的优先级别。 remove_all_actions() 函数则没有$function_name 参数,因为它会清除动作挂钩中的所有函数。

创建一个动作挂钩

如果你想要开发 WordPress插件或者主题的话,一个值得推荐的做法是在你的代码中创建一些挂钩,这样其他的开发人员就可以继续扩展你的插件和主题了。而要做到这一点,我们需要两个函数:do_action() 和 do_action_ref_array()。让我们来看看第一个函数是如何运作的:

  1. <?php
  2.  
  3. do_action( $hook_name, $arg1, $arg2, /* ... */ $argN );
  4.  
  5. /*
  6.  * Usage:
  7.  * 
  8.  * add_action( hook_name, my_function )
  9.  * 
  10.  * function my_function( $arg1, $arg2 ) {
  11.  *     // do stuff with $arg1, $arg2 and so on
  12.  * }
  13.  * 
  14.  */
  15.  
  16. ?>

正如你所看到的那样,这个函数实际上可以包含无限多的参数,你可以根据需要来定义任意多的参数。如果你想在一个数组中保存这些参数,那么你还需要使用第二个函数:

  1. <?php
  2.  
  3. $args = array( $arg1, $arg2, /* ... */ $argN );
  4.  
  5. do_action_ref_array( $hook_name, $args );
  6.  
  7. /*
  8.  * Usage:
  9.  * 
  10.  * add_action( hook_name, my_function )
  11.  * 
  12.  * function my_function( $args ) {
  13.  *     // do stuff with $args[0], $args[1] and so on
  14.  * }
  15.  * 
  16.  */
  17.  
  18. ?>

检索动作挂钩被调用的次数

如果你想知道一个动作挂钩被调用的次数,你可以使用一个简单方便的函数来统计:

  1. <?php
  2.  
  3. function tuts_foo() {
  4.     $action_count = did_action( 'some_action_name' );
  5.     if ( 1 === $action_count ) {
  6.         // run code if 'some_action_name' has been fired only once
  7.     }
  8. }
  9.  
  10. ?>

正如你看到的那样,这个函数中唯一的参数就是动作挂钩的命名。

检查是否存在指定的动作挂钩

假设你正在为一个流行的 WordPress 插件开发其他的扩展插件,你首先需要检查用户是否已经安装了这个 WordPress 插件。(毕竟,如果这个插件没有安装并激活的话,那么你后来开发的插件也将无法使用。)

为了进行这项检查,你可以使用 has_action() 函数以确定这个插件的动作挂钩是可以访问的:

  1. <?php
  2.  
  3. if( has_action( 'some_popular_plugin_action' ) {
  4.     add_action( 'some_popular_plugin_action', 'extension_to_the_some_popular_plugin' );
  5. } else {
  6.     wp_die( 'Sorry to kill your website but I need "Some Popular Plugin" to work with.' );
  7.     // CAUTION: This is a joke. Don't shut down a website because your plugin can't work with it.
  8. }
  9.  
  10. ?>

就像 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

转载于:https://www.cnblogs.com/zzmzaizai/p/4788244.html

介绍50个 WordPress 动作挂钩相关推荐

  1. sysbios挂钩函数使用_使用动作挂钩自定义WordPress主题

    sysbios挂钩函数使用 Your WordPress theme is one of the main core components that defines the look and feel ...

  2. php自我介绍50字,自我介绍50字

    自我介绍50字 篇一:初中自我介绍50字 各位同学们,大家好,我的名字叫樊振宇.在学校里,这是我与大家的第4次见面,想必大家对我还不是很熟悉.所以,下面我就为大家做一个简单的自我介绍.我今年13岁,圆 ...

  3. 黄聪:WordPress动作钩子函数add_action()、do_action()源码解析

    WordPress常用两种钩子,过滤钩子和动作钩子.过滤钩子相关函数及源码分析在上篇文章中完成,本篇主要分析动作钩子源码. 然而,在了解了动作钩子的源码后你会发现,动作钩子核心代码竟然跟过滤钩子差不多 ...

  4. wpscan扫描的简单介绍(对WordPress的扫描CMS)

    wpscan是专门用来扫描WordPress的扫描工具 可以对于wordpress进行漏洞扫描,还可以对于其中的主题,插件进行扫描.可以说用wpscan扫描WordPress是非常非常方便的 wpsc ...

  5. php自我介绍50字,自我介绍作文50字

    自我介绍作文50字 我是一个叫做胡锦滢的阳光女孩.我长着一双水灵灵的大眼睛,一头乌黑乌黑的秀发,还有装载着可爱的酒窝.我,大大咧咧:我,不是淑女:我,酷爱臭美. 我,比阳光贴心:我,比小花还爱笑. 可 ...

  6. 介绍两款WordPress文章转移插件

    1. Inline Posts  如果想让你的子页面像首页一样出现文章列表 Wordpress lets you create pages that contain static content. T ...

  7. 计算机班级的简介,简短的班级介绍,50字的班级简介

    雪山巍峨,河水激荡,一群充满活力的年轻人--XX班的同学们在美丽的XX学院里演绎着一个个富有激情的青春故事.这是一个团结奋进.朝气蓬勃.温暖和谐的集体.57位来自五湖四海的学子,57张意气风发的笑脸, ...

  8. wordpress 介绍

    wordpress介绍 文章目录 wordpress介绍 1 :登录后台 2:插件 1:插件的作用 2:安装插件的方法 1:在线安装 2:上传插件 3:插件的位置 1 :登录后台 2:插件 1:插件的 ...

  9. wordpress 外部数据接口_WordPress Plugin API(插件接口)

    简介 本文介绍的是一些为 WordPress 插件开发者提供的 API (编程语言接口),以及如何调用这些接口. 阅读本文之前,请先参考开发一个插件,以便了解一些关于插件的概况和详情.文本着重于&qu ...

最新文章

  1. centos7安装FTP
  2. java 计算器_用Java编写一个简单的计算器
  3. JS 对象(Object)和字符串(String)互转
  4. git上传分支的原理_几张图让你彻底弄懂git工作流(二) ——git分支
  5. 后置三摄!郭明錤再曝新一代iPhone:屏幕变化不大
  6. python摄像头跟随人脸_Python3利用Dlib实现摄像头实时人脸检测和平铺显示示例
  7. 【贪心 和 DP + 卖股票】LeetCode 122. Best Time to Buy and Sell Stock II
  8. 哪种存储器是非易失的_ROM是易失性存储器还是非易事性存储器?
  9. win10系统下xilinx烧写器不亮
  10. 2022年G2电站锅炉司炉报名考试及G2电站锅炉司炉考试技巧
  11. Qcom平台,dump解析环境配置
  12. Service的两种启动方式
  13. 计算机打不开网络共享,电脑的网络和共享中心打不开,网络发现又没打开,..._网络编辑_帮考网...
  14. VMware软件安装与完全卸载
  15. xp没有本地计算机策略,WinXP没有网络适配器怎么添加?本地连接消失了如何恢复?...
  16. IOS7 适配以及向下兼容问题
  17. 编写dylib_iOS逆向-无需越狱注入动态库
  18. Win8应用开发笔记(1):谈谈Windows RT
  19. 领导给你安排这三个紧急任务(不是器重你而是利用你)
  20. 未来五年,不懂人工智能的程序员会被淘汰吗?

热门文章

  1. Android自定义弹窗模仿微信,Android仿微信右上角点击加号弹出PopupWindow
  2. 网工路由基础(7)策略路由PBR
  3. 【基础】防火墙接口类型全介绍
  4. 【必看】如何在 Linux 上恢复误删除的文件或目录
  5. 开源 Serverless 里程碑:Knative 1.0 来了
  6. Spring RSocket:基于服务注册发现的 RSocket 负载均衡
  7. rapter求n的阶乘流程图_RAPTOR程序设计例题参考答案
  8. nginx如何处理php请求,Nginx是如何处理HTTP请求的
  9. 以太坊钱包_最大的以太坊钱包币数量还在增加
  10. ros2_object_analytics安装过程全记录