用于 feed CodeProject 技术博客的 Wordpress 插件
一个用于 feed CodeProject 技术博客的 WordPress 插件
CodeProjectFeeder
起初,一切都是手动完成的。
第三次之后,我不得不修改 wordpress 的 feed-rss2.php 文件以满足 CodeProject 技术博客的要求。我现在写了我的第一个(也是最后一个?)wordpress 插件。
众所周知,CodeProject 允许您通过现有博客发布文章。请在此处查看常见问题解答。
由于我使用 wordpress,我从一段时间前开始向 CodeProject 提交博客条目。我不得不自己找出在哪里更改哪个文件。
限制已发布文章
为了限制发布到 CodeProject 技术博客的文章范围,我使用了一个“隐藏”功能,并在我的 WordPress 博客中创建了一个名为“CodeProject”的分类。然后,在 CodeProject 的我的技术博客网站上,我使用了 http://www.hjgode.de/wp/category/codeproject/feed/ 作为 feed 输入。现在只有标记为 WordPress 分类“codeproject
”的文章才会被 feed 到 CodeProject。
WordPress 中针对 CodeProject 技术博客所需的 Manual 更改
在 feed-rss2.php 中,我总是在 <channel>
下添加一行 <category>CodeProject</category>
。此外,我不得不修改我使用的 wordpress 主题 Win7blog 的 footer.php 文件。在那里,我按照 CodeProject 的建议添加了一行 rel=”tag”
。
一遍又一遍地做的痛苦
现在,第一次手动更改必须在每次更新 wordpress 版本时进行。在开始编写插件之前,我至少要这样做三次,以避免再次手动修改文件。
WordPress 插件的构想
我以前从未写过 WordPress 插件,但我之前做过一些 html、php 和 mysql 编码(例如,www.fewo-britta.de 上的日历,或 www.der-biedermann.de 上的静态页面,它们是从数据库生成的)。但是学习曲线很陡峭,我花了几个小时才让插件正常工作。我从 DevLounge 的“如何编写 WordPress 插件”系列中描述的插件开始。这篇文章是我能找到的唯一一篇从头开始描述 wordpress 插件开发并附带一个有效示例的文章。
由于我在将代码改编到我的需求方面遇到了问题,特别是 AdminPage,我不得不对代码进行一些重写。
我的第一个 WordPress 插件
好的,这个插件做了什么?
该插件会在您博客页脚中插入一个 rel=”tag”
。这看起来可能好坏参半,具体取决于您使用的主题。页脚始终出现在主题页脚之外。我找不到一种方法让它出现在主题页脚内部,如果主题在它们的页脚块之外(此处在 </div>
之后)使用了 wp_footer()
操作钩子。
<div id="footer">
<p><?php bloginfo('name'); ?>@<?php echo date('Y'); ?>
<br>
<a href="<?php bloginfo('home') ?>/"><?php bloginfo('home'); ?></a>
<br>
Designed by <a href="http://www.kamiyeye.com/">kamiyeye</a>
<br>
<?php StatPress_Print("%totalvisits% Hits."); ?>
</p>
</div>
</div><!-- #wrapper .hfeed -->
<?php wp_footer(); ?>
</body>
</html>
该插件提供了一些复选框选项,因此您可以 a) 隐藏 rel=”tag”
或 b) 完全不使用它。
为了将您的出版物 feed 到 CodeProject 技术博客,建议您在 RSS2 feed 中添加一个内容为 CodeProject 的分类标签。为了通过插件完成此操作,它安装了两个操作钩子:通道钩子:rss2_head
和“item
”钩子,名为 rss2_item
。
这里是我在插件中使用的钩子
//Actions and Filters
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
}
第一个钩子用于“Admin
”设置页面。
第二个钩子用于博客页脚页面。
“activate_…
”钩子用于初始化插件。rss2_head
和 rss2_item
钩子用于将 <category>codeproject</category>
插入到 RSS2 头部(<channel>
)或 <item>
代码中。
rel=”tag” 链接的格式设置
如果您不喜欢 rel=”tag”
链接的格式,您可以从 WordPress 内部编辑插件文件 codeprojectfeeder.php,只需在您的 WordPress 安装的“管理插件”页面上的“CodeProject Feeder 插件”下方点击“编辑”即可。
/*
Adds the rel TAG to the footer
*/
function addFooterCode() {
$content = '';
//debug
//echo '<!-- addFooterCode was called -->';
$devOptions = $this->getAdminOptions();
if ($devOptions['use_reltag'] == "true") {
if($devOptions['hide_reltag'] == "true"){
//using the style option you can adjust the link appearance
$content = '<a style="display:none;
text-align:center; font-size:x-small; "
href="'.stripslashes($devOptions['reltag_content']).'"
rel="tag">CodeProject</a>';
echo $content;
}
else{
$content = '<a style="
text-align:center; font-size:x-small; "
href="'.stripslashes($devOptions['reltag_content']).'"
rel="tag">CodeProject</a>';
echo $content;
}
}
}
您可以使用 CSS 内联样式语句更改页脚文本的外观,因为已经有了“text-align:center; font-size:x-small;
”。
通过插件管理设置页面的其他选项,您可以指定是希望在所有出版物的通道中包含分类标签,还是包含在每个条目中。您不应该同时使用两者,这没有意义。
插件使用复选框而不是选项
从 codeprojectfeeder.php 代码可以看出,我已经改变了设置管理表单中 yes/no 选项的使用方式。我使用了更短的形式和复选框,而不是非常冗长、难以管理的行。
<p><INPUT TYPE="CHECKBOX" id="codeprojectfeederUseRelTag"
name="codeprojectfeederUseRelTag" value="true"
<?php if ($devOptions['use_reltag'] == "true") {
echo 'CHECKED'; }?>>Use rel tag in footer</p>
而不是
<p>
<label for="devloungeHeader_yes">
<input type="radio" id="devloungeHeader_yes"
name="devloungeHeader" value="true"
<?php if ($devOptions['show_header'] == "true")
{ _e('checked="checked"',
"DevloungePluginSeries"); }?> /> Yes</label>
<label for="devloungeHeader_no">
<input type="radio" id="devloungeHeader_no"
name="devloungeHeader" value="false"
<?php if ($devOptions['show_header'] == "false") { _e('checked="checked"',
"DevloungePluginSeries"); }?>/> No</label></p>
您可以下载 codeprojectfeeder 插件(zip 格式)
- 下载 CodeProjectFeeder - 一个 Wordpress 插件
开发与调试
正如您在 codeprojectfeeder.php 中所见,有一些注释行前面带有 //debug
行。我在开发过程中使用它们来查找拼写错误和 bug。
该插件已在一个 lampp 系统(Acer Aspire One A150 netbook)、一个 windows xampp 系统以及最终在我的博客上进行了测试。请注意,由于 lampp/xampp 测试系统的缓存或其他原因,有时输出未被修改,尽管源代码已更改,但什么都没有改变。我不得不重新启动 apache/mysql 以获得正确的结果。RSS2 feed 有时会被 firefox/Internet Explorer 缓存,并且很难调试,因为即使源代码已更改,内容也没有改变。
安装
只需将文件解压到您的 wordpress wp-content/plugins 目录下的一个名为 codeprojectfeeder 的目录中,或者将 codeprojectfeeder 目录解压到您的 wordpress 插件目录中。然后激活插件并选择您喜欢的 CodeProjectFeeder 设置。
最后
现在,您和我都不再需要手动修改 feed-rss2.php 文件来 feed CodeProject 技术博客了。