掲載期限を過ぎたらアラートを出す(用済み)

※ 2012/08/27 追記
プラグイン形式でつくりなおしました。
>> Expiration Notice <<
なので、この記事は用済みです。作成方法の詳細はこちらの記事に書きました。

クライアントからの要望は
「掲載期間が過ぎたものを見えなくする」
ではなく
「掲載期間が過ぎたものは、情報が古くなっている旨の警告を出す(古くてもその情報が生きる場合もあるので、情報自体が存在しなくなることは避けたい)」
ということだったので、下書きに戻してしまうPost ExpiratorSimple Expiresは使えない。
ということで、shortcodeで代用することに。
とりあえずAPIのページを見る。。。
で、書いてみた。こんな?

function katz_expired_alert($atts) {
 if (get_post_type(get_the_ID()) == &amp;amp;quot;page&amp;amp;quot;) {
 $katz_pp = get_pages(array('numberposts' =&amp;amp;gt; 1, 'ID' =&amp;amp;gt; get_the_ID()));
 } elseif (get_post_type(get_the_ID()) == &amp;amp;quot;post&amp;amp;quot;) {
 $katz_pp = get_posts(array('numberposts' =&amp;amp;gt; 1, 'ID' =&amp;amp;gt; get_the_ID()));
 }
 foreach($katz_pp as $val) {
 if ($val-&amp;amp;gt;ID == get_the_ID()) {
 $mod_sep1 = explode(&amp;amp;quot; &amp;amp;quot;, $val-&amp;amp;gt;post_modified);
 $mod_date = explode(&amp;amp;quot;-&amp;amp;quot;, $mod_sep1[0]);
 $mod_time = explode(&amp;amp;quot;:&amp;amp;quot;, $mod_sep1[1]);

$mod_mktime = mktime($mod_time[0],$mod_time[1],$mod_time[2],$mod_date[1],$mod_date[2],$mod_date[0]);

extract(shortcode_atts(array('y' =&amp;amp;gt; &amp;amp;quot;&amp;amp;quot;,'m' =&amp;amp;gt; &amp;amp;quot;&amp;amp;quot;,'d' =&amp;amp;gt; &amp;amp;quot;&amp;amp;quot;,'h' =&amp;amp;gt; &amp;amp;quot;&amp;amp;quot;,'i' =&amp;amp;gt; &amp;amp;quot;&amp;amp;quot;,'s' =&amp;amp;gt; &amp;amp;quot;&amp;amp;quot;), $atts));
 $y = $y !== &amp;amp;quot;&amp;amp;quot; ? $y + $mod_date[0] : $mod_date[0];
 $m = $m !== &amp;amp;quot;&amp;amp;quot; ? $m + $mod_date[1] : $mod_date[1];
 $d = $d !== &amp;amp;quot;&amp;amp;quot; ? $d + $mod_date[2] : $mod_date[2];
 $h = $h !== &amp;amp;quot;&amp;amp;quot; ? $h + $mod_time[0] : $mod_time[0];
 $i = $i !== &amp;amp;quot;&amp;amp;quot; ? $i + $mod_time[1] : $mod_time[1];
 $s = $s !== &amp;amp;quot;&amp;amp;quot; ? $s + $mod_time[2] : $mod_time[2];
 $exp_mktime = mktime($h,$i,$s,$m,$d,$y);
 }
 }
 if (($exp_mktime - $mod_mktime) &amp;amp;lt; 0) {
 $alert_html = '&amp;amp;lt;/pre&amp;amp;gt;
&amp;amp;lt;div class=&amp;amp;quot;expiration&amp;amp;quot;&amp;amp;gt;このページの有効掲載期限は&amp;amp;lt;span style=&amp;amp;quot;color: #ff0000;&amp;amp;quot;&amp;amp;gt; '.date(&amp;amp;quot;Y/m/d H:i&amp;amp;quot;,$exp_mktime).' &amp;amp;lt;/span&amp;amp;gt;までです。

記載されていることの正確性を確認ねがいます。&amp;amp;lt;/div&amp;amp;gt;
&amp;amp;lt;pre&amp;amp;gt;
';
 } else {
 $alert_html = '&amp;amp;lt;/pre&amp;amp;gt;
&amp;amp;lt;div class=&amp;amp;quot;non_expiration&amp;amp;quot;&amp;amp;gt;このページは '.date(&amp;amp;quot;Y/m/d H:i&amp;amp;quot;,$exp_mktime).' まで有効です。&amp;amp;lt;/div&amp;amp;gt;
&amp;amp;lt;pre&amp;amp;gt;
';
 }
 return $alert_html;
}
add_shortcode('expire_date', 'katz_expired_alert');

それぞれのコンテンツには[ expire_date d=60 ]とか埋め込む、と。
shortcodeだと入れたくないところには入れなくていいからフレキシブルだねぇ。

スタイルシートも書かないといけないので

.expiration {
	text-align: center;
	border: solid 1px #ff0000;
	background: #ffe1ff;
	color: #222;
	line-height: 18px;
	margin-bottom: 18px;
	padding: 1.5em;
}
.non_expiration {
	text-align: center;
	border: solid 1px #7aaeff;
	background: #d0f0ff;
	color: #222;
	line-height: 18px;
	margin-bottom: 18px;
	padding: 1.5em;
}

というカンジで入れ込む。
これで期限が来たときは
[ expire_date d=-60 ]
[expire_date d=-60]
期限が来ていないときは
[ expire_date y=10 ]
[expire_date y=10]
というカンジで表示される。
正直、期限が来ていないときは何も表示しなくていいとは思う。