您当前的位置: 首页 > 慢生活 > 程序人生 网站首页程序人生
第四课、插件开发介绍原理讲解(add_action,add_filter)
发布时间:2023-02-27 14:05:40编辑:雪饮阅读()
Step1安装
本次实践是基于wordpress3.1.1,下载链接
https://wordpress.org/wordpress-3.1.1.tar.gz
二级目录安装时候需要配置伪静态如
lesson4 添加和管理文章及其分类和标签(固定链接 二级目录/子目录 nginx rewrite 伪静态) (gaojiupan.cn)
然后环境我还是延用的
lesson3-WordPress基本功能使用指南(安装) (gaojiupan.cn)
这个里面的环境要求,安装流程也可参考上面这个链接
Step2 一个最简单的单文件插件
在路径如D:\phpstudy_pro\WWW\wpcourse\wp-content\plugins中定义一个单文件插件文件名如plugin_1.php
这个plugin可能是一个固定前缀,这里我暂时没有细究。
内容如:
<?php
/*
Plugin Name:我的第一个插件
Plugin URI:http://www.gaojiupan.cn
Version:V1.01
Author:Murphy Pendleton
Author URI:http://www.wpbaike.com
Description:这是我开发的第一个wp插件哦
*/
这里就定义了该单文件插件的:
插件名
插件uri(可以理解为插件官网或者插件介绍的一个页面的uri应该都是可以的吧)
插件版本
插件作者
插件作者uri
插件描述
那么刷新后台插件列表则可以看到该单文件插件如
这里Murphy Pendleton链接就是插件作者uri,Visit plugin site就是插件uri
此时activate该插件仅有该效果plugin activated
无其它任何效果
Step2 add_action
接下来刚才的单文件插件内容变成如
<?php
/*
Plugin Name:我的第一个插件
Plugin URI:http://www.gaojiupan.cn
Version:V1.01
Author:Murphy Pendleton
Author URI:http://www.wpbaike.com
Description:这是我开发的第一个wp插件哦
*/
function showName(){
echo "菜单<br/>";
echo date('Y-m-d H:i:s');
echo '插件原理';
}
add_action('adminmenu','showName');
可以看到的是这里新增了一个方法并使用add_action去调用该方法
刷新刚才的插件列表页面可以看到效果
那么这里add_action方法官方的解释是说将函数挂接到特定操作。
那么这里adminmenu是管理菜单,则合起来理解大概就是:
输出管理菜单后激发showName方法。
可以在这里参考理解adminmenu
Reference | WordPress Developer Resources
关于add_action与do_action
创建钩子(可省略):使用do_action()函数可以创建一个没有挂载函数的钩子,挂载函数可以通过add_action()添加,最后再使用do_action()调用执行;
执行动作钩子:使用do_action()可以依次执行挂载在指定钩子上的所有函数以完成指定任务;
则我可以理解为add_action是把一个函数添加到某个已经存在的钩子上,该钩子如果执行了,则该钩子上面的所有挂载的函数都会依次被执行。
那么do_action就不难理解了,属于是直接执行某个钩子。
而一般系统里面某些钩子是有自己的执行时机的,比如像上面这个是管理菜单钩子管理菜单出现后执行adminmenu这个钩子,那么我们将showName挂载到这个钩子上就可以一并在管理菜单出现后就执行showName方法了。
那么do_action则就是说,有些钩子可能时机是你自己定义的,比如默认这个adminmenu钩子是在菜单显示出来后才执行,那么你可以试试修改下源代码,比如在菜单出现后sleep 10后再进行do_action传入adminmenu为参数。
则效果应该就是在菜单出现后10秒后才执行adminmenu的钩子。
当然这里我是忽略那个如果有同步阻塞的情况的。意思传达到就ok。
那么下面这个也就不难理解了
<?php
/*
Plugin Name:我的第一个插件
Plugin URI:http://www.gaojiupan.cn
Version:V1.01
Author:Murphy Pendleton
Author URI:http://www.wpbaike.com
Description:这是我开发的第一个wp插件哦
*/
function showName(){
echo "菜单<br/>";
echo date('Y-m-d H:i:s');
echo '插件原理';
}
add_action('admin_init','showName');
admin_init钩子的执行时机是:
初始化管理屏幕或脚本时激发。
那么同样的
<?php
/*
Plugin Name:我的第一个插件
Plugin URI:http://www.gaojiupan.cn
Version:V1.01
Author:Murphy Pendleton
Author URI:http://www.wpbaike.com
Description:这是我开发的第一个wp插件哦
*/
function showName(){
echo "菜单<br/>";
echo date('Y-m-d H:i:s');
echo '插件原理';
}
add_action('admin_footer','showName');
admin_footer钩子的执行时机:
在默认页脚脚本之前打印脚本或数据。
Step4 add_filter
add_filter类同add_action的效果
<?php
/*
Plugin Name:我的第一个插件
Plugin URI:http://www.gaojiupan.cn
Version:V1.01
Author:Murphy Pendleton
Author URI:http://www.wpbaike.com
Description:这是我开发的第一个wp插件哦
*/
function showName(){
echo "菜单<br/>";
echo date('Y-m-d H:i:s');
echo '插件原理';
}
add_filter('adminmenu','showName');
<?php
/*
Plugin Name:我的第一个插件
Plugin URI:http://www.gaojiupan.cn
Version:V1.01
Author:Murphy Pendleton
Author URI:http://www.wpbaike.com
Description:这是我开发的第一个wp插件哦
*/
function showName(){
echo "菜单<br/>";
echo date('Y-m-d H:i:s');
echo '插件原理';
}
add_filter('admin_footer','showName');
filter与action的区别
“filter是之前,action是过程”对这句话我只能保持尚可的态度。
我觉得“主要的区别就是有返回值”这个更有说服力。
官网对于filter的说法:
WordPress提供了过滤器钩子,允许插件在运行时修改各种类型的内部数据。
插件可以通过将回调绑定到过滤器钩子来修改数据。稍后应用筛选器时,将按优先级顺序运行每个绑定回调,并有机会通过返回新值来修改值。
下面的示例演示如何将回调函数绑定到筛选器挂钩。
请注意,传递给回调,(可能)修改,然后返回:$example
function example_callback( $example ) {
// Maybe modify $example in some way.
return $example;
}
add_filter( 'example_filter', 'example_callback' );
感觉其实这个没有那么强制性,自己可以根据情况酌情考虑属于是。
关键字词:add_action
相关文章
-
无相关信息