get_post_time で投稿の日時によって処理を変えたかった、というプラグイン作成時のメモ【WordPress】

プラグインを作っていましてですね、投稿日時によって処理を変えたいなーと思ったんです。

if ( 投稿が1時間以内なら ) {
	処理1
} elseif ( 投稿が1日以内なら ) {
	処理2
} elseif ( 投稿が1週間以内なら ) {
	処理3
} else ( 投稿が1週間以前 ) {
	処理4
}

こんな感じで。

ただまぁわからないのでいつもの Codex に聞いてみますよ。

 

get_post_time が使えそう

はてブしてるのがぼくしかいない関数を発見。日本語訳もないや。

get_post_time( $d, $gmt, $post, $translate ); で使う。

このタグはループ内で使えて、現在の投稿の時間を返してくれるんだってさ!

パラメータは

  • $d …String、指定必須。フォーマット変えるには日付フォーマットのところを参照しろ、とのこと。
    デフォルト値は ‘U’ (unix 形式のタイムスタンプ)
  • $gmt …任意。GMTタイムゾーンの時刻を返すには true
  • $post …任意。postIDを指定、デフォルトは global $post
  • $translate …任意。時刻文字列を翻訳するか否か デフォルトは false

すな。ただ、$translate は真偽値変えても結果変わらなかったんですよねぇ、謎い。

<?php
// get_post_time() 出力例
echo '結果: ' . get_post_time( 'U', false );
?>

結果: 13576608201

 

現在時刻の取得はphp関数の time() で

time() で unix 形式のタイムスタンプで取得できるので、これと get_post_time() を比較すればいけますね。

<?php
// time() 出力例
echo '結果: ' . time();
?>

結果: 1371131722

 

組み合わせて投稿日時と現在日時の開き具合で振り分けてみる

コードの検証は以前書いた WordPressの関数をちょっと試したいときにWordPress外のPHPから使うための小技 を使って外部phpで書いてみました。

時刻は秒で出力されるので、あらかじめ変数で時間を用意しておいて、

<?php

$hour = 60 * 60; // 1分 × 60 = 1時間
$day  = $hour * 24; // 1時間 × 24 = 1日
$time = time(); // 現在時刻のタイムスタンプ

$args = array( 'posts_per_page' => 5);
$posts_array = get_posts( $args );

// 直近の投稿10件でループ回す
if ( $posts_array ): foreach ( $posts_array as $post ): setup_postdata( $post );

	// unix 形式で投稿タイムスタンプを取得、int型に一応キャストしておく
	$post_time = (integer) get_post_time( 'U', false );

	// ここで振り分け処理
	if ( $time - $hour <= $post_time ) {
		echo '1時間以内';
	} elseif ( $time - $day <= $post_time ) {
		echo '1日以内';
	} elseif ( $time - $day * 7 <= $post_time ) {
		echo '1週間以内';
	} else {
		echo '1週間以上前';
	}
	echo '<br />';

endforeach; endif;
?>

これでバッチリですね 、動かしてみると

振り分け処理されてる!
振り分け処理されてる!

とまぁうまくいきました。

 

ホホまとめ

プラグインを作るまで get_post_time なんてWordPress関数知りませんでしたし!

やっぱり作りたいものがあると色々調べて力になってると実感できます。

もっと美しい書き方がや訂正あれば是非教えて頂きたく。これやってみて!ってのがあればコメントしてみてください。


投稿日

カテゴリー:

投稿者:

コメント

コメント、してみません?