文章目录
使用了一段时间的wordpress , 发现很多功能需要自己写。于是,就开始了学习怎么在wp上面编写一款插件,
在这里和大家分享下。纯属新手制作。不妥之处,敬请指教。

首先;制作wp插件需要注意一下几点
- 给你的插件起个有意义的名字,让人一看就知道你的插件是做什么用的。这个名字最好是唯一的,因为网络上很多wp 插件,为了区分哪个是你的作品,你最好给它起个‘特殊’的名字
- 在插件的代码里面最好包含详细的注释,这样对你以后维护起这个插件是非常有利的,而且,如果你的作品是优秀的,很多人会渴望能读懂你的代码,甚至在你的代码上面二次开发,这时你的代码注释就显得十分重要。
- 对wp还有人用的版本测试一遍。以兼容多个版本。
新建一个插件
在wp-content/plugins 目录下新建一个文件夹,以你的插件名字命名
标准插件信息
目录中可以有各种的css javascript html 图片 等等文件,但是最主要的还是要有一个主php文件
插件的主文件顶部必须包括一个标准插件信息头。WordPress通过标准信息头识别插件的存在,并把她加入到控制面板的插件管理页面,这样插件才能激活,载入插件,并运行里面的函数;如果没有信息头,插件将无法激活和使用。标准信息插件头的格式为:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
<?php /* Plugin Name: 插件名 Plugin URI: 插件的介绍或更新地址 Description: 插件描述 Version: 插件版本,例如 1.0 Author: 插件作者名称 Author URI: 插件作者的链接 License: A "Slug" license name e.g. GPL2 */ ?> |
标准信息头至少要包括插件名称,这样WordPress才能识别你的插件。其他信息将显示在控制面板插件管理页面中。标准插件信息对各行顺序没有要求。
这样的升级机制能够正确地读出你的插件版本,建议你选择一个格式的版本号,不同版本之间,并坚持下去。例如,x.x中或x.x.x或xx.xx.xxx
注意:文件必须是 UTF-8 格式!
Readme文件
如果你想将你的插件发布到http://wordpress.org/extend/plugins/, 你必须在插件包中建立一个标准格式的readme.txt文件. 文件格式参见http://wordpress.org/extend/plugins/about/readme.txt.
你可以访问http://wordpress.org/extend/plugins/about/readme.txt 查看如何去格式化自述文件,或者访问http://generatewp.com/plugin-readme/ 来使用文档自动生成器
需要注意的是,WordPress是通过自述文件来判断这个插件是处于“必要”还是“测试”状态的。
版权信息
通常我们还要用一个LICENSE.txt 插件的许可证信息。大多数插件使用GPL或GPLCompatibleLicenses许可。如果使用GPL许可,可以参考下一个标准的LICENSE 怎么写
编写插件
理解wordpress插件钩子
我们的插件一般需要用一个或多个wordpress 的钩子来关联我们的插件到wordpress核心程序中去,来完成我们插件实现的功能,插件钩子的运行机理是,当WordPress运行到不同阶段,WordPress会检查当前阶段是否注册了插件函数,如果是,那么函数将被执行。通过执行插件函数改变了WordPress的默认功能。
比如我们做一个在文章最后面添加一个文章的版权信息时。wordpress程序将文章显示到浏览器前会检查是否有插件注册了一个名字为 the_content的钩子。如果有的话,那么。就会将文章传递到这个钩子的回调函数中去。那么,我们可以在这个回调函数中处理这个文章,在文章的最后面添加一行我们的版权信息。从而实现我们插件功能。
wordpress 核心钩子插件有两个。
1 2 |
add_action ($hookname, $callbackfunction) add_filter ($hookname,$callbackfunction) |
其中$hooknane 是钩子的名字。在需要用到这个钩子的地方使用,如 the_content();
$callbackfunction 回调函数名。实现这个钩子功能的函数
来看看这两个核心功能的定义
1 2 3 4 5 6 7 8 |
function add_filter($tag, $function_to_add, $priority = 10, $accepted_args = 1) { global $wp_filter, $merged_filters; $idx = _wp_filter_build_unique_id($tag, $function_to_add, $priority); $wp_filter[$tag][$priority][$idx] = array('function' => $function_to_add, 'accepted_args' => $accepted_args); unset( $merged_filters[ $tag ] ); return true; } |
至于add_action 似乎和add_filter 没有什么区别,只是返回了add_filter函数,并没有添加什么新的处理。
1 2 3 |
functionadd_action($tag, $function_to_add, $priority= 10, $accepted_args= 1) { returnadd_filter($tag, $function_to_add, $priority, $accepted_args); } |

