菜单

WordPress插件制作

2010年07月29日 - wordpress

前言

最近在学习如何制作WordPress插件。在这方面,网上的资料还是不多的。我是指适合入门的资料。今天又在网上搜索了一下,发现了几篇非常不错的制作WordPress插件的教程。

现在把这几篇文章整理放在一起,以方便大家学习。

下面两篇是Kangzj的作品,翻译自WordPress的原文档(Writing a Plugin)。非常不错。原文

WordPress插件制作入门教程(一)

1. 简介

WordPress插件使得WordPress变得扩展性强、易修改和个性化。不用修改WordPress的核心,你只要简单的加几个插件,很多功能就能够轻松实现。下面给出WordPress插件的定义:

WordPress插件:它是用PHP编写的一个程序或一个或者几个函数的组合,它利用WordPress提供的API和WordPress本身的一些调用点,给WordPress增加新的功能或者特性。

希望WordPress有新功能的或者想修改一下功它的某个功能?你所要做的第一件事就是从WordPress大量的插件中寻找,有没有人已经制作过这样的插件,如果有,直接用就好了。如果没有,这篇文章可以指导你做你自己的WordPress插件。

这篇文章假设你对WordPress的工作方式和PHP编程比较了解了。

2. 创建一个新的插件

这一部分会把插件制作的步骤都涉及到了,你只要跟着做就好了,同时也告诉你创建一个新的插件时应该考虑的东西。

2.1 插件名、文件和文件存放的位置

2.1.1 插件名

做插件的第一步当然是考虑清楚你的插件的功能,给你的插件起个名字。到WordPress官方网站和其它资源查找下有没有相同的名字,当然你也可以 Google一下,以保证你的插件的名字是唯一的。很多插件的开发者以插件的功能给插件命名。比如说,一个跟“天气”相关的插件很有可能起一个含 有”Weather”的名字。名字可由多个单词组成。

2.2.2 插件的文件

下一步就是创建插件的PHP文件。例如,你的插件名字是“Fabulous Functionality”,你可以给你的PHP文件起一个名字“fabfunc.php”。和插件的名字一个道理,这个PHP文件也要起一个唯一的名 字。用你插件的人会把你的文件放到plugin目录里,也就是/wp-content/plugins/,所以任何两个插件的PHP文件都不能有相同的名 字,否则会引起冲突和误会。

上面是你的插件只有一个文件的情况。你也可以把你的PHP文件拆分成多个文件。你的WordPress插件应该至少含有一个PHP文件,也可以有 JavaScript,Css,图像,语言等文件。如果有多个文件,就把他们全都放到一个目录下面,这个目录的名字也要是唯一的。告诉你的插件的使用者, 把整个文件夹上传到/wp-content/plugins/就可以了。

下面所提到的“插件的PHP文件”是指插件的主要的PHP文件,有可能在/wp-content/plugins/中,也有可以在这里面的一个子目录中。

2.2.3 Readme文件

如果你想把你的插件上传到http://wordpress.org/extend/plugins/中,你应该按标准的格式创建一个Readme文件,放到你的插件文件中。这里介绍Readme文件的格式:http://wordpress.org/extend/plugins/about/readme.txt

2.2 插件主页

为你的插件创建一个主页是很有用处的,你可以在这个主页上介绍如何安装你的插件,插件的功能,插件兼容的WordPress的版本,插件不同版本之间功能的变化,怎么使用插件等等。

2.3 PHP文件的文件头信息

现在到了写点东西到你插件的PHP文件中的时候了。

2.3.1 标准的插件信息头

你插件的主要的PHP文件的头部,必须写上标准的插件信息。这个插件信息头让WordPress找到你的插件,并把你的插件加入到插件管理中去,这样这个插件才能被激活、加载和运行。没有这个插件信息头,你的插件就不会被识别,也完全不会起任何作用。下面是插件信息头的格式:

