指定した日数で投稿を非表示にできないものか…^^;

何とな〜くできるかもしれない。と思ったのがそもそもの始まりで、やってみるとスゲー大変だった。ってか自分の今いる場所がよっく分かりました〜って感じ…^^;

お客様に言われたのが、「一行でいいからリンクとか要らないから、いつまでって決めた日数で消せません?」だった。

おー、それならカスタムポストタイプでタイトルだけ出しちゃえばできるなってすぐに思ったんだけど、問題は○日後にはサイト上から消すってところ。管理画面行って公開設定変えりゃぁいい話ではあるけど、面倒だし、消し忘れがあるとマズイっぽいし…

そこで考えたのがこちら

[php]<?php $q = new WP_Query(array(‘post_type’ => ‘one_line_comment’, ‘taxonomy’ => ‘span’, ‘posts_per_page’ => 5)); while ($q->have_posts()) : $q->the_post(); //1行コメント挿入部分 ?>

<?php
$key = "表示期間";
$value = get_post_meta($post->ID, $key, true);
//↑↑ココまでがカスタムフィールドの項目を出力する部分

date_default_timezone_set("Asia/Tokyo"); //タイムゾーンを明示的に指定する
$today = date(‘Y/m/d/H:i:s’); //今日の日付
echo "今日の日付は、" . $today . "です。"; //UNIXタイム1970/01/01の0:00から今までの時間
$postdate = get_the_time(‘Y/m/dH:i:s’);
echo ‘<br />’ . "記事を投稿した日付は、" . $postdate . "日です。";
$todayunix = strtotime($today); //今日の日付をUNIX時間へ変換
//echo $todayunix;
$postdateunix = strtotime($postdate); //投稿日をUNIX時間へ変換
//echo $postdateunix;
$sabununix = $todayunix – $postdateunix; //ここで投稿日から何日経ったかをUNIX時間で差を求める
$sabun = ceil($sabununix / (24*60*60)); //UNIX時間では分かりづらいので24時間 × 60分 × 60秒で日数へ戻す
echo ‘<br />’ . "差は" . $sabun . "日です。<br />";
$kikan = "-" . $sabun. "day";
?>

<?php if(is_object_in_term($post->ID, ‘span’, ‘days2’) && $sabun < 2) : ?>
<div id="one_line">
<p title="<?php the_title(); ?>"><?php the_title(); ?></p>
</div>
<?php elseif(is_object_in_term($post->ID, ‘span’, ‘days3’) && $sabun < 3) : ?>
<div id="one_line">
<p title="<?php the_title(); ?>"><?php the_title(); ?></p>
</div>
<?php elseif(is_object_in_term($post->ID, ‘span’, ‘days5’) && $sabun < 5) : ?>
<div id="one_line">
<p title="<?php the_title(); ?>"><?php the_title(); ?></p>
</div>
<?php elseif($sabun < $value) : ?>
<div id="one_line">
<p title="<?php the_title(); ?>"><?php the_title(); ?></p>
</div>
<?php else : ?>

<?php endif; ?>
<?php endwhile; ?>

<?php //ここまで1行コメント出力部分 ?>[/php]

…^^; ごちゃごちゃしてるけど、取りあえずコレで必要な日数のものだけは出るようになった。

これだと、カスタムフィールドに書き込むことになるので簡単っちゃぁ簡単なんだけど、実際使う人によっては面倒かもしれないと思い始め、テキストボックスに数字だけ入力するヤツを作ってみたいなぁとしばらく悶々とした日々が過ぎていく。。

一人で悩んでても進まないので、思い切ってWP Total Hacks 作者の@miya0001さんへ思い切って質問してみた。最初は恥ずかしくってfacebookのメッセージで…^^;
すると、とても親切にアドバイスをもらえ、全く知らないタグとか書き方を知ることになった。

1)表示期間を保存する部分のupdate_post_metaには表示期限をunixタイムスタンプで保存する。

2)表示期限のタイムスタンプは、$post->post_modified_gmtをunixタイムスタンプに変換して、日数*60*60*24を加算する。

3)期間を日数で表示する部分は、post_metaの値から$post->post_modified_gmtを引き算してごにょごにょして求める。

4)記事のリストを求めるには、WP_Query()ではなくget_postsを使用したほうがベターです。ソースもシンプルですし、外部のループに影響を与えません。

get_posts()ならpost_metaの特定のキーの値に対して>とかで表示の有無を指定できます。

ソースに対して質問する時は https://gist.github.com/ とか使うといいですよ。コメント等も書けますし見やすいです。あと修正したものの差分も見れますので。おすすめです。^^

update_post_metaってなんですか?  😯

のっけからわかんない状態だったけど、Google先生を訪ね歩くといろいろ出てきた。ってか一番分かりやすかったのはCodex – update_post_meta。そのほかもどのウィンドウ見てるのかわからなくなるくらいタブやらウィンドウやら開きまくって作り替えたのがこちら。
最初は2日間、3日間、5日間って予めタクソノミーで用意しておいて選んでもらう形にしてたんだけど、それよかもう自由に日数だけの方がシンプルでいいかもなと思ってこうなった。

よーし!! もうこれでいいかも (^^) と@miya0001さんへ送ってみた。

[blackbirdpie url=”http://twitter.com/#!/marushu/status/137561499899146240″]

すると、

[blackbirdpie url=”http://twitter.com/#!/miya0001/status/137729933471514624″]

[blackbirdpie url=”http://twitter.com/#!/miya0001/status/137734871597580288″]

[blackbirdpie url=”http://twitter.com/#!/miya0001/status/137737130221907968″]

…敷居がモリモリ上がっていく…^^;

register_meta_box_cbとは? 😯

調べました。Codex – register_post_type
そしてあっちこっち漁っているところで見つけました!! @kzxtreme さんの投稿!! これは凄い!! 書き方までバッチし載ってるじゃぁありませんか (^^)

そしてもう一度、@miya0001さんへ送ってみた。

[blackbirdpie url=”http://twitter.com/#!/miya0001/status/139382948377001984″]

ありがとうございます!! 書き方まで教えていただきました 感謝!!
ってことで書き直してみたのがこれ。今度はfunctions.phpに。

んで、テンプレートの表示させたい部分へ

[php]<?php my_one_line_comment();  ?>[/php]

を置いてあげるとちゃんと出た!! やたーーーー!! そして出てくるテキストはタイトル1行なんで、コレを横に流してやった (^^)

横にスライドするテキストアニメーション

あ、変数の名前はすみません…^^;
んで管理画面はこんな感じで出てる

新しい1行コメントを追加 ‹ 樟南高等学校 — WordPress

予約投稿で指定した期間表示にも使えそうだし、ウィジェットにしたら、バナーの期間限定表示にも使えそうな気がしてきた。それだと、年月日のフォームの方が使い勝手がいいのかも知れないなぁ…。でも今回はシンプルにしたかったので日数を入れるだけ!!

しかし、ここで困ったことに気がついた。(遅い?)日付を半角数字で入力すれば問題ないんだけど、それ以外で入れちゃうと、出っぱなしになっちゃう…。

コレ調べてちゃんとできてから書こうと思ったんだけど、どえらい時間かかりすぎててどうにも進まないので取りあえず書いちゃった…^^;

フォームのバリデーションを載っけたらいいんだと思うんだけど、そこからがわからない…>_<。。。
誰か教えてください〜