我正在尝试从我的WordPress博客创建一个完全自定义的Feed,以便它可以被使用NewsML的内容管理系统摄取。 You can learn about NewsML and find a NewsML validator here
我的方法是创建一个生成xml而不是HTML的WP页面模板,由一个名叫Yoast的人描述(谷歌他,我不能发布太多链接b / c我是新来的)。但是,似乎没有什么能满足NewsML验证器。有没有人对创建NewsML提要有任何见解和/或使用WordPress做任何经验?似乎NewsML极其复杂,在我转向的任何地方都会绊倒我。
这是我用来创建Feed的模板。如果您愿意,请随意尝试。
<?php
$numposts = 10;
function yoast_rss_date( $timestamp = null ) {
$timestamp = ($timestamp==null) ? time() : $timestamp;
echo date(DATE_RSS, $timestamp);
}
function yoast_rss_text_limit($string, $length, $replacer = '...') {
$string = strip_tags($string);
if(strlen($string) > $length)
return (preg_match('/^(.*)\W.*$/', substr($string, 0, $length+1), $matches) ? $matches[1] : substr($string, 0, $length)) . $replacer;
return $string;
}
$posts = query_posts('showposts='.$numposts);
$lastpost = $numposts - 1;
header("Content-Type: application/rss+xml; charset=UTF-8");
echo '<?xml version="1.0"?>';
?>
<NewsML>
<Catalog Href="http://www.iptc.org/std/catalog/catalog.IptcMasterCatalog.xml"/>
<NewsEnvelope>
<DateAndTime><?php echo mysql2date('Ymd', get_lastpostmodified('GMT'), false); ?>T<?php echo mysql2date('His', get_lastpostmodified('GMT'), false); ?></DateAndTime>
<NewsService FormalName="Thumbnail" link-url="http://example.com">
http://example.com/images/example.gif
</NewsService>
</NewsEnvelope>
<?php foreach ($posts as $post) { ?>
<?php setup_postdata($post); ?>
<NewsItem LinkType="normal">
<Identification>
<NewsIdentifier>
<ProviderId><?php the_author(); ?></ProviderId>
</NewsIdentifier>
</Identification>
<NewsManagement>
<NewsItemType FormalName="News"/>
<FirstCreated><?php the_time(Ymd); ?>T<?php the_time(His); ?></FirstCreated>
<ThisRevisionCreated><?php the_modified_time(Ymd); ?>T<?php the_modified_time(Ymd); ?></ThisRevisionCreated>
<Status FormalName="Usable"/>
</NewsManagement>
<NewsComponent Duid="<?php echo get_permalink($post->ID); ?>copyright" Essential="no" EquivalentsList="no">
<NewsLines>
<CopyrightLine>Placeholding</CopyrightLine>
</NewsLines>
<NewsComponent Duid="<?php echo get_permalink($post->ID); ?>">
<DateLine><?php the_time(Ymd); ?>T<?php the_time(His); ?></DateLine>
<Author><?php the_author(); ?></Author>
<NewsComponent>
<Role FormalName="Main"/>
<NewsLines>
<HeadLine><?php echo get_the_title($post->ID); ?></HeadLine>
<SlugLine>
<?php the_excerpt(); ?>
</SlugLine>
<MoreLink>
<?php echo get_permalink($post->ID); ?>
</MoreLink>
</NewsLines>
<ContentItem link-url="<?php echo get_permalink($post->ID); ?>">
<DataContent>
<nitf>
<body>
<body.head>
<hedline>
<hl1><?php echo get_the_title($post->ID); ?></hl1>
</hedline>
</body.head>
<body.content>
<?php echo apply_filters('the_content',$post->post_content); ?>
</body.content>
</body>
</nitf>
</DataContent>
</ContentItem>
</NewsComponent>
</NewsComponent>
</NewsComponent>
</NewsItem>
<?php } ?>
</NewsML>
答案 0 :(得分:1)
从坟墓中复活 - 正在寻找这个。不确定您的Feed的验证程度有多严格,因为我无法获得提供的链接,但我能够通过在CDATA标记中包含正文和其他可能包含html的字段来验证我的目的。谢谢你的代码!