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つのテーブルは共にワイルドカードでカラムを全部取得してるから、多分効率は悪い。
まか、そのため全データを把握しているわけではないが、ざっくりと使う分には多分問題はない・・・と思う。