在本文中,将探讨如何开发一个WordPress插件,并详细介绍一个名为CodeProject Feeder的插件。这个插件是为了满足CodeProject技术博客的要求而开发的。CodeProject允许通过当前的博客发布文章,可以通过查看这里的FAQ来了解更多信息。
为了限制在CodeProject技术博客上发布的博文范围,使用了WordPress的一个“隐藏”功能,并在WordPress博客中创建了一个名为“CodeProject”的分类。然后在CodeProject的技术博客站点上,使用了特定的feed输入链接,这样只有标记为WordPress分类“CodeProject”的文章才会被发布到CodeProject。
在WordPress的feed-rss2.php文件中,必须手动添加一个
每次更新WordPress版本时,都需要手动进行第一次更改。在开始使用插件来避免再次手动更改文件之前,至少做了三次这样的更改。
插件的构思:从未编写过WordPress插件,但之前做过一些HTML、PHP和MySQL编码(例如,在www.fewo-britta.de上的日历或在www.der-biedermann.de上的静态页面,这些页面都是从数据库生成的)。但是,学习曲线很陡峭,花了几个小时才让插件工作。开始阅读DevLounge系列文章“如何编写WordPress插件”,这是唯一一篇从头开始描述WordPress插件开发并提供工作示例的文章。
由于在使用代码适应需求时遇到了问题,特别是AdminPage,不得不稍微重写代码。
第一个WordPress插件:插件的作用是在博客页面页脚中插入一个rel="tag"。这可能看起来或多或少的好,这取决于使用的主题。页脚总是出现在主题页脚的外面。如果主题在其页脚块外使用动作钩子wp_footer(),找不到一种方法让它出现在主题页脚的内部。
插件提供了一些复选框选项,所以可以选择a)隐藏rel="tag"或b)根本不使用它。
为了将出版物推送到CodeProject技术博客,建议在RSS2 feed中添加一个内容为CodeProject的分类标签。插件通过安装两个动作钩子来实现这一点:一个是频道的rss2_head,另一个是项目的rss2_item。
以下是在插件中使用的钩子:
if (isset($hgo_codeprojectfeeder)) {
// Actions
add_action('admin_menu', 'CodeProjectFeeder_ap');
add_action('wp_footer', array(&$hgo_codeprojectfeeder, 'addFooterCode'), 1);
add_action('activate_codeprojectfeeder/codeprojectfeeder.php', array(&$hgo_codeprojectfeeder, 'init'));
add_action('rss2_head', array(&$hgo_codeprojectfeeder, 'addChannelCode'), 1);
add_action('rss2_item', array(&$hgo_codeprojectfeeder, 'addItemCode'), 1);
// Filters
}
第一个钩子用于“管理”设置页面。第二个用于博客页脚页面。“activate_…”钩子用于初始化插件。rss2_head和rss2_item钩子用于在RSS2头部(
如果不喜欢rel="tag"链接的格式,可以编辑插件文件codeprojectfeeder.php,只需在WordPress中点击“编辑”按钮,即可在“CodeProject Feeder插件”下方的“管理插件”页面上进行编辑:
function addFooterCode() {
$content = '';
// debug
echo '';
$devOptions = $this->getAdminOptions();
if ($devOptions['use_reltag'] == "true") {
if ($devOptions['hide_reltag'] == "true") {
// using the style option you can adjust the link appearance
$content = '';
echo $content;
} else {
$content = '';
echo $content;
}
}
}
可以通过CSS内联样式语句来改变页脚文本的外观,如“text-align:center; font-size:x-small;”。
插件的管理员设置页面的其他选项允许指定是否希望在所有出版物的频道中包含分类标签,或者在每个项目中包含。不应该同时使用两者,这没有意义。
插件使用复选框而不是选项:正如在codeprojectfeeder.php代码中看到的,已经改变了设置管理员表单中是/否选项的使用方式。使用了更短的形式和复选框,而不是非常长、难以管理的行:
>
而不是:
可以下载CodeProjectFeeder插件的zip文件:
下载CodeProjectFeeder - 一个WordPress插件
开发和调试:正如在codeprojectfeeder.php中看到的,有一些注释行前面有一个//debug行。在开发过程中使用这些来查找打字错误和bug。
插件在lampp系统(一个Acer Aspire One A150上网本)、Windows XAMPP系统以及博客上进行了测试。只是要注意,由于测试lampp/xampp系统的缓存或其他原因,有时输出没有改变,尽管源代码已经改变。不得不重启Apache/MySQL以获得正确的结果。RSS2 feed有时被Firefox/Internet Explorer缓存,调试起来很困难,因为内容没有改变,尽管源代码已经改变。