使用wordpress已经很久了,别人的插件也用了不少,比如all in one SEO , follow me, search-suggest等等,自己却从来没有写过插件。
前段时间接到兔子发来的一个项目,项目中要修改几个wordpress的插件,于是便研究了一下如何编写插件。
下面我们就自己动手,写一个比较简单的wordpress插件!
再多唠叨几句,这二个月来一直都follow一个比较好玩的国外网站, http://www.funnysayings.us 。这个站界面虽然很丑,但是每天都会更新一些funny sayings 或者 funny quotes 或者英文笑话之类的东西,很是好玩。
那么我们就写一个插件, 采集它每天更新的内容,以widget的形式放到我们blog的侧边栏里面。
下载此插件: funny-sayings插件
第一步,我们在wp-content\plugins创建一个目录,叫做funny-sayings。目录名最好不要包含空格。
在此目录里面创建二个文件,一个是readme.txt, 里面是我们插件的说明文档。另外一个就是主文件:funny-sayings.php
第二步,在funny-sayings.php 文件开头写入插件的相关信息,格式如下:
<?PHP
/*
Plugin Name: Funny_Sayings_plugin
Plugin URI: http://www.funnysayings.us/wordpress-plugins/funny-sayings
Description: Displays latest funny sayings from http://www.funnysayings.us
Version: 0.0.1
Author: Masa
Author URI: http://www.masalife.com
*/
我想每一项是什么意思,我就不用再解释了吧。
第三步,创建后台管理界面,用来在wordpress 的后台里面对本插件进行配置。
出于教学与测试的目的,我们的配置信息并不多,只是对widget title进行一下配置。
我们创建一个function ,叫做funny_sayings_options_page()
在这个function中,其实就是一个form表单,与表单提交之后的数据处理。
常规写法就是
<?PHP
if ( $_POST['funny_sayings_submit_hidden'] == ”Y”)
{
//处理提交
}
?>
<form>
<input type=text name=”funny_sayings_widget_title”>
<input type=hidden name=’funny_sayings_submit_hidden’ value=”Y”>
<input type=submit name=submit value=submit>
</form>
不过这样也有一个不好的地方,就是PHP代码和HTML代码都混在一起了。
那么表单提交过来的配置信息,我们怎样处理呢? 这些配置信息要怎样保存,用到的时候又要怎样读取出来呢?这里就需要用到wordpress 的二个函数 get_option 与 update_option。
我们来看一下wordpress的数据表:
CREATE TABLE `wp_options` (
`option_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`blog_id` int(11) NOT NULL DEFAULT ’0′,
`option_name` varchar(64) NOT NULL DEFAULT ”,
`option_value` longtext NOT NULL,
`autoload` varchar(20) NOT NULL DEFAULT ’yes’,
PRIMARY KEY (`option_id`,`blog_id`,`option_name`),
KEY `option_name` (`option_name`)
) ENGINE=InnoDB AUTO_INCREMENT=678 DEFAULT CHARSET=utf8 |
使用update_option($opt_name, $opt_value)之后,我们的配置信息,就以 option_name -> option_value(键值对)的形式保存到这张表里面。
读取数据的时候,只要使用 $opt_value = get_option($opt_name) 就可以了。
为了不与其它作者以及wordpress内置的 option_name冲突,需要在option_name前加入自己的前缀,比如”funny_sayings_widget_title” 就是一个不错的形式。
第四步,创建widget页面
我们新建一个函数 funny_sayings_show() 用来从http://www.funnysayings.us 的feed里面获取最新的sayings, 并显示出来。
具体的流程就不再说了, 只提一下使用到的wordpress函数。
fetch_rss()
$messages = fetch_rss(‘http://www.funnysayings.us/rss/category/2′);
http://www.funnysayings.us/rss/category/2 就是那个网站的RSS地址。
各位可以print_r($messages) 看一下,fetch_rss之后,得到的数据结构是怎样的。
第五步,把第三步创建的后台管理界面添加到wordpress的后台中。
这就要使用到wordpress的函数:add_options_page() 与 add_action()
// Hook for adding admin menus
add_action(‘admin_menu’, ’funny_sayings_add_pages’);
// action function for above hook
function funny_sayings_add_pages() {
add_options_page(‘funny sayings 111′, ’funny sayings 2222′, ’administrator’, ’funny sayings 333′, ’funny_sayings_options_page’);
}
最后一个参数 funny_sayings_options_page 就是我们第三步创建的函数名。
第三个参数”administrator” 是指进入这个管理界面的权限。
这样的结果就是,在后台Settings 菜单里面,多了一项: funny sayings 2222, 点击之后,会进入URL: http://www.xxxxx.com/wp-admin/options-general.php?page=funny%20sayings%20333
这个网页的title就是<title>funny sayings 111 </title>
第六步,把我们的插件添加到sidebar的wigets里面
function init_funny_sayings_widget()
{
register_sidebar_widget(“funny sayings”, ”funny_sayings_show”);
}
// 第二个参数funny_sayings_show 就是我们在第四步创建的函数名。
add_action(“plugins_loaded”, ”init_funny_sayings_widget”);
第七步,开始测试
进入wordpress后台
在Plugins页面激活funny sayings 插件
在Settings->funny sayings 2222 页面, 配置一下插件
在Appearance->Widgets 页面,拖一个叫做funny sayings的widget到右侧。
然后打开BLOG首页,就应该可以看到了。
具体的效果可以看一下花荣老师的BLOG首页: http://www.masalife.com
第八步,进一步的改进
改进一:添加一个单独的css文件,对widget的界面进行定制。
改进二:由于http://www.funnysayings.us 这个网站每天只更新一次,如果我们自己的BLOG访问量特别大,每次访问的时候,都去动态的抓取数据,显然速度是很慢的,特别是这个服务器还是在国外的。想到什么好办法没有?对,使用cache!
不好意思,改进一与改进二我都没有实现,等下一个版本再更新吧。
最后再提一点,一个好的插件,是需要经常维护的,不断地改正BUG。
如果wordpress出了新的版本,你也要去测试一下,有BUG就要改。
好了,就说到这里吧。同学们再见。