WordPress插件开发详细介绍

文章目录

wordpress要想玩得好,需要过两大关:一是制作wordpress主题,二是制作wordpress插件。wordpress主题现在稍微知道怎么做了,但是wordpress插件还不是很了解,今天就结合wordpress文章目录这个功能来制作一个插件,本文将会详细的给出流程。

制作插件基础知识

制作wordpress插件最核心的是两个函数:

1
2
add_action ($hookname, $callbackfunction)
add_filter ($hookname,$callbackfunction)

关于这两个介绍,大家可以看以下两篇文章:
add_action()使用与解析
add_filter()使用与解析

制作插件过程

1、首先新建一个php文件,我把它命名为:content_index.php
首先要填写插件概要信息

1
2
3
4
5
6
7
8
9
10
11
<?php  
/*
Plugin Name: content_index 
Plugin URI: http://www.tennfy.com  
Description: 显示文章目录 
Version: 1.0  
Author: tennfy  
Author URI: http://www.tennfy.com/  
License: GPL  
*/ 
?>

2、接下来就是实现插件功能

其实我觉得写在插件里的功能就是相当于写在functions.php中,因此,我们完全可以把wordpress文章目录里的php代码放到content-index.php中。这里我们用到了add_filter()函数,用来过滤输出文章内容。

3、插件后台界面
事实上这个插件并不太需要后台界面,直接启用就好了,不过为了说明如何设计后台界面,我把标题的字号设置为可自定义,如h2,h3等。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php  
/* 注册激活插件时要调用的函数 */ 
register_activation_hook(__FILE__,'ci_install');   
 
/* 注册停用插件时要调用的函数 */ 
register_deactivation_hook( __FILE__, 'ci_remove' );  
 
function ci_install() {  
    /* 在数据库的 wp_options 表中添加一条记录,第二个参数为默认值 */ 
   update_option(ci_fontsize, "h2");  
 }
function ci_remove() {  
    /* 删除 wp_options 表中的对应记录 */ 
    delete_option('ci_fontsize');  
}  
?>

以上代码自己要是在启用插件时和停用插件时调用,注释中已经写得很详细了。

添加菜单和页面的代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php  
/* 判断是否在 WordPress 后台 */ 
if( is_admin() ) {  
    /*  利用 admin_menu 钩子,添加菜单 */ 
    add_action('admin_menu', 'ci_menu');  
}  
 
function ci_menu() {  
    /* add_options_page( $page_title, $menu_title, $capability, $menu_slug, $function);  */ 
    /* 页名称,菜单名称,访问级别,菜单别名,点击该菜单时的回调函数(用以显示设置页面) */ 
    add_options_page('文章目录设置页面', '文章目录设置菜单', 'administrator','content_index', 'ci_html_page');  
}  
?>

接下来添加显示设置页面的html代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?php  
function ci_html_page() {  
?>  
    <div>  
        <h2>文章目录设置</h2>  
        <form method="post">  
            <?php /* 下面这行代码用来保存表单中内容到数据库 */ 
            if ( 'save' == $_REQUEST['action'] ) 
            update_option( ci_fontsize, $_REQUEST['ci_fontsize'] );
            ?>  
            <p>  
                <textarea>  
                    name="ci_fontsize" 
                    id="ci_fontsize" 
                    cols="40" 
                    rows="6"><?php echo get_option('ci_fontsize'); ?></textarea>  
            </p>  
 
            <p>  
                <input type="submit" name="action" value="save" class="button-primary" />  
            </p>  
        </form>  
    </div>  
<?php  
}  
?>

为了方便后台选项能够控制插件,我们需要对文章目录php代码做一些改动。

1
$r = "/<h3>([^<]+)<\/h3>/im";

修改为

1
$r = "/<".get_option('ci_fontsize').">([^<]+)<\/".get_option('ci_fontsize').">/im";

1
$content = str_replace($matches[0][$num], '<h3 id="title-'.$num.'">'.$title.'</h3>', $content);

修改为

1
$content = str_replace($matches[0][$num], '<'.get_option('ci_fontsize').' id="title-'.$num.'">'.$title.'</'.get_option('ci_fontsize').'>', $content);

这样就ok了。

插件上传设置

插件一般都以文件夹的形式存在,我们上传插件之前需要新建一个文件夹,文件夹的名字命名为:content_index。

文件夹中包含两部分:插件功能实现的php文件及readme.txt文件。

