http://blog.shidelai.cn/2008/07/plugins.html
WordPress的插件机制使得开发者可以方便地向系统添加自己需要的功能,而这是使得Wordpress得以在全世界流行的重要原因。一个 WordPress插件是一个程序,或者是用PHP脚本语言写出的一个或一些函数的集合,用来往WordPress Webblog 里增加一些特定的特征和服务,它们可以通过WordPress的 Plugin Application Program Interface (API) 提供的接入点和函数无缝的集成到Webblog里.
插件机制的实现主要依靠wp-includes目录下的plugin.php文件,该文件中包含了与插件机制相关的几个函数。在 wordpress内核运行时设立了一些标记(tag),当遇到这些标记时,wordpess会自动调用挂载到 (hook to)这个标记上的所有函数,该功能是通过数组来实现的,其过程可以直观的表示为下图:
插件hook原理
用户可以通过plugin API方便的将自定义的功能添加到系统相应的位置。需要指出的是:wordpress定义了两种类型的插件API,行为(actions)和过滤器 (filters):
Actions: Actions are the hooks that the WordPress core launches at specific points during execution, or when specific events occur. Your plugin can specify that one or more of its PHP functions are executed at these points, using the Action API.
Actions 是由WordPress内核在执行过程中的特定的点或者特定的事件发生时调用的. 使用这些Action API,你的plugin可以指定在这些点去执行一个或者多个PHP函数.
Filters: Filters are the hooks that WordPress launches to modify text of various types before adding it to the database or sending it to the browser screen. Your plugin can specify that one or more of its PHP functions is executed to modify specific types of text at these times, using the Filter API.
Filters是一种hooks,由WordPress调用,针对于各种形式的文本,让它们在进入数据或发送到浏览器之前得到调整. 使用Filter API,你的插件可以指定在某个时间执行一个或者多个PHP函数来修改特定类型的文本.
一、一个最简单的插件的开发过程
下面以阿德弄的一个a_simple_song插件(其实跟自带的那个插件是一样的,只是修改了歌词而已)为例简述整个过程三个步骤:编写插件要执行的代码,添加add_action(),进入后台激活它。
该插件的功能是:在WordPress后台左上角随机显示《一首简单的歌》这首歌的歌词。
1.在wordpress目录/wp-content/plugins/下新建一个文件:a_simple_song。
2.用文本编辑工具打开它,输入<?php ?>,接下来的工作就是在这里面填写相应PHP代码。
3.首先按一定的格式编写本插件的一些信息,WordPress读取它用于在后台显示,方便用户查看:
/*
Plugin Name: 一首简单的歌
Plugin URI: http://blog.shidelai.cn/#
Description: 这个插件会在后台随机显示《一首简单的歌》的歌词。
Author: 施德来
Version: 1.0
Author URI: http://blog.shidelai.cn
*/
4.编写要执行的操作:
$lyrics = “一首简单的歌 //定义了一个字符串数组用于存储歌词
这世界很复杂
………
你是我最珍贵的财富”;
$lyrics = explode(“\n”, $lyrics);
//explode()是PHP内置函数,功能就是分割字符串成字符数组
$chosen = wptexturize( $lyrics[ mt_rand(0, count($lyrics) - 1) ] );
/*
给chosen赋一条随机的歌词
wptexturize()在wp-includes\functions-formatting.php定义,功能:把某些特殊符号给自动转换化成标准码格式。
mt_rand()函数返回它2个参数之间的随机值
count()返回数组大小
*/
function a_simple_song() {
global $chosen;
echo “<p id=’dolly’>$chosen</p>”;
}
//dolly样式表由后面定义。
//显示歌词
5.添加add_action(),将a_simple_song函数hook到main_foot tag的队列中
add_action(‘admin_footer’, ‘a_simple_song’);
//admin_footer.php被调用时执行这个函数
add_action(‘admin_head’, ‘dolly_css’);
//admin_head.php被调用时执行dolly_css()
具体经过请参考下面的从源码解读a_simple_song插件的调用过程。
这样,保存为.php文件方到plugins文件夹下面,再到后台激活就可以了。效果如图
二、WordPress对所有可用的插件的读取
在文件/wordpress/wp-admin/plugins.php中,函数
<?php function get_plugins() ?>
用来从文件系统得到所有的插件。原理很简单,就是读取’wp-content/plugins’目录下的所有PHP文件。这个函数允许一级的子文件夹,也就是说在’wp-content/plugins’下面的PHP文件,以及所以在此目录下的一级子文件夹内部的PHP文件被列作插件的候选,用下面的函数去进一步提取插件信息。这样的好处是方便用户利用文件夹来对插件进行管理和组织。
foreach($plugins as $plugin_file => $plugin_data) {
…..
$plugin_data['Title'] = wp_kses($plugin_data['Title'], $plugins_allowedtags);
$plugin_data['Version'] = wp_kses($plugin_data['Version'], $plugins_allowedtags);
$plugin_data['Description'] = wp_kses($plugin_data['Description'], $plugins_allowedtags);
$plugin_data['Author'] = wp_kses($plugin_data['Author'], $plugins_allowedtags);
$author = ( empty($plugin_data['Author']) ) ? ” : ‘ <cite>’ . sprintf( __(‘By %s’), $plugin_data['Author'] ) . ‘.</cite>’;
….
}
用于从插件的头部注释中获取插件的版本、名称、作者,等信息。
三、Active & Deactive Plugin(插件的激活与注销)
Active(Deactive)插件的操作都在Plugins.php中,比如我要ple_Deactive “a_simsong”这个插件,最后的URL其实是这个样子:
http://localhost/wordpress/wp-admin/plugins.php?action=deactivate&plugin=a_simple_song.php&_wpnonce=242c8cc3e5
其中,”Action”表示动作,值为”active”或者”deactivate”,而”Plugin”表示动作的对象插件,此处为”a_simple_song.php”。得到动作指令后,首先从数据库中取出当前已经激活的插件。
$active = get_option(‘active_plugins’);
然后根据动作,重新生成已激活插件数组,和theme一样存入数据库,并重新加载此页。加载的时候就需要考虑这些已经激活的插件是怎么工作的了。
四、插件的加载过程
WordPress中的每页都会包含”wp-config.php”文件,而在”wp-config.php”的最后有这样一句:
<?php require_once(ABSPATH.’wp-settings.php’); ?>
在”wp-settings.php”文件中,可以找到以下与插件相关的代码片断:
if ( get_option(‘active_plugins’) ) {
$current_plugins = get_option(‘active_plugins’);
if ( is_array($current_plugins) ) {
foreach ($current_plugins as $plugin) {
if (” != $plugin && file_exists(ABSPATH . PLUGINDIR . ‘/’ . $plugin))
include_once(ABSPATH . PLUGINDIR . ‘/’ . $plugin);
}
}
}
可见,这段代码会取出系统中所有Actived的插件,并Include进来。所以在每页加载的时候,都会首先Include这些插件代码。这也就是为什么在主题模板里面可以直接调用插件的函数。
五、WordPress通过插件机制注册系统事件
WordPress中的很多功能也都是通过这种插件结构来实现的,WordPress默认注册的系统事件保存在default-filter.php中。比如:
<?php add_filter(‘the_content’, ‘convert_smilies’); ?>
用来将正文(content)中的笑脸符号转换为图像。
add_filter(‘comment_text’, ‘wptexturize’);
用来将从数据库提取的正文中的特殊符号转化成标准格式的。
六、从源码解读a_simple_song插件的调用过程
在每一个wordpress/wp-admin/下面的文件(也就是后台显示需要的文件)的前面都有
<?php require_once(‘admin-header.php’); ?>
而在”admin-head.php”中将会执行扩展点”admin_head”的所有扩展:
<?php do_action(‘admin_head’, ”); ?>
这样,就会执行所有hook到admin_head上的函数
Admin Page的Footer部分同样如此,
<?php do_action(‘admin_footer’, ”); ?>
这样,就会执行所有挂接到admin_footer的函数
a_simple_song里面有这么2行代码:
add_action(‘admin_footer’, ‘a_simple_song’);
add_action(‘admin_head’, ‘dolly_css’);
将控制形式和内容2个函数挂到不同的tag上,控制文字显示位置和样式的dolly_css是先被调用,然后admin_foot.php被调用一次,a_simplesong()也就被调用一次,来显示歌词。
分享到:
相关推荐
WP-Poster是一款免费的WordPress文章分享海报插件,即使是小白也能够轻松使用,如果你想为网站添加一个文章分享海报功能,直接下载插件使用即可。Canvas绘图,非php后端生成,节省服务器资源,安卓系统中个别机型在...
标题所提到的"WordPress插件:给REST API 新增文章特色图片(缩略图)字段"正是针对这个问题的一个解决方案。特色图片(缩略图)在WordPress中通常用作文章的预览图或头图,它增强了内容的视觉吸引力,有助于提升...
这使得即使在资源有限的主机上运行Wordpress,用户也能无障碍地使用这款插件。 在当今用户行为数据日益重要的背景下,积分签到插件还可能帮助网站管理员收集用户的活跃度数据,进而进行市场分析、用户行为分析等,...
在WordPress后台,我们需要下载插件,而后通过上传的方式启用这款插件。插件安装完成后进入后台文章编辑文本模式下可以看到有一个“插入微信隐藏标签”的按钮,选中需要隐藏的图文内容,然后点击该按钮则会自动为你...
WordPress插件:Digg顶踩投票插件
简数采集器Wordpress采集发布插件接口免费下载: 1. 可将采集的数据快速批量发送到Wordpress系统; 2. 通过该采集发布插件发布数据,必须要密码安全验证,保证安全; 3. Wordpress采集发布插件通用性:可以对接大...
【WordPress小程序后台插件】 WordPress小程序后台插件是专门为WordPress平台设计的一款扩展工具,它使得WordPress网站能够与微信小程序进行无缝对接。通过安装这个插件,用户可以将WordPress的内容和服务直接呈现...
**WordPress果酱插件wpjam-插件合集详解** WordPress果酱插件wpjam-插件合集是一系列专为WordPress平台设计的优化工具,旨在提升网站性能、增强功能性和提供更好的用户体验。该合集包含了一系列精心打造的PHP插件,...
在WordPress的生态系统中,插件是扩展其功能的关键元素,它们可以帮助用户自定义网站的各个方面。"60S看懂今天"是一款针对WordPress设计的自动发布新闻插件,旨在简化内容发布流程,让网站能够在每天定时自动更新...
本插件和普通的Wordpress插件一样,上传到/wp-content/plugins/文件夹,启用插件即可。本插件非常小巧,只有一个wechat-fans.php文件,下载插件解压后,只需把wechat-fans.php放到/wp-content/plugins/wechat-fans....
教程名称:WordPress插件制作视频教程课程目录:【】插件课程配套文件【】第一课、php语言介绍【】第三课、php中的数组和函数【】第二课、php语法的流程控制代码【】第五课、首页文章自动摘要插件开发【】第六课、...
**WordPress豆瓣电影图书分享插件详解** WordPress是一个广泛使用的开源内容管理系统,其强大的扩展性和丰富的插件库使得网站开发者能够轻松实现各种功能。"WordPress豆瓣电影、图书、音乐和相册展示插件"是一个专...
6. WordPress插件开发:学习WordPress插件的生命周期、编写插件结构、创建设置页面等插件开发基础知识。 7. 安全性:确保插件代码的安全性,防止SQL注入、XSS攻击等安全问题。 8. 性能优化:了解如何优化代码以提高...
内容介绍:Media Cleaner插件可以便捷的清理wordpress系统媒体库中未使用的图片、视频、PDF或其它文件等,可以有效的辅助进行网站维护,提高网站的运行效率。 使用方法:安装并启用Media Cleaner插件,然后进入...
WordPress插件:评论弹幕插件 压缩包解压,上传到wordpress的插件plugins目录里面 后台找到插件启用
WordPress在线客服插件是网站所有者用来增强用户体验和提高客户互动的重要工具。这些插件通常包含实时聊天功能,使得用户可以随时与网站管理员或客服团队进行沟通,解决他们在浏览或购买过程中遇到的问题。免费的...
**WordPress文章下载增强插件源码 - CoreDownload** 在WordPress平台中,开发和使用插件是扩展网站功能的重要手段。CoreDownload是一款专为WordPress设计的高级下载增强插件,其核心目的是提供一种灵活且强大的解决...
【标题】VIP会员入群验证弹窗插件源码是一个专为WordPress设计的插件,其主要功能是在用户访问特定页面或操作时显示一个弹出窗口,要求他们进行VIP会员的验证。这种验证通常用于保护特定内容,确保只有已注册并付费...
WordPress文章批量加密解密插件 名称:Post Encryption And Decryption 版本: 0.1 作者:Ludou 更新:2010-05-17 功能:帮助您快速加密解密某个分类或某个标签下的所有的文章 性能:本插件只会按照您的要求...
WPML是wordpress上最有名的多语言插件,装机量非常高,功能非常强大,非常多的主题都支持此插件,兼容性非常好,支持一百多种语言,价值79美元的插件,本站免费提供下载了,转载请注明来源于本站。