WordPress插件开发笔记(一)
Author: Abraham
那天突然想写一个插件,用来保护文档。发布日志时可以设置密码,也可以设置需要回答的问题。WordPress本身有这个功能,但觉得不够灵活,比如不能设置多个一个问题的多个答案,不能设置全局通用密码(这个密码可用于回答所有问题)。
于是就想写一个插件。便花了一下午,着手研究了WordPress的插件开发。
总的来说还是很简单,WordPress良好的可扩展性架构,通过Actions、Filters等可以进行强大的扩展。
主要的核心文档是http://codex.wordpress.org/Writing_a_Plugin ,首先讲述了WordPress的插件原理,插件需要的基本信息(名称、作者、描述)。需要注意的是这些信息是必须的,否则WordPress不能识别插件。(这一点我也觉得神奇,这些信息是放文件头部的注释中的,WordPress估计是进行了自己的解析吧。)
然后讲述了插件的数据存储原理。以及在管理页面增加自定义菜单,以及菜单对应的插件自定义配置页面。
直接把我写的代码贴上来吧,方便快速理解和入门。
首先是插件主文件advanced-authority.php:
<?php
/**
* @package Advanced Authority
* @version 1.0
*/
/*
Plugin Name: 日志保护
Plugin URI: http://wordpress.org/extend/plugins/advance-authority/
Description: 高级日志权限管理,可以设置日志查看密码,查看回答问题等。
Author: Abraham
Version: 1.0
Author URI: http://www.yuhanghome.net
*/
//通过增加admin_menu这个action,在管理页面添加菜单
add_action('admin_menu', 'my_plugin_menu');
define("OPT_PRE","adv-auth-");
function my_plugin_menu() {
if (!current_user_can('manage_options'))
{
wp_die( __('You do not have sufficient permissions to access this page.') );
}
//在“设置”主菜单下添加“日志保护”子菜单
add_options_page('日志保护设置', '日志保护', 'manage_options', 'adv-auth-unique-identifier', 'adv_auth_options');
//也可以在“插件”主菜单下增加子菜单,详情查看http://codex.wordpress.org/Adding_Administration_Menus
//add_submenu_page("plugins.php","My Plugin Options","Abraham","manage_options",'submenu-unique-id','my_plugin_options');
}
function adv_auth_options() {
if (!current_user_can('manage_options')) {
wp_die( __('You do not have sufficient permissions to access this page.') );
}
//具体的渲染页面
include_once dirname( __FILE__ ) . "/adv-auth-options.php";
}
?>
以下是插件配置页面adv-auth-options.php:
<div class="wrap">
<h2>这是个一测试页面</h2>
<?php
$opt_name=OPT_PRE."key";
$opt_val=get_option($opt_name);
if(isset($_POST[$opt_name])){
$opt_val=$_POST[$opt_name];
if(empty($opt_val)){
echo "<div style='color:red;'>不能为空</div>";
}else{
update_option($opt_name,$opt_val);
echo "<div style='color:green;'>设置更新成功</div>";
}
}
?>
<p>测试Wordpress插件开发的options保存和读取</p>
<div>
<form action="" method="post">
<div>
<label>Key:</label>
<input autocomplete="off" type="text" name="<?php echo $opt_name;?>" value="<?php echo $opt_val;?>"/>
</div>
<div>
<input type="submit" name="submit" value="提交"/>
</div>
</form>
</div>
</div>
最后有个问题,插件配置页面只能配置全局的信息,如果对于某个日志的配置,如这个例子中对某篇日志设置密码,需要在日志编辑的页面增加模块。也就是说要修改post-new这张页面的内容,在里面增加自定义的模块。
这个在文档里没有明确写出,在API 中没有把所有actions列出,而在一个第三方网站http://adambrown.info/p/wp_hooks/hook中列出了全部的,但却没有详细介绍。(最神奇的是这个网站说所有信息自动从wordpress网站获取的,我就不知道wordpress把所有api的信息放在了哪里)。
在经历了各种搜索,各种查看api后,无赖只能回到原点,试图从WordPress的源代码中找寻灵感。还好功夫没有白费,无意中在edit-form-advanced.php中看到add_meta_box函数,果断的去API查,我勒个去,就是我要的。。。
http://codex.wordpress.org/Function_Reference/add_meta_box
最神奇的是,这个函数的介绍里给了个例子,完全就是相当详细的文档~~郁闷的就是WordPress就不能在插件开发的主文档里这个如此重要的函数给介绍一下,给个链接也行啊!!!!
代码不就给了,其实我也还没开始写呢~~~
四月 7th, 2011 at 23:13
[...] 在上一稿日志中,我写了一点点WordPress插件开发的笔记,并且说想开发一个日志保护的插件。 [...]