サポート » 使い方全般 » 「この記事は投稿から30日が経過しています」みたいな機能をつけたい

  • 解決済 takuya

    (@takuya)


    single.phpで記事を開いた際に、

    「この記事は投稿から30日が経過しています。」

    のように投稿日からx日経過していることを記事上に表示させたいです。

    このようなプラグインがあるかまだ探している状況ですが、プラグイン以外(直接PHPコードを記載する方法)がございましたらぜひご協力ください。

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • wp-includes/formatting.php にある human_time_diff() が利用できると思います。
    対象となる Unix タイムスタンプと、比較対象となる Unix タイムスタンプ (こちらは省略可能で、初期値が現在時刻) を渡すと、2 つの時刻の差分の絶対値を評価し、利用中の WordPress のロケールに基づいてフォーマットされた文字列を返します (5 days または 5 日 など)。
    投稿時刻のタイムスタンプは get_the_time( ‘U’ ) で取得できますので、

    echo 'この記事は投稿から ' . human_time_diff( get_the_time( 'U' ) ) . 'が経過しています。';

    という感じです。
    ただこの関数を使うと、 60 分以内の場合は分 (15 minitues または 15 分など)、24 時間以内は時間 (5 hours または 5 時間など) を返すこと、差分を絶対値で評価するために過去の投稿と予約投稿 (未来の投稿) が見かけ上同じ値 (現在から遡って +5 日でも -5 日でも返り値は共に 5 日) であることから、あくまで日数での表示にこだわる場合や、予約投稿の存在も想定している場合には、それぞれについて適宜分岐を考える必要があります。

    $from = get_the_time( 'U' ); // 投稿時刻のタイムスタンプ
    $to   = time(); // 現在時刻のタイムスタンプ
    $diff = $to - $from; // 遡っての差分
    if ( $diff < 0 ) {
        // 予約投稿
        echo 'この記事は' . human_time_diff( $from, $to ) . '後に投稿される予定です。';
    } elseif ( abs( $diff ) <= 86400 ) {
        // 24時間以内
        echo 'この記事は 24 時間以内に投稿されました。'
    } else {
        echo 'この記事は投稿から ' . human_time_diff( $from, $to ) . 'が経過しています。';
    }

    ありがとうございます。明日試してみたいと思います。

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • トピック「「この記事は投稿から30日が経過しています」みたいな機能をつけたい」には新たに返信することはできません。