wordpress笔记:小工具的制作方法

2018-08-06

wordpress使用侧边栏小工具,或者其它位置的小工具很是方便,但是默认的那几个小工具完全不够用,今天就讲解一下如何制作一个小工具,然后接下来的几篇教程,给出几个小工具的实例。

今天我们以制作一个按浏览量排布的热门文章小工具。

小工具有三个部分,一、后台显示,二、数据保存,三、前台显示。当然如果你的小工具不需要在后台设置什么数据,那数据保存可以省掉了。一般来讲,一个小工具至少应该有这三个部分。

第一步,在自己的主题中新建一个小工具文件,随便命名,比如我新建一个文件夹widget然后在里面新建一个文件hotposts.php。

小工具是一个类,像侧边栏一样,你还得用代码注册它,它在能在后台使用。基本代码代码基本上一成不变:

<?php   
  
//定义小工具类AlmPostViews    
class AlmPostViews extends WP_Widget{   
       
    function AlmPostViews(){   
        //这是定义小工具信息的函数,也是类的构建函数   
    }   
       
    function form($instance){   
        //这是表单函数,也就是控制后台显示的   
    }   
       
    function update($new_instance,$old_instance){   
        //这是更新数据函数,小工具如果有设置选项,就需要保存更新数据   
    }   
       
    function widget($args,$instance){   
        //这是控制小工具前台显示的函数   
    }   
  
}   
  
  
function AlmPostViews(){   
    //注册小工具   
    register_widget('AlmPostViews');   
}   
//widges_init,小工具初始化的时候执行AlmPostViews函数,   
add_action('widgets_init','AlmPostViews');   
?>  

上面代码中,三个基本函数 form、update、widget函数名是固定的,小工具一般都要有着三个函数,当然小工具还能添加一下自定义的辅助函数。

一、类的构建函数

function AlmPostViews(){   
    $widget_ops = array('classname'=>'widget_postviews','description'=>'按浏览量显示文章');   
    $this->WP_Widget(false,'热门浏览',$widget_ops);   
}  

主要就是配置小工具的基本显示参数,WP_Widget函数的参数还能添加其它的。这里先不做介绍。

二、后台表单函数form()

这个函数也很简单,输出一个表单,谁不会呢?

//参数$instance为之前保存过的数据   
function form($instance){   
    //如果之前没有数据的话,设置两个默认量   
    $instance = wp_parse_args((array)$instance,array(   
    'title'=>'热评文章','showPosts'=>10   
    ));   
           
    $title = htmlspecialchars($instance['title']);   
    $showPosts = htmlspecialchars($instance['showPosts']);   
       
    //表格布局的输出表单   
    $output = '<table>';   
    $output .= '<tr><td>标题:</td><td>';   
    $output .= '<input id="'.$this->get_field_id('title') .'" name="'.$this->get_field_name('title').'" type="text" value="'.$instance['title'].'" />';   
    $output .= '</td></tr><tr><td>文章数量:</td><td>';   
    $output .= '<input id="'.$this->get_field_id('showPosts') .'" name="'.$this->get_field_name('showPosts').'" type="text" value="'.$instance['showPosts'].'" />';   
    $output .= '</td></tr></table>';   
    echo $output;   
}  

只需要处理一下传入参数,其它的毫无压力。。图森破。

三、数据更新函数update()

这个函数也很简单,就是根据传入函数处理一下数据。

//参数$new_instance是提交的数据   
function update($new_instance,$old_instance){   
    $instance = $old_instance;   
    //数据处理   
    $instance['title'] = strip_tags(stripslashes($new_instance['title']));   
    $instance['showPosts'] = strip_tags(stripslashes($new_instance['showPosts']));   
    //返回   
    return $instance;   
}  

不解释了。。

四、前台显示函数widget()

//$args是注册侧边栏的注册的几个变量   
//$instance是小工具的设置数据   
function widget($args,$instance){   
           
    extract($args); //将数组展开   
    $title = apply_filters('widget_title',emptyempty($instance['title']) ? '&nbsp;' : $instance['title']);   
    $showPosts = emptyempty($instance['showPosts']) ? 10 : $instance['showPosts'];   
       
    echo $before_widget;   
    echo $before_title . $title . $after_title;   
    echo '<ul>';   
        $this->ashu_get_hotpost($showPosts); //使用ashu_get_hotpost函数获取文章   
    echo '</ul>';   
    echo $after_widget;   
}  

这里的几个变量$before_widget等是在我们注册侧边栏的时候顶下的,都保存在数组$args中,使用extract函数可将数组展开为几个变量。回顾一下注册侧边栏的时候:

register_sidebar(array(   
    'name'=>'首页侧边栏',   
    'id'=>'sidebar-1',   
    'before_widget' => '<div id="%1$s" class="widget %2$s">',   
    'after_widget' => '</div>',   
    'before_title' => '<h3>',   
    'after_title' => '</h3>',   
  ));  

有了这几个基本函数,即可制作一个小工具了,我们还少了一个函数,在widget函数中我调用了一个函数alm_get_hotpost来获取文章,但是这个文章没有定义,所以我们得添加上这个函数,不然就出错了。

五:获取文章函数

//$showposts参数为显示文章的数量   
function alm_get_hotpost($showposts){   
    global $wpdb;   
           
    //使用自定义sql查询语句,注意,我的文章浏览量是保存在自定义字段post_views_count中   
    $result = $wpdb->get_results("SELECT post_id,meta_key,meta_value,ID,post_title FROM $wpdb->postmeta key1 INNER JOIN $wpdb->posts key2 ON key1.post_id = key2.ID where key2.post_type='post' AND key2.post_status='publish' AND key1.meta_key='post_views_count' ORDER BY CAST(key1.meta_value AS SIGNED) DESC LIMIT 0 , $showposts");   
           
    $output = '';   
  
    foreach ($result as $post) {   
        setup_postdata($post);   
        $postid = $post->ID;   
        //计算标题长度   
        if( mb_strlen($post->post_title,"UTF-8")>18 ){   
            $title = strip_tags($post->post_title);   
            $short_title = trim(mb_substr($title ,0,14,"UTF-8"));   
            $short_title .= '...';   
        }else{   
            $short_title = $post->post_title;   
        }   
  
            $output .= '<li class=""><a href="' . get_permalink($postid) . '" title="' . $title .'">' . $short_title .'</a><br /> <span class="">'.$post->meta_value .'Views</span></li>';   
    }     
    echo $output;     
}  

一个完整的按浏览量显示的小工具代码就只做完成了。。

但是别忘了还有最后一步,,,加载这个小工具文件

在functions.php中加入代码包含这个文件即可,比如我需要加载widget/hotposts.php:

include_once(TEMPLATEPATH .'/widget/hotposts.php');