Languages: English • a Plugin 日本語 Русский • 中文(简体) • (Add your language)
WordPress 插件 允许你通过一种简单的方式来修改、定义和强化博客的功能。你可以在不修改WordPress的核心代码的情况下,通过插件来直接向WordPress中增加功能。以下是对 WordPress 插件的基本定义:
WordPress 插件:WordPress插件可以是一个程序,也可以是PHP语言编写的一个或一组函数。它可以通过插件 API提供的一系列方法和接口,来向WordPress博客中增加一些特定的功能或服务,并且让它们看上去就像是WordPress原有的功能一样。
想要为你的博客添加一些新的或者不一样的功能?你可以先去WordPress插件库搜索一下,看看是不是有人已经开发了一个符合你要求的WordPress插件。如果很不幸——没有,那么这篇文章会指导你自己开发一个。
要想读懂本文中的内容,你需要对 WordPress 的基本功能和 PHP 编程有一定的了解。
这个部分告诉你怎么把开发插件的理想变为现实。
首先你需要想好这个插件是用来做什么的,然后你就可以为它起一个独一无二的名字。如果你不确定这个名字是否被使用过,你可以通过Google或者其他的方式来搜索一下。大多数插件开发者为插件起的名字都能很直观地描述它的功能,例如,一个与天气有关的插件的名字中就应当包含“天气”两个字。插件的名字可以由多个字词组成。
下一步就是根据你插件的名字,创建一个PHP主文件。举个例子,如果插件的名字叫做 "Fabulous Functionality",那么PHP主文件的名字就可以是 "functionality.php",当然,还要注意重名的问题。因为用户在安装你的插件的时候,会默认把你的插件安装到一个叫wp-content/plugins/的目录下,如果两个插件的文件名冲突了,那就杯具了。
你的插件中至少应当包含一个PHP主文件(当然你也可以把它拆分成多个文件),还可以包含Javascript文件、CSS文件、图片文件以及语言文件等。如果你的插件中包含多个文件,你还需要建立一个文件夹,并把插件包含的所有文件放到这个文件夹中,这样你只要让其他人把整个文件夹放到wp-content/plugins/目录下就可以了。插件文件夹的名称通常和插件PHP文件的名称相同,例如PHP文件的名称叫做functionality.php的话,文件夹的名称就可以叫做functionality。
需要注意的是,由于在WordPress中可以配置wp-content/plugins/目录的位置,所以你必须使用plugin_dir_path()和plugins_url()两个函数来获取插件的路径。
查看http://codex.wordpress.org/Determining_Plugin_and_Content_Directories 以获取更多信息
如果你想将你的插件发布到http://wordpress.org/extend/plugins/, 你必须在插件包中建立一个标准格式的readme.txt文件. 文件格式参见http://wordpress.org/extend/plugins/about/readme.txt.
你可以访问http://wordpress.org/extend/plugins/about/readme.txt 查看如何去格式化自述文件,或者访问http://generatewp.com/plugin-readme/ 来使用文档自动生成器
需要注意的是,WordPress是通过自述文件来判断这个插件是处于“必要”还是“测试”状态的。
为你的插件建立一个主页会非常有用,你可以在插件的主页上对插件的功能、安装方法、使用说明、适用的WordPress版本以及插件更新信息等进行介绍。
现在开始吧,首先让我们向PHP主文件中加入一些信息
插件的主文件顶部必须包括一个标准插件信息头。WordPress通过标准信息头识别插件的存在,并把它加入到控制面板的插件管理页面,这样插件才能激活,载入插件,并运行里面的函数;如果没有信息头,插件将无法激活和使用。标准信息插件头的格式为:
<?php /* Plugin Name: 插件名称 Plugin URI: http://URI_Of_Page_Describing_Plugin_and_Updates Description: 插件的简单描述 Version: 插件版本号, 例如: 1.0 Author: 插件作者 Author URI: http://URI_Of_The_Plugin_Author作者地址 */ ?>
标准信息头至少要包括插件名称,这样WordPress才能识别你的插件。其他信息将显示在控制面板插件管理页面中。标准插件信息对各行顺序没有要求。
通常我们还要在标准信息头中加入插件的许可证信息。大多数插件使用GPL或GPLCompatibleLicenses许可。如果使用GPL许可,要求插件中包含以下信息:
<?php /* Copyright 年份 作者名 (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中,“插件钩子”是一个非常重要的概念。许多WordPress插件都是通过与插件钩子相关联的方式,来完成他们的功能的。插件钩子的工作原理是:在WordPress运行期间,有许多特定的时间点,WordPress会在这些时间点检测相应的插件钩子,如果检测到有函数与当前的插件钩子相关联的话,就会运行这些函数。正是这些函数改变了WordPress的默认功能。
例如,当WordPress在发表一篇文章之前,会首先检测一个名为"the_title"的插件钩子(过滤器类型的钩子),如果此时有任何插件的函数与这个钩子相关联的话,那么文章的标题就会首先被这些函数依次进行处理,最后再把函数处理的结果显示到屏幕上。所以,如果你的插件想要对文章的标题进行处理的话,就需要将对应的处理函数注册到名为"the_title"的过滤器钩子上。
再举个例子,在WordPress即将生成</HTML>标签之前,会检测一个名为"wp_footer"的插件钩子(动作类型的钩子),如果此时有插件的函数与这个钩子相关联的话,那么WordPress就会先依次执行这些函数,然后再继续生成</HTML>标签。
如果想要了解动作类型钩子和过滤器钩子的区别、如何向钩子上注册函数,以及WordPress在什么时间点会调用哪些插件钩子,你可以参阅Plugin API。如果您发现了一个想要对其进行处理的时间点,但是WordPress并未对这个时间点提供插件钩子的话,您也可以通过Reporting Bugs向我们提出建议,您的建议通常都会被我们采纳。
另一个向WordPress中加入插件的方式就是建立自定义的模板标签Template Tags。这样如果有人想要使用你的插件,就可以把这些标签添加到他们的主题、侧边栏、文章内容以及任何合适的地方。例如,可以为插件定义一个名为geotag_list_states()的模板标签函数,该函数可以为侧边栏的文章添加地理位置标签,当点击这个标签时,还可以打开这个地理位置标签下所有对应的文章。
要定义一个自定义模板标签,你只需要写一个PHP函数,然后把它通过文档、插件的主页或是在PHP主文件中声明的方式告诉插件的使用者就可以了。当你为这个函数编写文档的时候,如果还能够提供一个该函数的使用示例,来告诉用户在主题中应当如何调用这个函数,就再好不过了。
大多数WordPress插件都需要获取管理员或用户输入的一些信息,并保存在会话中,以便在过滤器函数(filter)、动作函数(action)和模板函数(template)中使用。若需要在下次会话中继续使用这些信息,就必须将它们保存到WordPress数据库中。以下是将插件数据保存到数据库的4种方法:
1. 使用WordPress的"选项"机制(稍后会有介绍)。这种方式适合储存少量静态的、具有特定名称的数据——这类数据通常是网站所有者在创建插件时设置的一些初始化参数,并且以后很少会进行改动。
2、使用文章元数据(又名自定义域)。这种方式适合保存与个人文章、页面或附件相关的数据。若需要了解更多,请参阅post_meta函数示例,以及与add_post_meta()相关的函数。
3、使用自定义分类。这种方式适合保存那些需要分门别类存放的数据,如用户信息、评论内容以及用户可编辑的数据等,特别适合于当你想要根据某个类型去查看相关的文章和数据的情况。若需要了解更多,请参阅Custom Taxonomies。
4、创建一个新的,自定义的数据库表。这种方式适合保存那些与个人文章、页面或附件无关的,会随着时间逐渐增长的,并且没有特定名称的数据。关于如何使用,你可以阅读Creating Tables with Plugins以获取更多信息。
参阅Creating Options Pages,你将学会如何去创建一个自动保存选项数据的页面。
WordPress有一个"选项"机制,用于保存、更新以及检索那些独立的,具有特定名称的数据。选项的值可以是字符串、数组,甚至是PHP对象(当然,PHP对象在保存时必须能够被序列化或转换成字符串,检索的时候也必须能够被反序列化)。选项的名称必须是字符串,且必须是唯一的,这样才能够确保它们不会和WoredPress或其它插件产生冲突。
通常情况下,你最好能够对插件选项的数量进行一下精简。例如,如果你有10个不同名称的选项需要保存到数据库中,那么,你就可以考虑将这10个数据作为一个数组,并保存到数据库的同一个选项中。
以下是让你的插件使用选项机制的主要函数:
add_option($name, $value, $deprecated, $autoload);
get_option($option);
update_option($option_name, $newvalue);
假定你的插件有一些选项(option)存储于WordPress的数据库中(参看上一节),你可能会想要一个主控面板来允许你的插件用户查看和编辑选项值。实现这一目标的方法阐述于Adding Administration Menus。
在你完成了你的插件的编写工作之后,另一个需要考虑的问题(假设你准备跟大家分享你的插件的话)就是将其国际化。国际化就是将你的软件设置成能够本地化的过程;本地化是将软件中显示的语言翻译成其他语言的过程。Wordpress正在被全球的人们使用,所以全球化和本地化是他内在的特性,这其中就包括了插件的本地化。
我们十分希望你能够将你的插件国际化,这样其他国家的用户就可以在自己的本地使用它了。我们有一个关于国际化的综合说明在 I18n for WordPress Developers,这其中就包括了一个描述插件国际化的部分。
这个部分描述必要的步骤来更新你在http://wordpress.org/extend/plugins 上的插件,还包括在wordpress.org中使用Subversion (SVN)的细节。
假设你已经提交了你的插件到WordPress插件存储库。随着时间的推移,你可能会发现需要并希望将添加新的功能到您的插件或修正错误。你常常想要完成这些改变并提交它们到你的插件的主干。变化将是公开可见的,但只有专业人员通过SVN才能查看你的插件,其他用户通过网站或他们的WordPress插件管理下载的将不会改变。
当你准备发布一个新版本的插件时:
给系统几分钟去工作,然后检查wordpress.org插件页面和Wordpress上安装你的插件的页面,看看一切是否正确更新和是否在你安装的Wordpress中显示了插件更新(更新检查可能会被缓存,这可能需要一些时间,试着访问“可用更新”的页面在你安装的WordPress中)。
故障排除:
最后这个部分是关于开发插件的一些建议。