用 Eclipse PDT 开发一个 WordPress 插件

用 Eclipse 工具扩展 WordPress

WordPress 是用 PHP 编写的一个 Web 发布平台,存储部分使用的是 MySQL。它的可扩展性表现在通过构建插件可以添加过滤器和行为。Eclipse PHP Development Tools (PDT) V2.0 项目允许您使用 Eclipse 来构建 PHP 应用程序。在本文中,您将学习如何通过使用 PDT 构建插件来扩展 WordPress。

Nathan A. Good, 高级信息工程师, 自由开发人员

Nathan Good 居住在美国明尼苏达州的 Twin Cities。他的职业包括软件开发、软件架构和系统管理。在编写软件之余,他喜欢搭建 PC 和服务器、阅读和实践新技术,以及尝试说服朋友迁移到开源软件。他编写和参与编写了许多书籍和文章,包括 Professional Red Hat Enterprise Linux 3, Regular Expression Recipes: A Problem-Solution ApproachFoundations of PEAR: Rapid PHP Development


developerWorks 投稿作者

2009 年 4 月 20 日

Eclipse PDT V2.0 项目是最近才发布的。与先前的版本相比,它增加了一些新的可用性特性,包括添加构建路径、打开类型和访问改进了的代码帮助的功能。

本文将演示如何下载并安装 WordPress 以及如何用 Eclipse PDT 构建插件。另外还演示了如何从 Eclipse 导出插件以便共享。

要想更好地学习本文,需要安装以下工具:

  • PHP V4.3 或更新的版本
  • MySQL V4.0 或更新的版本
  • 带 PDT 的 Eclipse V3.4

WordPress 概述

WordPress 是用 PHP 编写的一个发布平台,借助它,可以快速便捷地向 Web 发布内容。它具有高度的可扩展性,可以在这个平台上创建出具有任意功能的插件。自 2005 年来,有上百万的 WordPress 拷贝被大公司及个人下载并使用。

WordPress 很容易安装和配置,并且要求很少:只需 PHP 和 MySQL。要安装 WordPress,只需从 Web 站点下载 ZIP 文件(参见 参考资料),然后将 ZIP 解压缩到可从 Web 服务器访问到的一个目录下即可。本文中,我们采用的这个 Web 服务器已被配置成允许向该 Web 服务器发布此用户目录(类似 Apache 中的 userdir 模块)。如果愿意,可以重命名这个目录:这里,我将名称从 wordpress 改为了 blog

在完成解压缩和重命名目录后,请遵照 “Famous 5-Minute Install” 的指导(参见 参考资料)进行操作。如果您的 ISP 支持 WordPress 的需求,那么您就可以在本地开发,然后将整个目录 FTP 到您的站点。


扩展 WordPress

很多人都习惯使用 WordPress 撰写博客,但是实际上它可以用来轻松发布任何内容。我接触过很多用 WordPress 作为主要引擎来托管产品信息类站点的网站,这些站点往往还包括有论坛、反馈表及首页上的 Adobe® Flash® 动画。

针对 WordPress,有很多插件可用(参见 参考资料)。这些插件的范围很广,从添加定制字段来收集更多关于该 WordPress 站点注册用户信息的功能,到标记云(tag clouds)、反垃圾邮件实用程序,再到能生成指向诸如 Facebook、MySpace、del.icio.us 和 Technorati 这类流行站点的 “Share this” 链接的联系插件。

但即使有了这些插件,还是会出现需要通过扩展 WordPress 来满足具体需要的情况。本文后面的部分将展示如何用 Eclipse 和 PDT 建立一个可以在其中开发并测试 WordPress 插件的开发环境。


建立自已的工作区

在建立工作区之前,请确认已经安装并运行了 WordPress。此外,还需要对 WordPress 目录有读写的访问权。最好的情况是在您自己的机器上使用在 Web 服务器上已经配置了的用户目录,以便能将文件放入您自己的根目录下。但一个共享的目录也是可以的,只要您可以对它进行读写操作。

在继续进行前,先在 WordPress_home/wp-content/plugins 目录(其中,WordPress_home 是 WordPress 解压缩后所处的那个目录的完整路径)内创建一个目录 — 例如, WordPress home/wp-content/plugins/myplugin。之后,新 WordPress 插件都将被存放在这个目录之下。

如果已经安装并运行了 WordPress,并且可以对刚刚为插件创建的这个目录进行读写,那么就可以着手为 WordPress 插件创建一个新项目了:

  1. 选择 File > Project,然后从 Wizards 列表中选择 PHP Project ,如图 1 所示。
    图 1. 创建新的 PHP 项目
    创建新的 PHP 项目
  2. 单击 Next
  3. New PHP Project 窗口中,在 Project name 框中键入插件的名称。
  4. Contents 下,选择 Create project from existing source。接下来浏览或在 Directory 框中键入刚刚创建的目录的名称(例如,我的目录是 /Users/ngood/Sites/blog/wp-content/plugins/myplugin),如图 2 所示。
    图 2. 定义项目的位置
    定义项目的位置
  5. 输入目录信息后,单击 Finish,其他信息均保留默认值。

