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

这个想法又是老郑提出的,这件事比较囧,由于我怕网上已经有人已经写过类似的文章,所以搜了一下,居然搜到老郑自己的...不过那个方法是用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中找到类似这样的句子

<?php printf(__('<cite class="fn">%s</cite>'), get_comment_author_link()) ?>

改成

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

然后加上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="'.$item->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' );
59 Comments

Name *

E-mail *

Website

  1. 郑永

    考虑到有点卡,的确加载缓慢,等待完美版,哈哈。。。就你这篇的震慑,或许有人折腾异步加载,不过你这个原理先收下来,等greader彻底关闭了,用在某个页面上,哈哈。

    • 小蝴蝶

      @郑永 PHP没有多线程异步加载的办法 这一点比较麻烦

  2. 郑永

    我觉得那个时间挺关键,可以改成几小时前或则几天前,比较快速判断什么时候文章,这个以后回来探讨,有机会的。

    • 小蝴蝶

      @郑永 时间倒容易 异步加载能解决就完美了

  3. 郑永

    话说wordpress后台评论的那个异步加载网页看起来很爽,速度应该一点都不影响。

    • 小蝴蝶

      @郑永 恩恩 那个不影响的 不过我这边看不到 不然好歹也有个参考了

  4. chojemmy

    难道是我网速太慢,没加载上去?欧卖糕

    • 小蝴蝶

      @chojemmy 是你网速太快了 我跟不上…

  5. airoschou

    额,我来看看效果的

  6. 小鬼哥

    曾记得有这么个插件,只不过一直没用。莫非就是博主写的?

  7. 子痕

    不错,真心不错。要是评论框大些,显眼些就好了。

    • 小蝴蝶

      @子痕 反正大家都只写一句话,一行就够了哈哈