2012/6/14

ちょっと大人なWordPressカスタマイズの考え方

最近一部ではWordPress屋さんとも呼ばれている加藤です。ちょっと今面白いプロジェクトやってまして、色々勉強させてもらっているのですが、ここらで一度学び得たことを整理しようかと。

とりあえず、カスタム投稿タイプとカスタム分類とカスタムフィールドを使いこなす

カスタム投稿タイプとカスタム分類は本当に便利で、というかこれないと投稿のカテゴリごとにループ切り分けるとか面倒くさいことになるし、カスタムフィールドもごっちゃになっちゃうし、管理画面もわけがわからなくなるので是非使いたい機能です。とは言え結構前からある機能なので、使っておられる方も多いかも。Custom Field Templateでカスタムフィールドをカスタム投稿ごとに切り分けてやると、なお使いやすいです。これで色々なタイプのテンプレートを量産できるので、かなり複雑なサイトも作ることが出来ます。

WordPress › Custom Field Template « WordPress Plugins

プラグインの選び方

プラグインの選び方ですが、勿論ベースの機能も大事なのですが、「どういう作りになっているか」というのが大事です。以前触っていたBuddyPressや、今回使ったAll in One Event Calendarはプラグインの中に独自のテーマフォルダを別途持っていて、表示制御をWordPressのテーマファイルをカスタマイズする要領で、自在に変更できます。またContact Form 7などでもプラグインが生成するデータを利用出来るようなフックも用意されています。さすがにプラグインのデータ利用のリファレンスが用意されているわけでもないですから、プラグインのコードを何となく検索解析しつつという感じになりますが。これ、チョイス間違えると、スタート地点から間違えてましたってことになりかねないので、じっくり検討するのをお薦めします。

諦めなければ英語のソースで大体解決する

当然、混みいったケースになると、日本語で検索かけてもなかなか解答があるような場合が減ってきます。が諦めず英語で検索かけてれば大概ヒントになるようなものは英語のリソースであります。Stack ExchangeとかStack Overflowとかですね。Google先生、その辺は優秀だなあと思うのと、何だかんだ言って、WordPressって世界で最も利用されているCMSなので、多分世界で一番お役立ち情報がWEBに多いCMSなんじゃないかという気がします。この辺は活用しましょう。

query_postsでどうにもならなくなったらSQL書けば良い

大概のことはquery_postsでデータ絞れるようになってるんですが、例えばAll in One CalendarのようなWordPressのデフォルトのテーブル以外に独自のテーブルを持つケース。プラグインのテーマファイルのカスタマイズならデータ取ってこれるものの、本体で一致するカスタム分類を持つイベントを、イベントのメタテーブルから開始日取って来て並び替える、とかだともうカオスでどうにもならなくなります。こういう混みいったことになったら、SQL書きましょう。

  global $wpdb;
  $events = $wpdb->get_results("
  SELECT DISTINCT $wpdb->posts.*
  FROM $wpdb->posts
  LEFT JOIN $wpdb->term_relationships ON $wpdb->posts.ID = $wpdb->term_relationships.object_ID
  LEFT JOIN $wpdb->term_taxonomy ON $wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id
  LEFT JOIN $wpdb->terms ON $wpdb->term_taxonomy.term_id = $wpdb->terms.term_id
  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' AND $wpdb->terms.term_id IN (".$tag.")
  ORDER BY {$wpdb->prefix}ai1ec_events.start DESC
  LIMIT 0, 10
"); 

上に挙げたような感じで色々できると、「なんでもできるね、WordPress」感高まります。実際は今回使ったようなAll in One Event Calendarみたいなプラグインをゼロから開発しますとかだと、ちゃんとMVCでWebサービス開発してます、みたいな感じじゃないときついと思うんですが(企業がプロダクトとして開発してますしね)、結構これで色々行けちゃう気がします。

WordPress楽しいですよ。

ひとり仕事: フリーランスという働き方
(2012-10-5)
売り上げランキング: 14,705
100円
WordPressデザインレシピ集
狩野 祐東
技術評論社
売り上げランキング: 197,569
WordPress 高速化&スマート運用必携ガイド
こもりまさあき 岡本渉
エムディエヌコーポレーション
売り上げランキング: 435,263