wordpress中的插件主要是用来完善系统中某些独立的功能块。而其归根到底就是保存一些OPTION配置或日志相关的META信息,然后根据这些数据信息来表现出某个效果。
在插件的制作中,主要的机制要归功于“钩子”,他使得整个系统各个位置的信息可以得到很好的扩展和重构。而其中的钩子又分成了两类:事件和数据钩子。分别的工作为:在某个事件点上执行相关的动作;重构某个数据。其实从程序的角度两个功能是一样的,只样为了区分这个钩子是负责处理某个动作和重构某个数据。这样我们就可以利用这种机制在根据系统提供的各种钩子做出各种自己想要的插件出来。
|
-
function add_action($tag, $function_to_add, $priority = 10, $accepted_args = 1) { -
} -
function add_filter($tag, $function_to_add, $priority = 10, $accepted_args = 1) { -
} |
一个独立的插件他可能在运行之前需要保存有运行的配置信息,此时就需要在激法插件时,先将配置信息写入数据库;而当禁用插件时,应当将此相关信息清除,确保插件不会产生垃圾信息。(在制作的过程中应该尽的减少耦合性,确定是一个独立体)此时我们会在激法和禁用插件这两个钩子上进行我们的数据初始化和清除的ACTION了。
|
-
function register_activation_hook($file, $function) { -
} -
function register_deactivation_hook($file, $function) { -
} |
在做完了插件初始化和禁用的功能后,接下的工作就是插件要实现的功能而已了。
而在这个过程中,又可以分为以下的几个步骤:
- 加载语言包(可以这个事件应该放在全局时处理,也就是要放在载入插件文件时加载)
- 初始化过程中的相关过程变量
- 初始化钩子
- 钩子相关功能函数的实现
而这个过程我们可以面向对象的写法来制作:
|
-
<?php -
class Test -
{ -
/** -
* 构造函数 -
* -
* @return Test -
*/ -
function Test() -
{ -
// 加载语言包 -
load_plugin_textdomain('wp-test', str_replace(ABSPATH, '', dirname(__FILE__))); -
// 初始化钩子 -
register_activation_hook(__FILE__, array(& $this, 't_activation')); -
register_deactivation_hook(__FILE__, array(& $this, 't_deactivation')); -
add_action('admin_menu', array(& $this, 'test_menu')); -
add_filter('template', array(& $this, 't_template')); -
} -
-
/** -
* 激法插件 -
* -
*/ -
function t_activation() -
{ -
// TODO -
} -
-
/** -
* 禁用插件 -
* -
*/ -
function t_deactivation() -
{ -
// TODO -
} -
-
/** -
* 后台菜单 -
* -
*/ -
function t_menu() -
{ -
add_options_page(__('WordPress Test', 'wp-test'), __('WordPress Test', 'wp-test'), 'manage_options', 'wp-test-options', 't_admin_form'); -
} -
-
/** -
* 后台选项处理 -
* -
*/ -
function t_admin_form() -
{ -
// TODO -
} -
-
/** -
* 根据后台的配置信息重构数据 -
* -
*/ -
function t_template() -
{ -
// TODO -
} -
} -
-
/** -
* 初始化对象 -
* -
*/ -
$test = new Test(); -
?> |
至此一个简单的插件制作过程序就结束了