All-in-One Event Calendarからクエリを取得する関数
だいぶ長い間忘れていたが、一度、All-in-One Event Calendarの情報を必要な分だけ出したかったときがあった。
当時、このプラグインがなんのテーブル作ってるかとかわかんないから、phpMyAdmin内を見て、SQL叩いて、試しにSELECTして、ってのをやってた記憶がある。
思えば、MySQLでのSQL直打ちはこのとき初めてだった気がする。
もともとOracleを少しだけやっていたこともあってその中途半端な知識で、なんやかんやしたものの・・・Oracleのような方式での外部結合がなく、四苦八苦。
ISO方式のSQLって書きづらいし見づらいのね・・・。
まぁ、とりあえず単純に情報を拾うだけなら、必要なテーブルは以下ということがわかった。
- 「[プリフィックス]_posts」
- 「[プリフィックス]_ai1ec_events」
こいつを元に以下を作成。
/*****************************************************************/
/* func名:getAi1ecQuerys()                                      */
/* 目的:AllInOneEventCalendarのイベントデータ配列を作成         */
/* 引数:なし                                                    */
/*****************************************************************/
function getAi1ecQuerys(){
	global $wpdb;
	$sql = "
		SELECT
			$wpdb->posts.*,{$wpdb->prefix}ai1ec_events.*
		FROM
			$wpdb->posts
			LEFT JOIN
				{$wpdb->prefix}ai1ec_events ON ($wpdb->posts.ID = {$wpdb->prefix}ai1ec_events.post_id)
		WHERE
		   $wpdb->posts.post_type = 'ai1ec_event'
		AND $wpdb->posts.post_status = 'publish'
		ORDER BY
		{$wpdb->prefix}ai1ec_events.start ASC
	";
	$ret = $wpdb->get_results($sql);
	return $ret;
}
上記はSQLで限定したイベントカレンダーのデータを配列に格納するだけの単純なコード。
funcitions側に定義しておいて、
テンプレート側では、以上のように呼び出して配列へ格納させる。
<?php $cal_table = getAi1ecQuerys(); ?>
2つのテーブルは共にワイルドカードでカラムを全部取得してるから、多分効率は悪い。
まか、そのため全データを把握しているわけではないが、ざっくりと使う分には多分問題はない・・・と思う。
