
这一期教程将是wordpress插件开发教程的完结篇,主要讲解如何构建插件管理页面,首先先来回顾下之前的教程:
2、制作wordpress收藏分享插件:如何构建wordpress插件的主文件
3、制作wordpress收藏分享插件:构建ShareList类
该插件的下载请到准备篇。
构建插件管理页面
在第二篇教程讲解主文件中,明河有说到,往wordpress的后台插入插件的管理页面,代码如下:
- add_action('admin_menu','add_share_list_options_page');
- //生成管理页面
- if(!function_exists('add_share_list_options_page')){
- function add_share_list_options_page(){
- global $SL;
- if(!isset($SL)){
- return ;
- }
- if(function_exists('add_options_page')){
- add_options_page('wp-share-list','收藏分享列表',9,basename ( __FILE__ ),array (&$SL, 'printAdminPage' ));
- }
- }
- }
构建插件管理页面的关键在于
- add_options_page('wp-share-list','收藏分享列表',9,basename ( __FILE__ ),array (&$SL, 'printAdminPage' ));
printAdminPage是ShareList的一个方法,用于输出管理页面。
printAdminPage这个函数代码很多,这里就不全部贴出,具体请详见ShareList.php
一、获取配置参数和插件路径
- $options = $this->getAdminOptions();
- $pluginUri = get_bloginfo('wpurl').'/wp-content/plugins/wp-share-list';
二、判断是否存在post值,存在更新配置,不存在显示表单
- isset($_POST['update-options'])
update-options是表单提交按钮的name值
三、先来看表单部分
1、引入必要的js和css文件
- <script type="text/javascript" src="<?php echo $pluginUri;?>/js/jquery-1.4.2.min.js"></script>
- <link rel="stylesheet" href="<?php echo $pluginUri;?>/style/css/base.css" type="text/css" media="screen" />
- <link rel="stylesheet" href="<?php echo $pluginUri;?>/style/css/admin-options.css" type="text/css" media="screen" />
- <link rel="stylesheet" href="<?php echo $pluginUri;?>/style/css/shareList.css" type="text/css" media="screen" />
2、构建表单表格
这部分难度不大,讲解有php的部分:
生成选择框的选项
- <select name="shareSites" multiple="multiple" id="shareSites" class="multiple-select">
- <?php foreach($options['shareSites'] as $name => $localName) {?>
- <option value="<?php echo $name;?>"><?php echo $localName;?></option>
- <?php } ?>
- </select>
结果如下图:

根据参数选中多选框
- <input type="checkbox" id="addJquery" name="addJquery" value="true" <?php if($options['addJquery'] == 'true') echo 'checked="checked"'; ?> />
接下来来看js部分,这部分的内容并不属于wordpress插件开发的关键部分,明河不会一一讲解,js的代码有混合了php代码,这部分可以留意下。
3、我们需要遍历配置shareSites,将用户选择的分享站点生成一个js数组(数据只需要name值)
- //用户选择的分享站点
- var sites = [];
- <?php foreach($options['shareSites'] as $name => $localName) {?>
- sites.push("<?php echo $name;?>");
- <?php } ?>
4、ajax获取全部分享站点
获取json数据源,得到全部分享站点:
- //读取json
- $.getJSON("<?php echo $pluginUri.'/js/shareListData.js'?>",function(data){
- //....回调函数
- })
5、处理json数据,生成全部分享站点列表
- var _a = [];
- $.each(data,function(i){
- var _h = '<li class="l share-list-item">'+
- '<span class="share-list-icon icon-'+data[i].name+'"></span>'+
- '<div><input type="checkbox" class="share-list-checkbox" name="sites[]" value="'+data[i].name+'" localName ="'+data[i].localName+'" /> <label>'+data[i].localName+'</label></div>'+
- '</li>';
- _a.push(_h);
- });
- //将站点插入列表
- $("#sites").html(_a.join(''));
生成的结果是:

当然是多选框是没有选中的。
6、根据用户选择的分享站点数组,选中多选框
- //选中用户选择的分享站点
- $("#sites").find(".share-list-checkbox").each(function(){
- var _$this = $(this);
- $.each(sites,function(i){
- if(_$this.val() == sites[i]) _$this.attr("checked",true);
- })
- })

