将个人博客从lofter转移到wordpress之后,个人主页的最新博客的源也需要随之更换。从网上搜索相关代码,多数是从rss调取数据源,但是给出的代码都不能筛选带图片的文章。
因为主页上的文章必须要带图片,因此就需要在调取数据时,将不带图的文章排除。除此之外,还有以下几点需求也要满足。
- 获取标题、摘要、链接、第一张图片、时间等信息;
- 展示最新发表的带图片的前3篇文章;
- 图片使用文章中第一张图片;
- rss源中形如<content:encoded>的带冒号的标签,若直接在函数中引用会产生 syntax error 语法错误,需要使用children()方法获取子元素信息;
- 需将rss源的标准时间格式转换为php的时间格式;
- rss源的时间为标准时间,需转换为+8区的北京时间。
经过不断摸索,终于将满足需求的php代码完成。代码如下:
<!--搏浪号imsail.com站外获取wp最新带图文章代码-->
<?php
function blog_list() {
$url = 'https://t.imsail.com/feed'; //请将网址修改为你的rss源
$xml = simplexml_load_file( $url );
$items = $xml->channel->item;
$pic_count = 0;
foreach( $items as $item ) {
if( ! empty( $item ) ) {
if($pic_count<3) {
$content = $item->children('content', true)->encoded; //对于rss中带冒号的标签,需使用children()获取子元素信息
preg_match_all('/<img.+src=[\'"]([^\'"]+)[\'"].*>/i', $content, $strResult, PREG_PATTERN_ORDER); //判断代码中是否含图片
$first_img = $strResult[1][0]; //首图赋值
if(!empty($first_img)) {
date_default_timezone_set('PRC'); // 设定时间格式为中国时区
$time=date('Y-m-d H:i:s',strtotime($item->pubDate)); //rss时间格式转换
echo '<img src="'.$first_img.'" height=100>';
echo '<li><a href="' . $item->link . '" target="_blank">' . $item->title . '</a>' . $time;
echo '</br>' . $item->description . '</li>';
$pic_count = $pic_count+1; //计数
}
}
}
}
}
?>
<?php blog_list(); ?>
<!--搏浪号imsail.com站外获取wp最新带图文章代码-->
完成后的效果如下图。当然页面的css展现效果还需要您自行调整完善。
原创代码及文章,转载请注明来源。