65.9K
CodeProject 正在变化。 阅读更多。
Home

用于 feed CodeProject 技术博客的 Wordpress 插件

starIconstarIconstarIconstarIconstarIcon

5.00/5 (8投票s)

2010年3月2日

CPOL

5分钟阅读

viewsIcon

36846

一个用于 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 插件

好的,这个插件做了什么?

62235/codeprojectfeeder_02.gif

该插件会在您博客页脚中插入一个 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_headrss2_item 钩子用于将 <category>codeproject</category> 插入到 RSS2 头部(<channel>)或 <item> 代码中。

rel=”tag” 链接的格式设置

如果您不喜欢 rel=”tag” 链接的格式,您可以从 WordPress 内部编辑插件文件 codeprojectfeeder.php,只需在您的 WordPress 安装的“管理插件”页面上的“CodeProject Feeder 插件”下方点击“编辑”即可。

62235/codeprojectfeeder_01.gif

62235/codeprojectfeeder_04.gif

/*
 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.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 技术博客了。

© . All rights reserved.