自定义帖子类型RSS提要,在同一天发布多个帖子错误

时间:2013-02-22 作者:Brett Clapper

我正在开发一个插件,可以为新闻发布创建自定义帖子类型。目的是让用户能够轻松地以标准新闻稿格式创建新闻稿。例如:

FOR IMMEDIATE RELEASE

此处为标题

City, State (Month Year) - 第1款

第2段

等等。。。

联系人:
公关代表姓名
职务
公司
电话:#
传真:#

# # #

该插件有用于联系信息的自定义字段,自动在“立即发布”等前面加上前缀。整个想法是,您只需编写发布内容,其他一切都会为您处理好。

我正在尝试为这种帖子类型创建一个自定义RSS提要,它将使用这些自定义字段并正确显示所有内容。除了我注意到的一个bug之外,它基本上都能正常工作。

如果在同一天发布了多个新闻稿,则只有最近的新闻稿才会显示日期。其余部分应显示日期的地方为空。下面是我的feed代码:(修改后的/wp-includes/feed-rss2.php版本)

<?php

header(\'Content-Type: \' . feed_content_type(\'rss-http\') . \'; charset=\' . get_option(\'blog_charset\'), true);
$more = 1;

echo \'<?xml version="1.0" encoding="\'.get_option(\'blog_charset\').\'"?\'.\'>\'; ?>

<rss version="2.0"
    xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:wfw="http://wellformedweb.org/CommentAPI/"
    xmlns:dc="http://purl.org/dc/elements/1.1/"
    xmlns:atom="http://www.w3.org/2005/Atom"
    xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
    xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
    <?php do_action(\'rss2_ns\'); ?>
>

<channel>
    <title><?php bloginfo_rss(\'name\'); ?></title>
    <atom:link href="<?php self_link(); ?>" rel="self" type="application/rss+xml" />
    <link><?php bloginfo_rss(\'url\') ?></link>
    <description><?php bloginfo_rss("description") ?></description>
    <lastBuildDate><?php echo mysql2date(\'D, d M Y H:i:s +0000\', get_lastpostmodified(\'GMT\'), false); ?></lastBuildDate>
    <language><?php bloginfo_rss( \'language\' ); ?></language>
    <sy:updatePeriod><?php echo apply_filters( \'rss_update_period\', \'hourly\' ); ?></sy:updatePeriod>
    <sy:updateFrequency><?php echo apply_filters( \'rss_update_frequency\', \'1\' ); ?></sy:updateFrequency>
    <?php do_action(\'rss2_head\'); ?>
    <?php
    while( have_posts()) : the_post();
    $pr_option = get_option(\'bacpr_option\');
    $pr_meta = get_post_custom();
    $pr_date_format = ($pr_option["date_format"] != null && $pr_option["date_format"] != "") ? $pr_option["date_format"]:"F j, Y";
    ?>
    <item>
        <title><?php the_title_rss() ?></title>
        <link><?php the_permalink_rss() ?></link>
        <pubDate><?php echo mysql2date(\'D, d M Y H:i:s +0000\', get_post_time(\'Y-m-d H:i:s\', true), false); ?></pubDate>
        <?php the_category_rss(\'rss2\') ?>

        <guid isPermaLink="false"><?php the_guid(); ?></guid>

    <?php

    $content = "<p><strong>FOR IMMEDIATE RELEASE</strong></p><h1>".the_title_rss()."</h1>";

    if ($pr_meta["insert_summary"][0] == 1) {
        $content .= "<p><em>".$pr_meta["summary"][0]."</em></p>";
    }

    ob_start();
    the_content(\'rss2\');
    $original_content = ob_get_contents();
    ob_end_clean();

    $startpos = strpos($original_content, "<p");
    $endpos = strpos($original_content, ">", $startpos);

    $new_content = substr($original_content, 0, $endpos+1);
    $new_content .= "<strong>".$pr_meta[\'location\'][0]."&nbsp;".the_date($pr_date_format, \'(\', \')\', false)."&nbsp;-</strong>&nbsp;";
    $new_content .= substr($original_content, $endpos+1);

    $content .= $new_content;

    $content .= "<p>Contact:<br/>";
    $content .= ($pr_meta["signature1"][0] != null || $pr_meta["signature1"][0] != "") ? $pr_meta["signature1"][0]."<br/>":"";
    $content .= ($pr_meta["signature2"][0] != null || $pr_meta["signature2"][0] != "") ? $pr_meta["signature2"][0]."<br/>":"";
    $content .= ($pr_meta["signature3"][0] != null || $pr_meta["signature3"][0] != "") ? $pr_meta["signature3"][0]."<br/>":"";
    $content .= ($pr_meta["email"][0] != null || $pr_meta["email"][0] != "") ? "<a href=\'mailto:".$pr_meta["email"][0]."\'>".$pr_meta["email"][0]."</a>"."<br/>":"";
    $content .= ($pr_meta["address1"][0] != null || $pr_meta["address1"][0] != "") ? $pr_meta["address1"][0]."<br/>":"";
    $content .= ($pr_meta["address2"][0] != null || $pr_meta["address2"][0] != "") ? $pr_meta["address2"][0]."<br/>":"";
    $content .= ($pr_meta["address3"][0] != null || $pr_meta["address3"][0] != "") ? $pr_meta["address3"][0]."<br/>":"";
    $content .= ($pr_meta["phone"][0] != null || $pr_meta["phone"][0] != "") ? "Phone: ".$pr_meta["phone"][0]."<br/>":"";
    $content .= ($pr_meta["fax"][0] != null || $pr_meta["fax"][0] != "") ? "Fax: ".$pr_meta["fax"][0]."<br/>":"";
    $content .= ($pr_meta["web"][0] != null || $pr_meta["web"][0] != "") ? "<a href=\'".$pr_meta["web"][0]."\'>".$pr_meta["web"][0]."</a>"."<br/>":"";
    $content .= "</p><p><strong>";
    $content .= ($pr_option["ends_with"] == 2) ? "ENDS":"# # #";
    $content .= "</strong></p>";

    ?>

    <content:encoded><![CDATA[<?php echo $content; ?>]]></content:encoded>

<?php rss_enclosure(); ?>
    <?php do_action(\'rss2_item\'); ?>
    </item>
    <?php endwhile; ?>
</channel>
</rss>
基本上我不知所措,我想我应该向你们寻求帮助。提前感谢所有在这里帮助我的人。

1 个回复
最合适的回答,由SO网友:Nick Pickering 整理而成

http://codex.wordpress.org/Function_Reference/the_date

当在同一天发布的页面上有多篇文章时,\\u date()只显示第一篇文章的日期(即\\u date()的第一个实例)。要重复在同一天发布的帖子的日期,您应该使用模板标记the\\u time()或get\\u the\\u date()(自3.0起)以及特定于日期的格式字符串。用于添加在管理界面中设置的日期。

您想要的是:

$new_content .= "<strong>".$pr_meta[\'location\'][0]."&nbsp;(".get_the_date($pr_date_format).")&nbsp;-</strong>&nbsp;";

结束