创建项目后,WordPress_home/wp-content/plugins/myplugin 目录的目录列表应类似清单 1。

清单 1. 新 myplugin 目录的内容
drwxr-xr-x  7 user  user    238 Feb  3 11:02 .
drwxr-xr-x@ 5 user  user    170 Feb  3 08:39 ..
-rw-r--r--  1 user  user    259 Feb  3 11:10 .buildpath
-rw-r--r--  1 user  user  30244 Feb  3 11:02 .pmd
-rw-r--r--  1 user  user    496 Feb  3 08:39 .project
drwxr-xr-x  3 user  user    102 Feb  3 08:39 .settings
-rw-r--r--  1 user  user    795 Feb  3 11:13 myplugin.php

在一个团队环境中工作

假如您正在一个团队环境中工作并在共享您的代码,那么 Eclipse 工具会负责将文件从正确的目录登记到源代码控制存储库内。然而,请留意文件在其中被从团队共享环境导入到您的工作区的这个目录。当从一个源代码控制存储库导出文件并导入到您的工作区时,您可以定义这些文件的存储位置(参见图 3)。要获得更多关于 Eclipse 与源代码存储库如何联合使用的信息,请参见 参考资料

图 3. 显示在 WordPress 管理员面板内的插件
显示在 WordPress 管理员面板内的插件

向构建路径中添加 WordPress

PDT 项目提供了向构建路径添加文件夹的功能,它同时也使代码完成工具能够用于 WordPress。为了查看在代码完成工具中的 add_filteradd_action 函数,可以修改构建路径以添加 WordPress wp-includes 目录。

要想将 WordPress wp-includes 目录添加到构建路径,在 PHP 项目被突出显示的同时选择 Project > Properties 。在 Libraries 选项卡上,单击 Add External Source Folder,然后浏览到在安装 WordPress 的位置中找到的这个 wp-includes 目录。完成后,单击 OK。现在,可以在 PHP 编辑器中键入 add_ 并调用代码完成功能,之后将看到一个包括 add_actionadd_filter 的列表。


添加第一个插件文件

要添加第一个插件文件,可以选择 File > New > PHP File。第一个文件的名称要与此文件所在目录的名称一样。例如,如果插件目录的名称是 myplugin,那么此文件就应该命名为 myplugin.php。WordPress 会读取该文件以获得插件信息并注册扩展点。

为了使 WordPress 能够识别插件,需要向新的插件文件中粘贴一个注释块。如果创建的 WordPress 插件很多,不妨考虑把这个代码块放入 PHP 的代码模板中。清单 2 就是一个完成了的代码块。

清单 2. 能识别插件的注释块
/*
Plugin Name: My Plugin
Plugin URI: http://www.example.com/myplugin
Description: This is a really great plugin that extends WordPress.
Version: 1.0.0
Author: Nathan A. Good
Author URI: http://www.nathanagood.com
*/

此时,该插件不做任何事情。它将被显示在 WordPress 的插件管理区内,不过只有这个注释块。要查看这个新插件,请用管理员身份登录到 WordPress 实例,然后单击 Plugins。应该会看到这个新插件被列在 Inactive Plugins 的下面。

图 4. 在从源代码控制存储库导入时定义源位置
在从源代码控制存储库导入时定义源位置

添加功能性

本文中,我将添加两种功能。第一个功能很简单,就是让博客条目标题全部大写。这是一个添加过滤器 的示例。第二个功能是在用户注册表的末尾添加一个额外字段。这是一个添加动作 的示例。

下面我要用函数性代码编写这两个示例以使其尽可能地简单。记住:若使用的是 PHP V5 或更新的版本,就可以融入面向对象的概念以使代码更易于读懂和维护。有关如何用面向对象编程的概念和设计模式编写更易于维护的 PHP 的详细信息,请参见 参考资料

大写的标题

清单 3 所示的是标题过滤器的代码。其中,使用了 PHP 中的 strtoupper() 函数以使此博客的标题变为大写。

清单 3. 使标题变成大写的函数
/**
 * Capitalizes the title given by $title.
 */
function capitalizeTitle($title) {
    return strtoupper($title);
}

写完这个函数后,需要调用 add_filter 以在 WordPress 中将此函数注册为特定的过滤器扩展点。参考资料 中提供了所有可用过滤器的清单的一个链接。下面是一个添加过滤器的示例。

清单 4. 用 add_filter 添加过滤器
/* now add the filter */
add_filter('the_title', 'capitalizeTitle');

添加注册字段

清单 5 所示的代码可以生成一个新的定制注册字段。我用这个 Firebug 扩展来查看现有注册表单字段的 CSS(Cascading Style Sheet)样式,以确保我的定制字段具有相同的 CSS 样式类。

清单 5. 新的定制字段动作
/**
 * Adds a custom field that prompts the user for their favorite
 * color.
 * @return void
 */