这里的 readme.txt 文件中包含了一些插件的介绍,使用说明等信息,主要是提交到 WordPress 官方网站时候用到的,可以参考他们给的模板 http://wordpress.org/extend/plugins/about/readme.txt,另外还有插件截图预览的功能,需要另外添加图片,但是我们现在是练习,不需要提交到官网,所以暂时先不涉及这些。

content-index

将插件上传至 wp-content\plugins 目录下即可。

插件全部代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
<?php  
/*
Plugin Name: content_index 
Plugin URI: http://www.tennfy.com  
Description: 显示文章目录 
Version: 1.0  
Author: tennfy  
Author URI: http://www.tennfy.com/  
License: GPL  
*/ 
/* 注册激活插件时要调用的函数 */ 
register_activation_hook(__FILE__,'ci_install');   
 
/* 注册停用插件时要调用的函数 */ 
register_deactivation_hook( __FILE__, 'ci_remove' );  
 
function ci_install() {  
    /* 在数据库的 wp_options 表中添加一条记录,第二个参数为默认值 */ 
    update_option(ci_fontsize, "h2");  
 }
function ci_remove() {  
    /* 删除 wp_options 表中的对应记录 */ 
    delete_option('ci_fontsize');  
}  
/* 判断是否在 WordPress 后台 */ 
if( is_admin() ) {  
    /*  利用 admin_menu 钩子,添加菜单 */ 
    add_action('admin_menu', 'ci_menu');  
}  
 
function ci_menu() {  
    /* add_options_page( $page_title, $menu_title, $capability, $menu_slug, $function);  */ 
    /* 页名称,菜单名称,访问级别,菜单别名,点击该菜单时的回调函数(用以显示设置页面) */ 
    add_options_page('文章目录设置页面', '文章目录设置菜单', 'administrator','content_index', 'ci_html_page');  
} 
function ci_html_page() {  
?>  
    <div>  
        <h2>文章目录设置</h2>  
        <form method="post">  
            <?php /* 下面这行代码用来保存表单中内容到数据库 */ 
            if ( 'save' == $_REQUEST['action'] ) 
            update_option( ci_fontsize, $_REQUEST['ci_fontsize'] );
            ?>  
            <p>  
                <textarea>  
                    name="ci_fontsize" 
                    id="ci_fontsize" 
                    cols="40" 
                    rows="6"><?php echo get_option('ci_fontsize'); ?></textarea>  
            </p>  
 
            <p>  
                <input type="submit" name="action" value="save" class="button-primary" />  
            </p>  
        </form>  
    </div>  
<?php  
} 
?>  
<style type="text/css">
#article-index {
    -moz-border-radius: 6px 6px 6px 6px;
    border: 1px solid #DEDFE1;
    float: right;
    margin: 0 0 15px 15px;
    padding: 0 6px;
    width: 200px;
    line-height: 23px;
}
#article-index strong {
    border-bottom: 1px dashed #DDDDDD;
    display: block;
    line-height: 30px;
    padding: 0 4px;
}
#index-ul {
    margin: 0;
    padding-bottom: 10px;
}
#index-ul li {
    background: none repeat scroll 0 0 transparent;
    list-style-type: disc;
    padding: 0;
    margin-left: 20px;
}
</style>
<?php 
function article_index($content) {
    $matches = array();
    $ul_li = '';
 
    $r = "/<".get_option('ci_fontsize').">([^<]+)<\/".get_option('ci_fontsize').">/im";
 
    if(preg_match_all($r, $content, $matches)) {
        foreach($matches[1] as $num => $title) {
            $content = str_replace($matches[0][$num], '<'.get_option('ci_fontsize').' id="title-'.$num.'">'.$title.'</'.get_option('ci_fontsize').'>', $content);
            $ul_li .= '<li><a href="#title-'.$num.'" title="'.$title.'">'.$title."</a></li>\n";
        }
 
        $content = "\n<div id=\"article-index\">
                <strong>文章目录</strong>
                <ul id=\"index-ul\">\n" . $ul_li . "</ul>
            </div>\n" . $content;
    }
 
    return $content;
}
 
add_filter( 'the_content', 'article_index' );
 
?>


本文出自 TENNFY WU,转载时请注明出处及相应链接。

本文永久链接: http://www.tennfy.com/1573.html

下一篇文章:

上一篇文章:

11人参与了讨论

  1. 屠龙 说:

    写的很详细 多多学习补充

  2. 香菇肥牛 说:

    常常想着自己开发一些插件实现想要的功能,无奈编程基本功太差了,而且没时间做这些事儿哎~

  3. Faris 说:

    你准备开发插件?? :?:

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*

8 + 9 = ?


您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

返回顶部