选择框的处理,只是js的处理,不牵涉到php,这里略过。
四、更新配置参数
1、更新分享站点参数
- if(isset($_POST['hidden-share-site-names'])){
- $names = explode(',',$_POST['hidden-share-site-names']);
- $localNames = explode(',',$_POST['hidden-share-site-localNames']);
- $shareSites = array();
- for($i = 0;$i<count($names);$i++){
- $shareSites[$names[$i]] = $localNames[$i];
- }
- $options['shareSites'] = $shareSites;
- }
- $names = explode(',',$_POST['hidden-share-site-names']);
hidden-share-site-names是表单中的隐藏域,存储着用户选择的分享站点(只有name值),这里将其转成php数组。
- $localNames = explode(',',$_POST['hidden-share-site-localNames']);
同样我们将中文名转成php数组。
接下来我们需要localNames和name值合并成一个数组,最后才是站点配置:
- $shareSites = array();
- for($i = 0;$i<count($names);$i++){
- $shareSites[$names[$i]] = $localNames[$i];
- }
- $options['shareSites'] = $shareSites;
这是唯一的难点,接下来其他配置参数的处理就非常简单,类似:
- //引入jquery
- if(isset($_POST['addJquery'])){
- $options['addJquery'] = $_POST['addJquery'];
- }else{
- $options['addJquery'] = 'false';
- }
更新配置:
- update_option($this->adminOptionsName,$options);
配置成功了,我们需要输出一行提示:
- echo '<div style="margin:100px auto;font-size:14px;width:350px;padding:20px;border:2px dashed #E3E3E3;background-color:#ffffff;text-align:center;">配置更新成功!<a href="'.$pluPageUrl.'">点此返回配置页面</a></div>';
完成的插件页面如下:

至此这个插件就构建完毕,其实管理页面的构建主要还是html和javascript的知识,只要懂得获取wordpress的插件参数和更新插件参数即可。
明河这个插件的管理页面难点在于对分享站点的控制,由于要实现对分享站点的全面控制,所以需要不少量的js,这部分与wordpress无关,看不下去也没事,只要你能通过这个系列的教程,能够对wordpress的插件机制有个大概的理解,明河就算没白写这个系列的文章。
如果你遇到什么问题,可以给明河留言,谢谢。

终于出来完结篇了,很有收获
@银月闪舞, 我太菜了,看不懂
不是你太菜了,是写的这个插件管理页面代码太多了,其实不是很适合做教程讲解。
@灵亦rEd,文章太长,要耐心看,呵呵
准备断网半个月了,挂科就猥琐了
…..没事,不是可以补考,哈。
呵呵,看完了,整个看下来对对wp的插件机制也算是有了一个定的了解了,谢谢博主的分享。
今天就先浏览博主的文章在这里了,改天再来学习,看球了,嘿嘿
博主的這個插件超棒,但是在底色不是白色的情況下會出現效果不佳的問題,不知是否有辦法改進,還是只能改底色呢?
恩,你要手动修改下底色,在样式表里面修改。我之所以加上底色是因为IE7、IE8在改变图标透明度的时候,会出现黑色border的bug。
点开插件的“style/shareList.css”,找到.share-list-icon-shadow下的background:#FAFDEF;改成你主题的底色
太喜歡博主這個插件了,可是我用的是Arjuna X主題,是灰色的底色。不知道是什麽原因,顯示出來的效果是那些圖標倒沒什麽問題,只是那個陰影的層變得是俯視的平面效果了,疊在圖標的下面,成不了立體的陰影效果,不知博主有沒有解決的辦法,還是因為那個主題不支持呢?感謝!
跟你主题没什么关系,跟阴影底色有关系,你点开插件的“style/shareList.css”,找到.share-list-icon-shadow下的background:#FAFDEF;改成灰色
真不知道该说什么了,老大你太强大了,为你的分享精神感到自豪。还有你的耐心回复!
剑灵这句话让我备感欣慰,哈支持我,帮我点个广告,呵呵。
强人分享!我的分享插件,有些没有
很好很强大,谢谢分享。