主题开发:将时间戳转换为普通时间(之前)

在Wordpress主题开发过程中,文章meta是必不可少的元素之一。不过一般都是2020/05/20等标准时间显示,但我们在使用国外主题时,我们经常看到文章meta显示发布文章时间是“x天、x小时之前”这种格式,那么这么格式是怎么做出来的呢。我们用下面的代码来看看。

2021年接到网友反馈。更新教程。原来的教程不建议使用,我们建议您使用下面的方法。

最新的方法就是Wordpress官方提供的human_time_diff,使用这个函数,就省去了原来教程的ietheme_time_to_human_time函数。在调用的同理使用2。这里再补充一个hook的方法,方便那些不会自己修改代码的朋友,有hook,就不用修改具体代码了。只需要将下面的代码放在function.php里面就行了。

add_filter( 'get_the_date', 'meks_convert_to_time_ago', 10, 1 ); //override date display
add_filter( 'the_date', 'meks_convert_to_time_ago', 10, 1 ); //override date display
add_filter( 'get_the_time', 'meks_convert_to_time_ago', 10, 1 ); //override time display
add_filter( 'the_time', 'meks_convert_to_time_ago', 10, 1 ); //override time display

/* Callback function for post time and date filter hooks */function meks_convert_to_time_ago( $orig_time ) {
    global $post;
    $orig_time = strtotime( $post->post_date ); 
    return human_time_diff( $orig_time, current_time( 'timestamp' ) ).' '.__( 'ago' );
}

1、首先把下面的代码放在您主题的function.php里。这个代码是核心代码已不推荐

/**
 * Convert the timestamp to human time (time ago)
 */function ietheme_time_to_human_time( $datetime, $full = false ) {
    $now = new DateTime;
    $ago = new DateTime($datetime);
    $diff = $now->diff($ago);
    $diff->w = floor($diff->d / 7);
    $diff->d -= $diff->w * 7;
    $string = array(
        'y' => esc_html__('year', 'textdomain'),
        'm' => esc_html__('month', 'textdomain'),
        'w' => esc_html__('week', 'textdomain'),
        'd' => esc_html__('day', 'textdomain'),
        'h' => esc_html__('hour', 'textdomain'),
        'i' => esc_html__('minute', 'textdomain'),
        's' => esc_html__('second', 'textdomain'),
    );
    foreach ($string as $k => &$v) {
        if ($diff->$k) {
            $v = $diff->$k . ' ' . $v . ($diff->$k > 1 ? 's' : '');
        } else {
            unset($string[$k]);
        }
    }
    if (!$full) $string = array_slice($string, 0, 1);
    return $string ? implode(', ', $string) . ' ' . esc_html__('ago', 'textdomain') : esc_html__('just now', 'textdomain');
}

2、在您网站的合适位置,一般在template-tags.php或是其它显示文章meta值的地方,使用下面的代码调用即可。

$date = ietheme_time_to_human_time(get_the_date());
echo = '<li>
<i class="icon-calendar"></i>
<p>'. esc_html__( 'Date', 'textdomain' ) .'</p>
<span><time datetime="'. get_the_date('c') .'">' . $date . '</time></span>
</li>';

本文已在Ie主题99839发布

文章来源:https://ietheme.com/convert-the-timestamp-to-human-time.html


撰写评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注

加入我们

注册完成!

密码重置

请输入您的邮箱地址。 您将收到一个链接来创建新密码。

检查你的邮件中的确认链接。