WordPressプラグインXO Event Calendarのカスタマイズメモ

XO Event CalendarはXO=Xakuroさんの意?が、開発したプラグインシリーズの一つです。カレンダー以外にも色々あるようです。

このプラグインは可視カレンダーといいますかビジュアルで見えるのが楽にできるのですが、イベント一覧などもショートコードで出力できます。

XO Event Calendar イベントリストショートコード
XO Event Calendar プラグインのイベントをリスト表示するショートコードを紹介します。 以前、直近のイベントをリスト表示す...

ただショートコードで取れるとはいえこれらはわりと汎用的なイメージなので、もうちょっといじりたいとなるとカスタマイズがいるというところです。開発者さんも書いてますがこれも汎用であって、たしかにイベントとかイメージするのが色々あるとアウトプットが難しいだろうなあと、汎用のものを作るものってことですけどね。

カスタマイズとしてはこれらイベントリストを特定の箇所で出すにはというところで考えてみたのがシンプルにwp_postsテーブルから取り出すというところです。

コードイメージ

具体的には、WP_Queryなどでクエリでは、

$args = [
    'post_type' => XO_EVENT_CALENDAR_EVENT_POST_TYPE, // xoのテーブル
    'post_status' => 'publish', // 公開済みイベント
  ];
$my_query = new WP_Query($args);

みたいにwp_postsのpost_typeで見に行く形です。まあ、直接見ればいいでしょという感じですね。

その後は、お馴染みのhave_post()して、the_post()で現在投稿(XOカレンダーではイベント=1投稿扱いですね)を見る感じでループを回せばいいという感じです。

XO_EVENT_CALENDAR_EVENT_POST_TYPEは、defineでxo_eventと定義されているので、テーブルの中身を見たい場合は、

SELECT *  FROM `wp_posts` WHERE `post_type` LIKE 'xo_event'

こんな感じで中身は確認できるかと思います。

日付取得

<?php echo $xo_event_calendar->get_event_date( $post_id ); ?>

ここで$xo_event_calendarが突然出てくるのですが、プラグインのxo-event-calendar.phpでglobal宣言があるので使えるわけですね。get_event_dateメソッドは投稿IDを指定するとそのイベント日付を返してくれます。

イベント画像取得

アイキャッチ画像がWordpress投稿標準でなくカスタムフィールドで画像になっているなどはありがちです。the_post_thumbnail()とかでやっても、空だったのでうっかりはまりそうです。というかハマりました(笑)

 <img src="<?php the_field('custom_event_img'); ?>" width="150" height="100" >

こんな感じでやればイメージのURLが取れるのでオッケーと。ちなみにこれはAFCなどのカスタムフィールド管理系のプラグイン設定で何を戻り値と取るかでURLとしているからですね、配列とかオブジェクトか指定が異なると挙動が異なるのでそこはよしなに。

タイトル取得

<?php the_title(); ?>

イベントタイトルなどはおなじみな感じですね。

あとは、最初にクエリ取得時の条件やら、ORDERBYやら指定できるはずなのでそこでSQLを上手く取ればいい感じに絞り込めそうです。

ショートコード下でごりごり変えるのはやめよう

今回はプラグイン開発者さんが出しているfunctions.phpがあるのでそれを改造していこうと思ってやっていたのですが、htmlタグを吐き出す過程をいじるときにreplaceみたいに置換していくアイデアでやってたんですね。それは崩壊しましたが、やはり作りが完全に押さえられてないとカスタマイズは怖いなあというところを覚えました。

postsテーブルが増えてくると遅そう

メインテーブルのwp_postsを見ているのでWhereで絞り込んでいるとはいえどれくらい件数が増えるかわかりませんが遅くなるかも?という懸念があります。実際に絞り込みなしでクエリを得ることってまずないと思ってますが、このあたりよく分かってないので機会があれば調べてみたいところですね。

ゴリゴリイベント登録サイトとかはまあそもそもWordpressを使わないとか思ってますがどうでしょう。

タイトルとURLをコピーしました