给 WordPress 最新文章添加 NEW 图标

好吧,手上还有两三个任务没有完成,更新博客就只能长话短说了,而且是上班时间偷偷更新的哟~小 BOSS 去过三八妇女节了,大 BOSS 在玩单机版连连看,我就偷闲小小地折腾一下 WordPress 啦。折腾是最好的发现问题的办法,也是最好的解决问题的办法,今天折腾的主题就是:给 WordPress 的最新文章添加 New 小图标。

其实这个话题已经有不少人讨论过了,一搜一大把,实现的方法也很多,关键就是这方法,我研究了几种并分了一下类,从实现的原理上讲一般可以分为两种:

方法一:

<?php
function add_title_icon($title)
{
    global $post;
    $post_date=$post->post_date;
    $current_time=current_time('timestamp');
    $diff=($current_time-strtotime($post_date))/3600;
    $title_icon_new=get_bloginfo('template_directory').'/images/title_icon/new.gif';
    if($diff<24)
    {
    $title='<img src="'.$title_icon_new.'" />'.$title;
    }
    return $title;
}
add_filter('the_title','add_title_icon',999);
?>

把以上代码插入在主题文件夹的 functions.php 里就行了,PS:该方法选自荒野无灯:http://www.ihacklog.com/wordpress/wpskills/add-a-new-icon-to-your-title.html,荒野的原文中还有置顶文章的小图标显示方法,不过不在本文的讨论范围内,我把相关的代码删除了,只保留了最新文章显示 NEW 小图标的部分。有兴趣的朋友可以直接前往看一看瞧一瞧。

方法二:

<?php
    $t1=$post->post_date;
    $t2=date("Y-m-d H:i:s");
    $diff=(strtotime($t2)-strtotime($t1))/3600;
    if($diff<24){echo '<img src="'.get_bloginfo('template_directory').'/images/new.gif" />';}
?>

把这段代码加到需要的地方就行,比如 single.php 中的 <?php the_title(''); ?> 前。PS:这个方法我已经找不到出处了,作者朋友看到请吱一声。

再来比较一下方法一和方法二的区别,方法一用到了 hook,也就是钩子,打击面一大片,比如说首页和内页的正文标题处、侧边栏的最新文章、甚至是后台控制板编辑文章的标题前也会自动添加 NEW 小图标;而方法二只是在需要的地方添加。这就好比,在 single.php 中给 WordPress 添加日志签名档让 WordPress feed 输出版权信息的区别是一样一样的,都是 hook 搞的鬼。

大 BOSS 玩完了,赶快收笔,干活鸟~

  1. Pingback: wordpress文章根据时间显示new图标 | 最菜鸟

  2. Pingback: wordpress笔记之首页NEW提示 | i 水手

  3. Pingback: 给 WordPress 最新文章添加 NEW 图标 | 迷失乐园

  4. Pingback: 给新文章添加”New!”提示

  5. Pingback: 新主题Green living上线测试. | 阿邙’S Blog

  6. 请问万戈第2种方法怎么加上置顶图标显示呢~?
    第一种方法会在我博客的模板上造成大量重复标题... :arrow:

  7. 就我现在这个更新频率,估计是用不上了。
    大家一眼就能够看到有新文章没有。
    万戈现在可以踢球了吗?上海的朋友可以出来玩玩。

  8. 这个似乎对个人性质的 blog 作用不太大,因为不是每天都要发很多个文章来着。
    但是,爱折腾 WP 的革命精神值得嘉奖~~ :eek:

  9. 后来我自己发现我那个方法有一个bug ,就是页面list它也给加了下new或者top图标,我已经有代码修正该bug了,见:http://www.ihacklog.com/wordpress/wpskills/add-a-new-icon-to-your-title.html#fix-bug

  10. /**
    * 判断离现在多少天过去了
    *
    * USAGE: is_old_post(10)
    *
    */
    function is_old_post($days = 5) {
    $days = (int) $days;
    $offset = $days*60*60*24;
    if ( get_post_time() < date('U') - $offset ) {
    return true;
    }
    return false;
    }