wordpress主题制作中对边栏的处理一直是我们比较烦恼的,我们希望边栏的变化更多更复杂,今天我们就来具体讲解下wordpress边栏小工具的制作。

一、让你的主题显示小工具

有些相当简单的主题你会发现后台小工具功能竟然没有打开,边栏自然无法自己定义了。那么怎么让自己的主题支持小工具功能,前台又如何调用后台拖拽的小工具呢?如何让你的小工具多几个,可以自由安排小工具的位置呢?

1、让你的主题支持小工具功能

在新制作的主题文件functions.php中加入下面这段代码(注意,下文的代码均加入到该文件中,后文不提):

if(function_exists('register_sidebar')){
register_sidebar(array(
'name'=>'首页边栏',
'id' => 'home-sidebar',
'description' => '',
'before_widget' => '<div id="%1$s">',
'after_widget' => '<div></div></div>',
'before_title' => '<div><h3>',
'after_title' => '</h3></div>',
));
}

这样,你进入后台小工具页面的时候就会看到一个名称叫“首页边栏”的小工具挂件区,在这个区域内你可以放置多个小工具,同时在前台可以调用这个小工具区。(说明:前台调用的只能是工具区,而不是某个特定的小工具。)

这些字段我想你应该很容易从其英文名称中得知其用途,name指小工具挂件区的名称,id是等下在前台调用时要用到的挂件区标志,description是该挂件区的描述,后台中可以看到。before_widget/after_widget是前台显示每个小工具时放置在每一个小工具前后的html代码,before_title/after_title则是小工具标题前后的html代码。

到这里,在后台拖拽几个小工具到这个挂件区吧。

2、前台把小工具显示出来

我们用下面的代码再前台调用后台设置好的挂件区:

<?php if(is_active_sidebar('home-sidebar'))dynamic_sidebar('home-sidebar'); ?>

前文已经说到,我们将前文定义的挂件区id作为参数给dynamic_sidebar(),如果在前面你定义了多个id不同的挂件区,那么可以在前台修改这些参数,从而调用不同的挂件区,例如在首页调用id=home-sidebar的挂件区,在内容页调用id=post-sidebar挂件区。当然,为了让主题更完整,你应该考虑当挂件区没有放小工具的时候的情况,只需要加入else的情况即可。

通过上文,你的主题已经可以很完美的实现挂件的调用、显示,在不同的位置,不同的页面显示不同的挂件了。

二、自己制作一个小工具实现特定用途

wordpress默认的小工具虽然已经够用,但我们还是希望能增加一些新的小工具,例如调用随机文章的小工具,让我可以在首页边栏中间位置显示出来。虽然我们很多主题将自己编制的函数放置到主题文件中,但这样会使该区域的内容固定,不能让这个随机文章区域实现自我安排,还是不爽的,因此我们进行下面的工作,让我的随机文章功能成为一个小工具,可以在后台拖拽放置到特定位置。下文以我制作一个带头像评论列表为例,但中间缺失了文章数等,这部分请参看这篇文章。

1、所有代码提前一览

我们将所有代码先列出来,放置到functions.php中,读者可以在读代码过程中自然领会怎么设计自己的小工具。

