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

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

WBOY
WBOY원래의
2016-06-06 20:08:511072검색

这个想法又是老郑提出的,这件事比较囧,由于我怕网上已经有人已经写过类似的文章,所以搜了一下,居然搜到老郑自己的...不过那个方法是用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' );
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.