12月からWordPressを使って作り始めた”車のポータルサイト”について、展示会やレースなどのイベント情報を、カスタム投稿タイプをつかってつくっているのですが、トップページに最近のイベント情報が出るようにしました。
車ポータル.com
イベント情報は、start_dateとfinish_dateをカスタムフィールドにいれており、現在の日時を確認して3ヶ月先の月の初日までのイベント情報を表示するようにしました。でよく考えながらつくらなかったので、start_dateとfinish_dateのカスタムフィールドは文字列となっており、本当はもっと簡単にできるのかもしれませんが、どうやったかをここに書いておきます。
ステップとしては、
1. 年、月、日の情報を取得
2. $wpdbのSELECT文を作成して取得
という流れになります。
目次
ステップ1 年、月、日の情報を取得
ここでは、time()を使って現在を取得。そこから、年、月、日と90日後の月を取得しました。
$timestamp = time(); $year = date("Y",$timestamp); $month = date("m",$timestamp); $date = date("d",$timestamp ); $month2 = date("m",$timestamp + 86400 * 90); $this_month = $year."/".$month."/".$date; $finish_month = $year."/".$month2."/01";
ステップ2 $wpdbのSELECT文を作成して取得
$finish_dateの値が今日よりも後で、90日後の月の初日よりも前の投稿を使いました。$wpdb関数を使うと、複数のカスタムフィールドのデータでSELECT文がかけるので便利です。
$querystr = " SELECT $wpdb->posts.* FROM $wpdb->posts, $wpdb->postmeta WHERE $wpdb->posts.ID = $wpdb->postmeta.post_id AND $wpdb->postmeta.meta_key = 'finish_date' AND $wpdb->postmeta.meta_value > '$this_month' AND $wpdb->postmeta.meta_value < '$finish_month' AND $wpdb->posts.post_status = 'publish' AND $wpdb->posts.post_type = 'event' ORDER BY $wpdb->postmeta.meta_value ASC "; $posts = $wpdb->get_results($querystr, OBJECT);
結果、上記の方法で無事に最近のイベントを取得することが出来ました。