Home  >  Article  >  php教程  >  自动获取评论者网站最新文章

自动获取评论者网站最新文章

WBOY
WBOYOriginal
2016-06-06 20:08:511108browse

这个想法又是老郑提出的,这件事比较囧,由于我怕网上已经有人已经写过类似的文章,所以搜了一下,居然搜到老郑自己的...不过那个方法是用commentLUV这个插件,此插件并非自动显示,而是需要评论者自己勾选然后手动添加到评论内容中, 所以我就觉得这篇文章可以写了

这个想法又是老郑提出的,这件事比较囧,由于我怕网上已经有人已经写过类似的文章,所以搜了一下,居然搜到老郑自己的...不过那个方法是用commentLUV这个插件,此插件并非自动显示,而是需要评论者自己勾选然后手动添加到评论内容中,
所以我就觉得这篇文章可以写了.下图是鼠标移到评论者昵称上的效果:

自动获取评论者网站最新文章

判断网址有效性

CP党和小白白们可以无视这段,直接看二三小节.
这个问题我单独拎出来,用来判断feed地址是否能正常访问,因为如果不能访问,会出现parse_url的WP_ERROR,导致后面的元素都停止加载,解决方法是用PHP的get_headers()函数,如果HTTP返回参数200说明网页能正常访问,代码如下:

$uri='XXX';
$array = get_headers($uri,1); 
if(preg_match('/200/',$array[0]))//说明能正常访问

hover效果

在functions.php中找到类似这样的句子

%s'), get_comment_author_link()) ?>

改成

<?php printf(__('<span class="rss"><cite class="fn">%s</cite>'), get_comment_author_link()) ?>
<!--这里放下一节的的正式代码完整版本-->

然后加上css

.comment-author .rss div{display: none;position:absolute;background:#fff;border:1px solid #bbb;padding:10px;top:30px;left:50px}
.comment-author .rss:hover div{display:block}

完整代码

此段代码应该放在comments的Loop内

<?php if(current_user_can('level_10')){//只对管理员显示,如果想对所有人显示,请去掉此行和最后一个}
//但是请注意:抓取他站feed会严重拖慢你的网速,尤其是遇到feed无效时,建议只对管理员显示;异步加载大神可无视
	$uri =get_comment_author_url().'/feed';//获取评论者网址,一般而言"网址/feed"是网站feed的地址
	$match1 = '/http/';//无网址游客生成的comment_author_url中没有http
	if( preg_match_all($match1,  $uri, $match) ){//如果填写了网址则开始抓feed					  
		$array = get_headers($uri,1); //判断网址有效性
		if(preg_match('/200/',$array[0])){ //如果网址有效
			$feed = fetch_feed($uri);
			if(! is_wp_error($feed)) { 
				$items = $feed->get_items(0,1); //1可以改成你想抓取的文章数
				echo '<div>';//如果没有使用第二节的hover效果,此行可去掉
				if ( $items == 0 )  {  
           				echo '没有发现文章';
				}
				foreach($items as $item) {
					echo '<a rel="nofollow" target="_blank" href="'.%24item->get_link().'">'.$item->get_title().'</a>'.$item->get_date('Y-m-j G:i').'<br>'; 
				}
				echo '</div>';//如果没有使用第二节的hover效果,此行可去掉
			}
		}
	}
}
?>

改变feed缓存

wordpress默认对fetch_feed抓取的结果启用12小时的缓存,若要改变此时间,在functions.php中加入以下代码

function new_feed_cache( $seconds )
{
  return 3600;//单位为秒,3600代表一小时,其他以此类推
}
add_filter( 'wp_feed_cache_transient_lifetime' , 'new_feed_cache' );
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn