WordPressで、日にちをカスタムフィールドにいれた時に期間で取り出す方法

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);


結果、上記の方法で無事に最近のイベントを取得することが出来ました。