function drawCustomField() {
    echo '<p><label>Favorite Color:<br />';
    echo '<input autocomplete="off" class="input" name="fav_color" ';
    echo ' id="fav_color" size="25"';
    echo ' value="' . $_POST['fav_color'] . '" type="text" tabindex="32" />';
    echo '</label><br /></p>';
}

要添加这个定制动作,可以使用如下代码。

清单 6. 用 add_action 添加动作
/* now add the action */
add_action('register_form', 'drawCustomField');

这个动作只在表单上绘出此字段。当用户提交此表单时,它并不实际保存数据。要想保存数据,需要使用 profile_update 动作。有关所有可用操作的详细列表及各自的功能,请参看 参考资料


测试插件

在项目内放入代码后,就可以开始测试插件了。在测试前,需要在 WordPress 内启用插件。以管理员身份登录到 WordPress,然后单击 Plugins。找到插件,然后单击 Activate

激活插件后,进入博客的首页。应该可以看到 “Hello World!” 示例标题现在全部都是大写字母了。如果禁用该插件,那么它将还原回普通的大小写的情况。利用这个功能还可以做一些其他的事情,比如将标题中的 URL 转为超链接。此外,也可以添加具有同样名称的多个过滤器,所以与其创建一个功能全面的过滤器,不如考虑创建多个小的、功能集中的功能块并将它们连接在一起。

要测试插件的注册字段部分,必须以管理用户身份登录到 WordPress 并启用允许用户在 Settings 页面注册的特性。启用这个选项后,在进入到这个注册页面时,就会看到 Favorite Color 字段。


WordPress 的其他扩展点

除了添加过滤器和动作外,还可以覆盖 WordPress 内的函数。覆盖的函数均在 WordPress 主目录中的 pluggable.php 文件内定义。wp_mail 是其中的一个例子,可用来为用户发送电子邮件。很多可覆盖的函数都会处理用户授权,比如登录、设置 cookie 以及发送不同事件的通知。通过覆盖基于授权的函数,就可以构建一些插件,而这些插件能为 WordPress 提供另一种身份验证和授权方式,比如针对一个企业用户组织的身份验证。


导出插件

在编写和仔细测试了插件之后,有可能还会想要与他人共享。大多数 WordPress 插件与 WordPress 本身一样,都只打包成一个 ZIP 文件,这个文件可被扩展和复制到 WordPress 插件目录。

可以用 Eclipse 导出这些插件文件。通过 Eclipse 将项目导出到一个 ZIP 归档文件,就可以避免同时发送特定于项目的文件和团队共享目录及文件(比如 .svn 或 Concurrent Version Systems(CVS)目录)。

要将插件导出到一个归档文件,可以先选中 PHP 项目,然后选择 File > Export。在 Select 窗口,从目标列表中选择 Archive File,然后单击 Next

图 5. 导出 WordPress 插件
导出 WordPress 插件

在如图 6 所示的 Archive file 窗口中,单击 Deselect All,然后单击想要包括到归档文件(比如 myplugin.php)的那些 PHP 文件。在选择了这些 PHP 文件后,可以从 To archive file 选择此归档文件的位置,然后单击 Finish 创建此文件。为了保持一致性,最好是让此 ZIP 文件的名称与此插件目录以及主要插件文件的名称相同。

图 6. 选择要导出的文件
选择要导出的文件

从 Eclipse 创建了归档文件后,就可将其发布到一个 Web 服务器上或是将其复制到您的 ISP 处以便您可以使用它。

要在官方 WordPress 站点上添加有关此插件的信息,可以参考 参考资料 并遵照那里的指导信息。


结束语

WordPress 是越来越流行的一个可扩展 Web 应用程序,它让您能够轻松地将内容发布给用户。您无需修改任何 WordPress 代码就可以扩展 WordPress,从而提供更多的功能。

借助安装了 PDT 的 Eclipse IDE,可以使用 PHP 工具构建一个插件。您还可以用 WordPress 测试和运行您的插件,直到它全部完成。之后,您可以使用 Eclipse 的导出功能来将此插件导出到一个适合于分发的归档文件。

参考资料

学习

获得产品和技术

讨论

  • Eclipse Platform 新闻组 应当是讨论关于 Eclipse 的问题的第一站(选择此链接将启动默认的 Usenet 新闻阅读器应用程序并打开 eclipse.platform)。
  • Eclipse 新闻组 中有很多参考资料适用于对使用和扩展 Eclipse 感兴趣的人员。
  • 参与 developerWorks blogs 并加入 developerWorks 社区。

条评论

developerWorks: 登录

标有星(*)号的字段是必填字段。


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件

 


在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。

所有提交的信息确保安全。

选择您的昵称



当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

标有星(*)号的字段是必填字段。

(昵称长度在 3 至 31 个字符之间)

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

 


所有提交的信息确保安全。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Open source
ArticleID=383787
ArticleTitle=用 Eclipse PDT 开发一个 WordPress 插件
publish-date=04202009