//添加最新评论小工具,需要插件wp-recentcomments支持,显示的内容在插件设置中设置,下面的函数只负责将评论插件转化为挂件,可以在小工具中自由放置
class RecentCommentsWidget extends WP_Widget
{
/*
** 构造函数
** 声明一个数组$widget_ops,用来保存类名和描述,以便在控制面板正确显示工具信息
** $control_ops 是可选参数,用来定义小工具在控制面板显示的宽度和高度
** 最后是关键的一步,调用WP_Widget来初始化我们的小工具
*/
function RecentCommentsWidget(){
$widget_ops = array('classname'=>'recent-comments','description'=>'显示带头像评论列表');
$control_ops = array('width'=>250,'height'=>300);
$this->WP_Widget(false,'最新评论',$widget_ops,$control_ops);
}

function form($instance){
$instance = wp_parse_args((array)$instance,array('title'=>'最新评论'));
$title = htmlspecialchars($instance['title']);
echo '<p style="text-align:left;"><label for="'.$this->get_field_name('title').'">标题:<input style="width:200px;" id="'.$this->get_field_id('title').'" name="'.$this->get_field_name('title').'" type="text" value="'.$title.'" /></label></p>';
echo '<p>最新评论小工具,需要插件wp-recentcomments支持,显示的内容在插件设置中设置,下面的函数只负责将评论插件转化为挂件,可以在小工具中自由放置</p>';
}

function update($new_instance,$old_instance){
$instance = $old_instance;
$instance['title'] = strip_tags(stripslashes($new_instance['title']));
return $instance;
}

function widget($args,$instance){
extract($args);
$title = apply_filters('widget_title',empty($instance['title']) ? '&nbsp;' : $instance['title']);
echo $before_widget;
echo $before_title . $title . $after_title;
?>
<div><?php wp_recentcomments(); ?></div>
<?php
echo $after_widget;
}
}//评论列表小工具类结束
function RecentCommentsInit(){
register_widget('RecentCommentsWidget');
}
add_action('widgets_init','RecentCommentsInit');
//评论列表小工具结束

从上面的代码中你大致能分析出小工具制作的所有要素,接下来详细讲解下。(上面的这个挂件需要你安装插件wp-recentcomments,你将<div><?php wp_recentcomments(); ?></div>修改为你自己的内容,则前台显示为你修改的内容。)

2、构造小工具

构造一个小工具用到上面的类构造class RecentCommentsWidget extends WP_Widget{},类名可自定。

在该类中,总共有4个函数:RecentCommentsWidget()、form($instance)、update($new_instance,$old_instance)、widget($args,$instance)。

RecentCommentsWidget()

函数名可自定义,是用以对该小工具的名称、样式、描述进行定义的。如我的这个小工具名称“最新评论”描述“显示带头像评论列表”。你只需将这些抄过去即可,修改名称和描述。

form($instance)

在后台将该小工具拖拽到挂件区展开后你会看到该函数中规定的内容。我的这个小工具只是显示一个标题设置框和一段文字。

$instance = wp_parse_args((array)$instance,array('title'=>'随机文章','showPosts'=>10,'cat'=>0,'class'=>'randomPosts'));
$title = htmlspecialchars($instance['title']);
$showPosts = htmlspecialchars($instance['showPosts']);
$cat = htmlspecialchars($instance['cat']);
$class = htmlspecialchars($instance['class']);

如上,可以增加标题、显示数量、显示那些分类下的、显示的时候用什么样式名这些文本框,当然你可以增加自己的内容。总之你要理解这个函数是后台小工具展开时看到的内容即可。

update($new_instance,$old_instance)

更新form()设置的参数值,小工具展开后右下角有个保存按钮,就是用这个函数进行保存啦。照葫芦画瓢修改该函数吧。

widget($args,$instance)

前台显示,前台怎么显示form()中设置的这些值呢?就是用这个函数来控制啦。照葫芦画瓢,修改那几个echo 的内容就可以了,甚至你可以让一个小工具显示一句话,在这里自己编写就可以了。

3、注册小工具,最终完成小工具制作

虽然上面的过程让你已经了解小工具的前后台,但你会发现即使这样做了却得不到任何效果,因为你的小工具还没有注册呢。

function RecentCommentsInit(){
register_widget('RecentCommentsWidget');
}
add_action('widgets_init','RecentCommentsInit');

修改上面这几个参数为你自己的类和函数名,赶快到后台看看吧,是不是已经显示了该小工具,并可以拖拽了?自己慢慢消化,可以制作自己完美的边栏挂件啦。

