WordPressに関する情報や技術紹介です

행사 예정일 달력 만들기 팁

이미지로 사용자 정의 필드에서 독자적으로 행사 시간을 설정하고 그것을 기준으로 이벤트 캘린더 작성하고 싶은 경우. 수요가 있는지 알지 않지만 일단 적어 둡니다.

 

사용자 정의 필드의 설정은 사용자 지정 필드 템플릿 등을 이용하면 오작동이 크게 줄어들 것으로 생각합니다.

(사용자 지정 필드 템플릿의 설정 예)
[개최일]
type = textfield
date = true
dateFormat = yyyy-mm-dd
readOnly = true

WordPress의 템플릿 태그는 (아마도) 투고일 밖에 조절을 할 수 없다고 생각하므로, 사용자 정의 필드를 기준으로 데이터를 검색하려면 SQL이 필요하다고 생각합니다.

다음 사용자 정의 필드에서 설정한 날짜를 기준으로 기사 ID를 검색하는 SQL입니다.

global $wpdb;
$day = "2010-5"; // 2010年5月の予定日を取得
$key = "開催日"; // カスタムフィールドの名前が「開催日」とする

// 2010年5月に予定されている開催日と記事IDを取得
$results = $wpdb->get_results(
	"SELECT post_id, DATE_FORMAT(meta_value, '%e') AS date "
	. "FROM $wpdb->postmeta "
	. "WHERE meta_key='$key' AND DATE_FORMAT(meta_value, '%Y-%c')='$day' "
	. "ORDER BY date");

foreach($results as $result) {
	// 処理
	echo $result->date.'日 [ post_id -> '.$result->post_id.' ]<br />';
}

SQLに関しては自己責任で。もっとスマートな書き方があれば教えてください。

同じ日付で2つイベントがある場合には対応していませんので、そういう場合はもう少し改造が必要だと思います。

 

これでカスタムフィールドに設定した値から特定の月の予定日を全て取得できますので、「処理」のところでお好きなようにしてやれば色々幸せになれると思います。

 

次にカテゴリーで更に絞り込む場合です。
イメージとしては「出演者ごとにイベント予定カレンダーを表示したい」場合など。
出演者ごとにカテゴリーを割り振ったとして、以下のようにすれば取得できます。

global $wpdb;
$day = "2010-5";
$key = "開催日";
$cat_id = "3"; // カテゴリーID

$results = $wpdb->get_results(
	"SELECT pm.post_id, DATE_FORMAT(pm.meta_value, '%e') AS date "
	. "FROM $wpdb->term_relationships tr LEFT JOIN $wpdb->postmeta pm ON tr.object_id = pm.post_id "
	. "WHERE pm.meta_key='$key' AND DATE_FORMAT(pm.meta_value, '%Y-%c')='$day' AND tr.term_taxonomy_id=$cat_id "
	. "ORDER BY date");

foreach($results as $result) {
	// 処理
	echo $result->date.'日 [ post_id -> '.$result->post_id.' ]<br />';
}

これで特定の出演者(カテゴリー)のみの予定日を出せます。

もし間違っていたりしたら指摘していただけると嬉しいです。

タグ
, ,
トラックバックURL

Leave a Reply

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

ページTOPに戻る