<?php
/*
Plugin Name: Name Of The Plugin
Plugin URI: http://URI_Of_Page_Describing_Plugin_and_Updates
Description: A brief description of the Plugin.
Version: The Plugin's Version Number, e.g.: 1.0
Author: Name Of The Plugin Author
Author URI: http://URI_Of_The_Plugin_Author
*/
?>

这些信息中,如果不写“Plugin Name”WordPress就无法识别插件。其它的几项信息在插件管理的页面会有显示。信息的顺序是没有要求的。

2.3.2 授权信息

通常大家就直接用标准的授权信息当作自己的授权信息。很多的插件用得就是GPL。加入下面的文字,可以简要的说明GPL:

<?php
/*  Copyright YEAR  PLUGIN_AUTHOR_NAME  (email : PLUGIN AUTHOR EMAIL)

    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
*/
?>

WordPress插件制作入门教程(二)

3. 开始编程实现你的插件

上面把流程交待得很清楚了,下面该让你的插件做点事情了。这一部分包含一些插件开发的基本的原则,教给你如何让你的插件完成几个不同的任务。

3.1 WordPress插件钩子

很多插件通过连接一个或多个WordPress钩子来完成自己的功能。插件钩子工作的原理是,在WordPress运行的某些时刻,它会去检查是不是有插件注册了函数,如果有的话,就会运行这个插件的函数。这些函数改变了WordPress默认的功能。

比如说,在WordPress输出页面的title之前,它会先检查一个是不是有插件注册了“the_title”的“filter”钩子。如果有的话,title的文本就会通过一个个的函数处理,最后再输出结果。所以,如果你的插件想改变title的话,注册一个“the_title”的filter钩子就可以了。

另外一种是“action”钩子,比如“wp_footer”。在HTML页面快要执行完的时候它会检查是不是有插件注册了“wp_footer”的“action”钩子,如果有的话,就一个一个地执行。

你可以在Plugin API中找到更多的这种“filter”和“action”类型的钩子。如果你想在WordPress中的某一部分使用钩子,你也可以向开发者建议添加一个这样的钩子。

3.2 模板标记

另外一种利用插件增强WordPress功能的方式是创建模板标记。使用你插件的人可以把这些标记加入到WordPress的模板里,可能放在 sidebar等合适的地方。比如,一个地理位置的插件,定义一个放在sidebar里的geotag_list_states(),可以列所有这篇文章 相关的“州”,点击这些“州”的时候,所有相关的文章会被列出来。

要定义一个模板标记,只要写一个PHP函数和文档,然后放在插件的主PHP文件中或者你插件的主页上举例一个例子说明应该往模板里加什么东西,怎样加,并在代码前后加上<?php  ?>。

3.3 把插件的数据保存到数据库

大部分的WordPress插件需要保存一些数据,这些数据可以保存在WordPress的数据库里,这里有两种基本的、把插件数据保存到WordPress数据库的方法:

1.用WordPress的“option”机制(下面会详述)。这种方法可以保存较少量的、分散的数据,是那种一开始让用户输入的选项形式的,以后基本不会变的数据。

2. Post Meta。对和单独文章、页面、附件相关的数据比较合适。可以查看:post_meta函数示例

3. 新建一个数据表。这种方式适用于那些和文章、页面、评论等相关的数据,它们会随时间推移而增长。可以看一下这里“用插件创制数据表”。

3.4 WordPress的option机制

点击这里可查看怎么创建可以自动地帮助你把插件的配制信息保存的插件管理面板

WordPress有一套在数据库中保存、更改、读取独立的、有名字的数据(”options”)的机制。option的值可以是string, array或者php对象(在存储前会被序列化,或者转化成string)。option的名字是string类型,必须唯一,这样才能不和其它的WordPress插件冲突。

下面是你的插件调用WordPress需要用到了的主要的函数:

add_option($name, $value, $deprecated, $autoload);

$name和$value当然就是你的option的名字和值啦;

$deprecated可选,WordPress已经不用了,可以传一个空值。

$autoload也是可选(’yes’  or ”),默认为yes,即会被get_alloptions函数自动加载。