转wordpress小工具制作前台后台全解析相关推荐

  1. python入门学习小工具制作系列各种小工具整理

    一.制作基于windows系统批量重命名文件小工具 参考博客: 使用python做一个批量重命名文件的小工具_讷言丶的博客-CSDN博客 效果展示: 临时01 代码实现: import os from ...

  2. 如何利用系统自带的小工具制作特殊字符

    Windows7自带的小工具很多,但是我们不经常用到,甚至不知道有这么一款软件.今天,就跟大家推荐一款很实用的字符编辑软件,能够很好的组合出极富有个性的字. 操作步骤 1打开Windows7自带的字符 ...

  3. wordpress小工具自定义Html,WordPress添加自定义小工具

    最近给博客添加了一个显示作者信息的小工具,网上也有很多关于边栏显示作者信息的实现方式,但是大多都需要我们再修改代码中的一些信息,很是麻烦,于是自己借鉴了很多网上的代码并优化成了目前我所使用的这款显示作 ...

  4. 微信小程序调用php,微信小程序调用PHP后台接口 解析纯html文本

    微信小程序调用php后台接口,解析纯html文本,效果图片预览 1.微信js动态传参: wx.request({ url: 'https://m.****.com/index.php/home/xia ...

  5. python入门学习之小工具制作系列--01使用tkinter库封装(人生重开模拟器)小游戏

    一.制作背景: 过年浏览csdn博文时,有看到其他博主的一篇人生重开模拟器的小游戏,将代码拷贝运行后看效果很好,非常有趣.于是就学习使用tkinter库将源代码封装,使其可以成为应用小游戏. 二.人生 ...

  6. 想偷窥我 Windows 的隐私?呵呵了~ WPD 这款小工具能把漏洞全封死!

    大家在安装好 Windows 10 之后,一般都只是使用它的默认设置.但是,Win 系统里有很多默认设定对用户其实并不特别"有利",甚至一不小心还会有泄漏个人隐私的可能. 这些设置 ...

  7. python入门学习之小工具制作系列--02使用tkinter库写一个BMI身体指数检测小程序

    一.小程序检测功能逻辑 即通过输入身高.体重两个数据即可计算自己的BMI身体指数是多少,且对身体状况做相应提醒. 二.小程序使用体验 1,弹出主界面,输入身高,体重数据~ 2,点击计算,输出BMI数据 ...

  8. 小程序如何调用php程序,微信小程序调用PHP后台接口 解析纯html文本

    搜索热词 1.微信js动态传参: PHP/Home/Xiaoxxf/activity_detail?a_id='+options.id,//含富文本html data: { is_detail:1 } ...

  9. WordPress标签云小工具详解

    WordPress标签云小工具是WordPress程序自带的一个小工具,它可以在我们的博客侧边栏展示网站的标签列表.今天WordPress小工具详解系列就从WordPress标签云小工具开始.带大家熟 ...

最新文章

  1. Nat. Mach. Intell. | 基于深度强化学习寻找网络中的关键节点
  2. TensorFlow实战笔记(17)---TFlearn
  3. st2045 漏洞反弹root shell
  4. python中df head_10招!看骨灰级Pythoner如何玩转Python
  5. matlab相关系数影像匹配_双目立体匹配步骤详解
  6. Uipath控件找不到怎么办
  7. flask的上下文的机理与应用(转载+整理)
  8. 一文梳理JavaScript中常见的七大继承方案
  9. 面向工业场景,如何实现绿色智能?
  10. 医疗行业的售前工程师如何撰写人工智能案例申请材料
  11. java list_java中的list集合
  12. VC++字符串类型转换
  13. 已知两点和弧长lisp_CAD插件——已知两点和弧长如何画圆弧?
  14. 在个人博客网站上添加QQ邮箱的邮我功能
  15. 全球诺贝尔奖得主最多的30所大学排名
  16. 快排及时间复杂度简单证明
  17. 鹏哥手把手带我刷好题 · 编程练习 · II
  18. Mindmanager 安装过程中 ERROR 1320. The specified path is too long (文件路径) 等问题
  19. AtCoder Beginner Contest 214(补题)
  20. Win10重装的方法?一键重装Win10的图文版教程

热门文章

  1. java---switch
  2. 页面引用CSS和Javascript时,内联和外置的区别
  3. 各国家分析之- 阿根廷与乌拉圭
  4. 当年张一鸣找我一起创业,我没去
  5. 产品经理跳槽面试大揭秘……
  6. 如何从零规划一个产品?
  7. 全球最高龄男性去世享年113岁 生前喜欢泡温泉(图)
  8. Spring Cloud中Feign如何统一设置验证token
  9. is_numeric函数的引起的一个BUG说起
  10. 在使用flask下载文件时会出现的一个文件下载不到的问题