Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

CodeIgniter3でWordPressプラグインを作る

241 views

Published on

2017-09-12 CodeIgniter talk 4にて

Published in: Technology
  • Be the first to comment

  • Be the first to like this

CodeIgniter3でWordPressプラグインを作る

  1. 1. CodeIgniter3でWordPressプラ グインを作る CodeIgniter Night 4 2017-09-12 @noldorinfo
  2. 2. 自己紹介 • 竹腰彰成(たけこしあきしげ) • Twitter: @noldorinfo • http://blog.noldor.info/ 2
  3. 3. 動機 • WordPressのプラグインを作りたい • 固定ページ内にFormを用意して Input → Confirm → Commit → Thank you の流れをしたい • WordPressのプラグインではこれを素のPHPで組むことが多 い • フレームワーク使えるなら使いたいよね • 特にバリデーションのサポートを受けたい • (ほかの諸条件を勘案して)今回はCI3を選択しました 3
  4. 4. 先達の知恵 • WordPressプラグイン:WP Code Igniter • https://ja.wordpress.org/plugins/wp-code-igniter/ • 6年更新されてないのでちょっと使うのが怖い • 榊原さんのblogエントリ [超実践] CodeIgniterをつかって、WordPressサイトを拡張 しよう • https://rdlabo.jp/codeigniter-465.php • CodeIgniterからWordPress関数を呼び出したい向き? 今回の動機とは逆さ 4
  5. 5. 先人の重要な教え • 榊原さんのblogエントリより 1. WordPressのルーティングの中でCodeIgniterのルーティ ングを使うのは無理です 2. helperの衝突が起こりますので、CodeIgniterのURLヘル パーはそのままでは使えません • これらを避けつつ実装 5
  6. 6. WordPressプラグインの設置方法 • 固定ページにショートコードとして設置する • 本文内に [shortcode_name] と書くと、自作関数を呼び出せるようになる • プラグインは wp-content/plugins/plugin_name/plugin_name.php を設置するとWP初期化時に読み込まれるので、 CI3のindex.phpをリネームしてここに置く 6
  7. 7. WordPressとCI3の処理シーケンス 7 WordPress CodeIgniter Plugin初期化ページ表示 ShortCode呼び出し 起動 ↓ Controller処理 ↓ Output処理 ↓ フレームワークとして の処理終了! 関数を実行
  8. 8. CI3処理はWPの初期化時に終了するので… • CI_ControllerはWP初期化時に実行されてしまう • Controllerはショートコードの初期化処理にのみ使う • 実際の処理はただの関数として実装する • CI_Outputを取り扱えない • $this->load->view()は一部動かない • CI_InputとForm_validation、databaseは正しく動く • これらには特段の終了処理がないので動く • $thisではなくget_instance()経由 • sessionも動く • WPでは$_SESSIONを使っていないので衝突しないが、 ほかのプラグインが$_SESSIONを使っていないか要注意 8
  9. 9. ControllerでWP初期化 • 処理本体はShortcodeClass::short_code_a()に書く 9
  10. 10. • config/routes.php • どんなURLで呼び出されるかを決め打ちできず、 404判定されるされないで挙動が変わると面倒になるので とにかく特定のコントローラが呼ばれるようにする CodeIgniterのルーティング 10
  11. 11. ルーティングは使えない • なにせCIのルーティングは固定しているので…… • 必要なページは固定ページに書く • 必要なURLを固定ページに書いていくと結構な量になるのが 難点 • 固定ページがないとWPが404判定してしまう • ショートコードで作る以上はしょうがない • WooCommerceなど他プラグインもそんな感じになっていました • GETパラメータで判定すればページ数は減らせるが、 ルーティングを自前実装することになる 11
  12. 12. URLヘルパは使えない • site_url() が名前衝突する • 使わないように慎重に避ける • 今回の自分の用途ではそれで何とかなった • どうしても使いたいならコピペして 名前を変えるか名前空間を使う 12
  13. 13. 要選択:CSRFフィルタ • WordPressにもwp_nonceという仕組みがある • wp_verify_nonce()を自前で呼び出して falseだったら自前でエラー処理 • CIのCSRFフィルタは自動処理 • WP初期化時に自動チェックが呼び出される • NGだったらCIのエラー画面が表示される • 固定ページ該当箇所にエラー表示するなら自動チェックは使 えない • どちらにするかは要件次第 13
  14. 14. あとはCodeIgniterそのまま使えます • Form_validationをほとんどそのまま使えます! • 面倒なバリデーションでライブラリ使える、やったね! 14
  15. 15. ご清聴ありがとうございました 15

×