get_option($option);

从数据库中读取$option的值。

update_option($option_name, $newvalue);

这个就不用解释了。

3.5 插件设置页面

这部分将在以后文章中详述。

4. 国际化你的插件

做好了你的插件之后,你就可以考虑国际化了,让更多的人可以使用这个插件。在软件安装中,这叫做本地化,也就是把软件中使用的语言翻译成不同的语言。这里有相关的内容:I18n for WordPress Developers

5. 插件开发建议

  1. WordPress的插件应该遵循“WordPress Coding Stardards”。也要考虑程序中的注释的标准。
  2. 你插件中的函数名不能和WordPress核心的函数或者其它WordPress插件的函数有重名。可以通过给你的函数加一个前缀,也可以在类中定义你的函数来解决这个问题。
  3. 代码中不要把WordPress前缀写死成“wp_”,要写成$wpdb->prefix。
  4. 读数据库成本低,但是写却很高。所以尽量减少向数据写东西的次数。
  5. 只“Select”你需要的字段。不要用“Select *”这样的语句,不要让你的插件把整个WordPress拖慢。
  6. 把你插件中所有的错误修正,把PHP的Debug打开,在wp_config.php中添加define('WP_DEBUG', true),找出所有的error和warning,并修改之。

注:下面这篇文章是转自ABitNo,原文(ABitNo也会写WordPress插件了)。以一个实例讲解了创建插件的简单步骤。

WordPress插件制作入门教程(三),简单实例分析

一个Plugin首先要有好的目录结构,然后还要有好的代码组织方式。下面就按照那个教程中给的方式写一个简单的毫无用处的插件,插件的效果就是在head中加一个注释

<!--ABitNo is here ! -->

Devlounge推荐一个简单插件的主文件分成四块来写

Step 1:定义插件的信息

/*
 * Plugin Name: ABitNo IN Head
 * Plugin URI: http://abitno.linpie.com/abitno-wordpress-plugin.html
 * Version: 0.1
 * Author: Cedirc Fung
 * Description: Put annotation 'ABitNo is here' to the header
 */

Step 2:创造一个Class和相关的function

if(!class_exists('AbitnoInHead')) {
    class AbitnoInHead {
        function abitno_in_head() {
            echo('<!-- ABitNo is here ! -->');
        }
    }
}

Step 3:实例化创建的Class

if( class_exists('AbitnoInHead') ) {
    $abitno_head = new AbitnoInHead();
}

Step 4:添加Action和Filter

if(isset ($abitno_head)){
    add_action('wp_head', array(&$abitno_head, 'abitno_in_head'), 1);
}

这样一个插件就完成了,把这些代码组合到一个PHP文件,比如abitno-in-header.php中,然后放到WordPress的 plugins目录内,到后台激活就能生效了。用查看源码功能可以在Blog的<head>和</head>之间的某个地方发现 有个<!– ABitNo is here ! –>

这只是一个小小的演示,至于有些什么Action和Filter还是要看API的。。。

注:下面这篇文章转自:Dissect WordPress Plugin 2

WordPress插件制作入门教程(四),添加菜单

以WordPress FeedBurner Plugin中添加菜单为例:

如果想添加一个菜单,就需要注册“admin_menu”这个Action Tag(系统事件):

    <?php add_action('admin_menu', 'ol_add_feedburner_options_page'); ?>

即可,插件中的这个函数为:

<?php function ol_add_feedburner_options_page() {
if (function_exists(‘add_options_page’)) {
add_options_page(‘FeedBurner’, ‘FeedBurner’, 8, basename(__FILE__), ‘ol_feedburner_options_subpanel’);
}<br>}
?>

“add_options_page”这个函数就会在系统的“Options”菜单中添加“FeedBurner”这样一个子菜单。

WordPress插件制作入门教程(五),常用函数学习

WordPress官方的函数列表:http://codex.wordpress.org/Function_Reference

WordPress啦上的教程(中文版):

插件及插件开发资源

~完~

发表评论

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