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.
1 of 119

Wp プラグインapiから理解するword press.share

33

Share

Download to read offline

このセッションでは、プラグインAPIの基本と、プラグイン作成の具体例を通じて、WordPressカスタマイズの本質と、それぞれのコンポーネントの役割を正しく整理・理解します。

1)WordPress のカスタマイズにおいて、
何が難しいのか、何が簡単なのかを理解する
2)WordPress のカスタマイズ案件における、
より適した実現方法の選択や想定が出来るようになる

【対象】ディレクター、デザイナー、プログラマーを問わず
 WordPress の理解を深めたい方

Related Books

Free with a 30 day trial from Scribd

See all

Related Audiobooks

Free with a 30 day trial from Scribd

See all

Wp プラグインapiから理解するword press.share

  1. 1. プラグインAPIから理解する WordPress
  2. 2. 自己紹介 ‣ ノジマユウジ @yuka2py ‣ 株式会社フォーエンキー 代表 ‣ システム開発、 グラフィックデザイン、 DTPや印刷なども ‣ PythonとJavascriptが大 好き(Dartに興味深々) ‣ 最近はWeb上のアプリ ケーション構築や、WPに よるシステム開発、プラグ イン作成などが主なお仕 事 ‣ おしゃれも大好き☆ ‣ リボンやお花が好き☆ 絶賛 お仕事募 集中
  3. 3. 去年のボク Python 1%Design 15% iOS 4% Android 10% Web(PHP/JS) 10% Windows(C#) 20% お嫁 40% お 嫁 W i n d o w s ( C # ) W e b ( P H P / J S ) A n d r o i d i O S D e s i g n P y t h o n 2012年11月2日 株式会社フォーエンキー調べ Pythonista なのにね (́;ω;`)
  4. 4. 最近のボク Python 1% Design 5% Android 5% Windows 15% Web/WordPress 25% お嫁 50% お 嫁 W e b / W o r d P r e s s W i n d o w s A n d r o i d D e s i g n P y t h o n 2013年6月1日 株式会社フォーエンキー調べ 愛 恐
  5. 5. 用語の定義 カスタマイズ PHPのプログラムを書いて、 WPの処理を追加・変更すること プラグイン 利用よりも制作する場合の話。 公式ディレクトリ登録というのも基本的に別
  6. 6. はじめに ‣ このセッションでは、プラグインAPIの基本と、プラグイン作 成の具体例を通じて、WordPressカスタマイズの本質と、そ れぞれのコンポーネントの役割を正しく整理・理解します。 ● WordPress のカスタマイズにおいて、 何が難しいのか、何が簡単なのかを理解する ● WordPress のカスタマイズ案件における、 より適した実現方法の選択や想定が出来るようになる ‣ 【対象】ディレクター、デザイナー、プログラマーを問わず     WordPress の理解を深めたい方
  7. 7. WordPress の 理解を深めたい方
  8. 8. 深めたい
  9. 9. ディレクターの方へ ‣ ディレクターだってWPの仕組 みを知っている方がずっと良い ● どんどん低くなる分業の壁 ‣ プラグインを無闇に使わない? ● なんでもプラグインで実現でき るのはWPの大きな強みですが ● いらない機能まで入ってる (=>重くなるし邪魔だし) ● プラグイン同士の競合で困る ● でもそれは、何故か? ‣ プラグインを作るという観点 ● プラグインは利用するだけでな く作る事もできる ● 特徴・意味 ● メリット・デメリット ● 簡単な点・難しい点 ‣ 業務へのフィードバック ● より良いアプローチや手法の 選択ができるようになること ● そのキッカケに!
  10. 10. デザイナーの方へ ‣ 仕組みを知ろう! ● グラフィックデザインは アプリケーションUIの主役 ● 仕組みを知ることでこそ出 来るアプローチやデザイン もある ● プログラマさんに文句言わ れそうでやりたいことが出 来なかったり ● マジで怒られたり ‣ 目標! ● コピペ卒業 ● テンプレートのPHPは読め るようになる ● 簡単なフックぐらいはでき るようになる ‣ 今日はそのキッカケに! ● 特にフック関連について注 目して頂けたらと思います
  11. 11. 開発者の方へ ‣ プラグイン作るの難しい? って思っていたら ● 何が簡単で、何が難しいのか 分けて理解する ● 今日の話で、そうでもなさそ うだね、って思ってもらえる と嬉しい ‣ WPでの受託開発 ● テーマのインプリ以上のカス タマイズが来た時に… ● どのようにアプローチできる か?(選択肢を増やす) ● どういうリスクがあるか確認 して、見積もりなどで活かせ るように ‣ 出来ればプラグインとか作れ るように ● あわよくば公式公開とか目 指して ● WPに貢献できるように
  12. 12. 本日のお品書き ‣ プラグインとは? ● 簡単なプラグインの紹介 ● プラグインの要件と意味 ● プラグイン化する/しない ‣ WordPress のカスタマ イズとプラグインAPI ● フックの意味と基本 ● プラグインAPIとは? ‣ WPのカスタマイズの難し いところ ● WPならではの難しさ、 そしてカスタマイズの難 しさを知る ‣ まとめ ‣ おまけ ● 時間があれば!
  13. 13. プラグインとは?
  14. 14. Q作るのは、むずかしい? (?_?)
  15. 15. A難しいかどうかは、 何をするか、による。 別に、「プラグイン」が難しいわけじゃない (´・ω・`) フーン 大事
  16. 16. まぁ、とりあえず作ってみる (*’д’*)イマヤルノ?
  17. 17. 「怒れる嫁。」 (〃ノωノ)イマデショ!
  18. 18. <?php /* Plugin Name: 怒れる嫁。 */ function ikareruyome( $content ) { return str_replace( '嫁', ' <font size="6">( #゚Д゚ )ヨメ</font> ', $content ); } add_filter( 'the_content', 'ikareruyome' ); こんな感じで… 01 02 03 04 05 06 07 08 09 10 11 12 13 Ctrl+s
  19. 19. できた! (*’д’*)コレダケ?
  20. 20. 適当な名前でファイルに保存 ↓ /wp-content/plugins/ に置く (´・ω・`)フムフム
  21. 21. ちゃんと 出来てる ちゃんとプラグインってますし (゚д゚ ) ホンマヤネ..
  22. 22. プラグイン有効化 <前> (・д・)
  23. 23. プラグイン有効化 <後> ちゃんと 怒ってる ((((; ゚Д゚))) ヨメコエー
  24. 24. WordPress の 「プラグイン」なんて、 まぁ、こんなもの (・д・)コレナラアッシニモデキソデス 敢え て言って みます
  25. 25. どういうことか?
  26. 26. プラグインの解説 プラグイン 情報ヘッダ <?php /* Plugin Name: 怒れる嫁。 */ function ikareruyome( $content ) { return str_replace( '嫁', ' <font size="6">( #゚Д゚ )ヨメ</font> ', $content ); } add_filter( 'the_content', 'ikareruyome' );
  27. 27. プラグイン情報ヘッダ ‣ WPにプラグインを 認識させるために 必要な情報 ‣ 最低限「Plugin Name」 があれば良い ‣ でも、いちおう普通は、 右の情報ぐらいを書く /* Plugin Name: 怒れる嫁。 Plugin URI: http://foreignk Description: 嫁を怒らせます Version: 1.0 Author: yuka2py Author URI: https://twitter License: GPL v2 */
  28. 28. 以上。 (´・ω・`)ンン? プラグインの解説はこれで全てです。 <(_ _)>
  29. 29. プラグインの解説 プラグイン 情報ヘッダ <?php /* Plugin Name: 怒れる嫁。 */ function ikareruyome( $content ) { return str_replace( '嫁', ' <font size="6">( #゚Д゚ )ヨメ</font> ', $content ); } add_filter( 'the_content', 'ikareruyome' ); ここは 無くても プラグイン (*’д’*)ソナノ?
  30. 30. プラグインはプラグイン。
  31. 31. もちろん何もしないけど。 処理を書かないと、もちろん何もいたしません。
  32. 32. WPの「プラグイン」は ただのプログラムの置き場所。 (´・ω・`) フーン 先ほどの「こんなもの」発言は、この事について言っています。 実は
  33. 33. この部分は、 functions.php に書いても動く なので… <?php /* Plugin Name: 怒れる嫁。 */ function ikareruyome( $content ) { return str_replace( '嫁', ' <font size="6">( #゚Д゚ )ヨメ</font> ', $content ); } add_filter( 'the_content', 'ikareruyome' );
  34. 34. 「プラグイン」とは? ‣ プラグインは、ただの プログラムの置き場所 ● でも↑この理解が大事! ‣ 出来る事は一緒 ● テーマのfunctions.php に書くのと、ほとんど違 いは無い ‣ プラグインの技術要件 ● /wp-content/plugins/ にファイルを配置 ● プラグイン情報ヘッダ これだけあれば プラグイン
  35. 35. では「プラグイン」の意義は? ‣ 外観と機能の分離 ● テーマを変えてもプラグインの 機能は有効 ● 機能のみを提供 ● 外観はテーマ、機能はプラグイン ‣ 管理・運用面 ● プラグイン単位での管理 ● 管理画面での有効化/無効化 ● プログラマ以外による、リリース や停止が可能 ‣ 開発面 ● コードの再利用性の向上 ● 必然的に、プラグイン境界で分離 されたコードを書くため ● 結果、複数サイトでの再利用がし やすくなる ● 一方で、コスト増の懸念 ● 再利用しやすいコードを書くのに は手間が掛かる ● 実際ににいろいろなサイトで使え るようにするために、オプション で設定ができるようにするなどの 配慮が必要になることも
  36. 36. じゃあ...
  37. 37. Qどういう時にプラグイン? どのように判断すべきか。
  38. 38. A観点、対象、運用などによる。 一概には 言えない話 (立場)  (汎用性・目的)  (利用者)
  39. 39. プラグインにする・しない ‣ 他のサイトでも利用できそうな 汎用的な機能なら... ● 自社開発用のプラグイン ● よくつかう機能をまとめたもの があると便利かも? ● 先々、公式ディレクトリへの 登録を考えてプラグインに ● 個人・法人を問わず、 公式ディレクトリへの登録は ポートフォリオとして有益 ‣ サイト固有の機能は? ● 僕個人は、プラグインにせず、 PHPのモジュールにして functions.php から require することが多い(手軽) (テーマを変更するという要件が無い時) ● 一方、「テーマは外観の表現に 停めるべき」との観点からプ ラグインとして実装する方も ● なお、公式ディレクトリに登 録するテーマの場合は、機能 実装は含まないのが原則 個人的な 考え
  40. 40. テーマでOKNO テーマかな?NO 他のサイトで使える? (汎用性ある?) 汎用的に作れるそう? YES あわよくば公式に公開した り広く配布できる感じ? YES 本格プラグイン(を目指す) YES プラグインにする・しない 個人的な 考え とりあえずプラグインNO 先々どうするかわからないので、とりあえず プラグインとして作っておくけれど、汎用化 などは考えない
  41. 41. まぁ とにかく、 プラグイン作るのって ワリと簡単なんですね! (・∀・) チョロソウッスネ
  42. 42. そんなワケがない。 「プラグインにする」のは簡単だけど、 プラグインの「機能を開発する」のは難しいことが多いです。 (;゚д゚)...デスヨネ....
  43. 43. 最初の話...
  44. 44. 難しいかどうかは、 何をするか、による。 どんなカスタマイズをするか?
  45. 45. じゃあ、
  46. 46. WordPress の カスタマイズとは?
  47. 47. WordPress のカスタマイズと プラグインAPI
  48. 48. プラグインは作った事なくても、 テーマを作成されたことが ある方は多いハズ。 (;゚∀゚)モチノロンヨ..
  49. 49. フックしましたか? (;゚∀゚)エット....
  50. 50. フックしてると良いんですが... (* - *) コピペでも いいです! (;゚∀゚)ハイシマチタ.... 管理画面からプラグインをインストールして利用されているまでの方も いらっしゃるかも知れませんが、ここではいちおうそういうことで (* - *)
  51. 51. そのフックが WPカスタマイズの 根幹。 (゚_゚)フムフム
  52. 52. 「怒れる嫁。」 (´・ω・`) マタキタヨ
  53. 53. ここが カスタマイズ 部分 カスタマイズ部分の解説 プラグイン 情報ヘッダ 処理を作って WPに登録 <?php /* Plugin Name: 怒れる嫁。 */ function ikareruyome( $content ) { return str_replace( '嫁', ' <font size="6">( #゚Д゚ )ヨメ</font> ', $content ); } add_filter( 'the_content', 'ikareruyome' );
  54. 54. ‣ 実現したい処理は、PHPで書く ‣ ここでは、単純な文字の置き換えをしてます 処理を作る ④置き換えて ⑤ 返 す ②嫁という字を ③この文字列に ①ここに入っている function ikareruyome( $content ) { return str_replace( '嫁', ' <font size="6">( #゚Д゚ )ヨメ</font> ', $content ); }
  55. 55. WPに登録する ‣ 作った処理を WP に実行させる為、登録する ‣ これをWordPressでは「フックする」と言う 登録するこれが フック add_filter( 'the_content', 'ikareruyome' );
  56. 56. では、フックは何をするのか?
  57. 57. WordPress の 仕組みのおさらい Inside WordPress
  58. 58. 予め決 められた 処理 初期化 URLを解析 対応するデータを検索 対応するテンプレートを表示 WordPressの基本動作 メイン クエリ Request Response
  59. 59. 予め決められた 処理に... 割り込む! フックのイメージ Request Response 初期化 URLを解析 対応するデータを検索 対応するテンプレートを表示 変更 追加 変更 変更 フック
  60. 60. フックは WordPress の 処理を追加・変更する 重要な仕組み (カスタマイズする)
  61. 61. この仕組みの為に 用意された「道具」を 「プラグインAPI」 と言います。 「API」とは、プログラムで使える「道具」のこと。豆知識
  62. 62. では無い ↓ プラグインを作る道具 誤解がないように捕足 プラグインAPI
  63. 63. ↓ WPのカスタマイズの為の 重要な道具 プラグインAPI
  64. 64. なので、プラグインはもとより
  65. 65. テーマのカスタマイズでも使う だから、テーマの作成中に、 functions.php で フックしたことがあるハズ。 (*゚ー゚)ナルホドネ
  66. 66. プラグインAPI を 詳しく。 Plugin API
  67. 67. プラグインAPIとは WordPressの処理を追加・ 変更するために使う道具 ‣ 2つのフック ● アクション ● フィルター ‣ 上書き可能なコア関数 (今回は割愛) Codex でも 取扱大 メインは フック http://codex.wordpress.org/Pluggable_Functions
  68. 68. 2つのフック ‣ アクション ● 特定のタイミングで、 処理を追加するイメージ ‣ フィルター ● 特定のタイミングで、 既定のデータや処理を 変更するイメージ ● 変更したデータを返す ‣ 2つのフックの違いは? ● 厳密に分けるのは難し い? ● Codexでも説明されている が実態と少し違うかな? ● アクションフックでも、 pre_get_posts みたく 既定の処理変更するものも 多い。 ● なので、あまり難しく 考えないでおきましょ♪ Point
  69. 69. フックの名前 フックさせる関数 実行の優先順位 (未指定の時は、10) フック関数の引数の数 (未指定の時は、1) フックする方法 ‣ add_filter() または add_action() 関数を使う add_filter( $tag, $function, $priority = 10, $accepted_args = 1 )
  70. 70. ②関数にまとめて アクションフックしてみる フックの名前 フックするさせる関数③登録 ①実現したい処理 (設定画面を追加) function ikayome_option_menu() { add_options_page( '怒れる嫁の設定', '怒れる嫁の設定', admin , ikayome , 'display_ ikayome_option_menu' ); } add_action( 'admin_menu', 'ikayome_option_menu', 20 );
  71. 71. フィルターフックしてみる ②関数にまとめて フックの名前 フックするさせる関数③登録 ①実現したい処理 (文字列の置換) アクション と一緒 フィルターは 値を返す function ikareruyome( $content ) { return str_replace( '嫁', ' <font size="6">( #゚Д゚ )ヨメ</font> ', $content ); } add_filter( 'the_content', 'ikareruyome' );
  72. 72. こんなふうに、 プラグインAPIも、 簡単。 (* ゚ω゚ *)デスカネ?
  73. 73. まぁ、よく考えてみると、 「道具」が難しいわけはない。 (つ゚o゚⊂)タシカニ...
  74. 74. じゃあ、
  75. 75. なにが難しい? (゚_゚)フムフム…
  76. 76. WordPress のカスタマイズの 難しいところ
  77. 77. ①フックを探すのが難しい 【WPカスタマイズの何が難しい】
  78. 78. QWordPressには、 どんなフックがありますか?
  79. 79. A 一般的リクエスト中に実行 されるアクション muplugins_loaded plugins_loaded sanitize_comment_cookie s setup_theme load_textdomain after_setup_theme auth_cookie_malformed set_current_user init widgets_init register_sidebar wp_register_sidebar_wid get wp_loaded parse_request* send_headers* pre_get_posts* posts_selection wp* template_redirect get_header wp_head wp_enqueue_scripts wp_print_styles wp_print_scripts get_template_part_loop loop_start* the_post* loop_end* get_sidebar dynamic_sidebar get_search_form parse_query* wp_meta get_footer twentyten_credits wp_footer wp_print_footer_scripts shutdown 管理画面リクエスト中に実 行されるアクション muplugins_loaded plugins_loaded sanitize_comment_cookie s setup_theme load_textdomain after_setup_theme auth_cookie_valid set_current_user init widgets_init register_sidebar wp_register_sidebar_wid get wp_loaded auth_redirect wp_default_scripts* _admin_menu admin_menu admin_init load-edit.php parse_request* send_headers* parse_query* pre_get_posts* posts_selection wp* admin_xml_ns wp_default_styles* admin_enqueue_scripts admin_print_styles- edit.php admin_print_styles admin_print_scripts- edit.php admin_print_scripts wp_print_scripts admin_head-edit.php admin_head in_admin_header adminmenu admin_notices restrict_manage_posts the_post* in_admin_footer admin_footer admin_print_footer_scrip ts wp_print_footer_scripts admin_footer-edit.php shutdown 投稿、ページ、添付ファイ ル(アップロード)関連の フィルタ attachment_icon get_attachment_icon attachment_innerHTML get_attachment_inner content_edit_pre excerpt_edit_pre title_edit_pre get_attached_file get_enclosed get_pages get_pung get_the_excerpt get_the_guid get_to_ping icon_dir icon_dir_uri prepend_attachment sanitize_title single_post_title the_content the_excerpt the_tags the_title the_content_rss the_excerpt_rss the_title_rss the_editor_content wp_dropdown_pages wp_list_pages wp_list_pages_excludes wp_get_attachment_meta data wp_get_attachment_thu mb_file wp_get_attachment_thu mb_url wp_get_attachment_url wp_mime_type_icon wp_title add_ping attachment_max_dims category_save_pre comment_status_pre content_filtered_save_pr e content_save_pre excerpt_save_pre excerpt_save_pre ping_status_pre title_save_pre post_mime_type_pre status_save_pre phone_content thumbnail_filename wp_thumbnail_creation_si ze_limit wp_thumbnail_max_side_l ength update_attached_file wp_delete_file wp_generate_attachment _metadata wp_update_attachment_ metadata コメント・トラックバッ ク・ピンバック関連のフィ ルター comment_excerpt comment_flood_filter comment_post_redirect comment_text comment_text_rss comments_array comments_number get_comment_excerpt get_comment_ID get_comment_text get_comment_type get_comments_number post_comments_feed_lin k comment_save_pre pre_comment_approved pre_comment_content preprocess_comment カテゴリー関連のフィル ター category_description category_feed_link category_link get_categories get_category list_cats list_cats_exclusions single_cat_title the_category the_category_rss wp_dropdown_cats wp_list_categories pre_category_description pre_category_name pre_category_nicename リンク関連のフィルター attachment_link get_attachment_link author_feed_link author_link day_link feed_link get_comment_author_lin k get_comment_author_url _link month_link page_link post_link the_permalink year_link 日付・時間関連のフィル ター get_comment_date get_comment_time get_the_modified_date get_the_modified_time get_the_time the_date the_modified_date the_modified_time the_time the_weekday the_weekday_date 投稿者・ユーザー関連の フィルター author_email comment_author comment_author_rss comment_email comment_url get_comment_author get_comment_author_em ail get_comment_author_IP get_comment_author_url login_errors login_headertitle login_headerurl login_message role_has_cap sanitize_user the_author the_author_email pre_comment_author_em ail pre_comment_author_na me pre_comment_author_url pre_comment_user_agen t pre_comment_user_ip pre_user_id pre_user_description pre_user_display_name pre_user_email pre_user_first_name pre_user_last_name pre_user_login pre_user_nickname pre_user_url registration_errors user_registration_email validate_username リンク集関連のフィルター get_bookmarks link_category link_description link_title link_rating pre_link_description pre_link_image pre_link_name pre_link_notes pre_link_rel pre_link_rss pre_link_target pre_link_url ブログ情報・設定関連の フィルター all_options bloginfo bloginfo_rss bloginfo_url loginout option_設定名 pre_option_設定名 upload_dir upload_mimes テキスト関連のフィルター attribute_escape js_escape 管理画面関連のフィルター autosave_interval cat_rows comment_edit_pre comment_edit_redirect comment_moderation_su bject comment_moderation_te xt comment_notification_he aders comment_notification_su bject comment_notification_tex t cron_schedules default_content default_excerpt default_title format_to_edit explain_nonce_動詞-名詞 format_to_edit format_to_post manage_link_columns manage_posts_columns postmeta_form_limit pre_upload_error preview_page_link preview_post_link richedit_pre show_password_fields the_editor user_can_richedit user_has_cap wp_handle_upload wp_upload_tabs リッチエディター関連の フィルター mce_spellchecker_langua ges mce_buttons、 mce_buttons_2、 mce_buttons_3、 mce_buttons_4 mce_css mce_external_plugins mce_external_languages tiny_mce_config_url tiny_mce_before_init テンプレート関連のフィル ター kubrick_header_color kubrick_header_display kubrick_header_image locale_stylesheet_uri stylesheet stylesheet_directory stylesheet_directory_uri stylesheet_uri template template_directory template_directory_uri theme_root theme_root_uri その他の高度なフィルター author_rewrite_rules category_rewrite_rules comments_rewrite_rules date_rewrite_rules post_rewrite_rules page_rewrite_rules search_rewrite_rules root_rewrite_rules mod_rewrite_rules rewrite_rules_array create_user_query found_posts_query query query_vars request update_user_query found_posts get_next_post_join get_next_post_sort get_next_post_where get_others_drafts get_previous_post_join get_previous_post_sort get_previous_post_where get_users_drafts post_limits posts_distinct posts_fields posts_groupby posts_join_paged posts_orderby posts_request posts_where_paged posts_join posts_where the_posts gettext locale もっっ∼っすごい、あります。 全部は知りません。 <(_ _)>
  80. 80. フックを探すのが難しい ‣ とにかく沢山あるので… ‣ やりたい処理ができるフック を探すのが難しい ● でもこれは必須! ‣ 用途に合ったフックを探すの が難しい ● これがいい加減だと、 後でコードを見て「なんでこん なトコでこんなコトを?」と ナゾになることも ‣ WPの実行順やタイミングに合 うフックを使うのも難しい ● タイミングを間違うと効かな い処理もあったりします。 ‣ うまく早くフックを探すには、 知識・経験・勘が必要 ● とりあずは修行! ● でも頑張って探すとWPを深く 知ることができて、それは…
  81. 81. ②仕組みを知るのが難しい 【WPカスタマイズの何が難しい】
  82. 82. 深入りするには仕組みの理解も ‣ WordPressの処理や構造の 理解が必要 ● 単純なことをしている時はそ うでも無いが ● 少し複雑な処理をやりだすと WPの仕組みのしっかりとし た理解が必要 ● 少なくとも基本理解は必須 ● query_posts で アワワワ ヽ( ;́Д`)ノ ‣ WPのソースコードも... ● WPコアのコードは良くも悪 くもPHPライクなので読み易 いと言えば読み易いが… ● 極端に長い関数など、読み 難いものもあり、開発者 (←僕)の理解を妨げる ● 後方互換性の為に残されてい る多くのコードや関数も、複 雑性に繋がっている?
  83. 83. ③他のプラグインのこと考えると  難しい。 【WPカスタマイズの何が難しい】
  84. 84. 他のプラグインと上手くやる ‣ 他のプラグインの動作や、 そのデータを考慮する必要が ある ● 好き勝手にルーティングを変 更したら、パン リストがヘ ンテコ?(WPのルール) ● フックして投稿を複製した ら、他のプラグインが作った カスタムフィールドがコピー されない(独自テーブル) ● プラグインAで行った処理が プラグインBの処理で反映さ れない…(実行順序) ‣ それらの対応コストを事前に 出すのが難しい ● 予期せぬ工数で アワワワ ヽ( ;́Д`)ノ
  85. 85. こんなWPならではの、 難しさの他にも、
  86. 86. 開発全般における難しさも、 普通にあったりして、
  87. 87. やっぱり何が難しいとは、 さっぱりとは言えない。 まぁ、システム開発全般そうではありますが (* - *)
  88. 88. でも、敢えて言うなら、
  89. 89. WPの作法に沿うこと。 難しいけれども、とても大切。
  90. 90. これはどんな フレームワークでも 同じ。
  91. 91. でも、それが意外と難しい。
  92. 92. たとえばちょっとした デザイン上のプラスαが、
  93. 93. ちょっとした 工数になったり。 実際これはよくあります。
  94. 94. 無闇なプラグインの利用が、
  95. 95. 予期せぬ 問題に繋がったりもします。 時々ありますが、インパクトが大きい…。
  96. 96. だから、
  97. 97. 開発者だけでなく、 できればチームのみんなで、 理解したい WordPress。
  98. 98. 良いサイトを作るためにも。 (o^ω^o) チームみんなで理解したいWordPress。
  99. 99. ごめん。難しいって言い過ぎた! フォローします!
  100. 100. 去年、簡単って言ったよね? ‣ 僕は WordCamp Osaka 2012 で「WP簡単だよ」 と発表しておりますので フォローします! ‣ 基本機能が充実!! ● 知っての通りの充実の基本 機能!Webアプリで必要な 機能がてんこもり! ‣ プラグインがあなたの 開発をサポート! ● 強力な味方のプラグイン! (使う分には!) ● でも無闇には使わない方が 色々と無難! ● プラグインにUIが付属 (そのまま納品できる) ● この辺りがいわゆるWeb App フレームワークと大き く違う
  101. 101.  もう1ページフォロー! ‣ めちゃくちゃ 開発者フレンドリー!! (さっき少し愚痴をこぼしましたが) ● DBのテーブル少ない ● スキーマ見たらホッとする ● フック多いけど、 覚えるルールは少ない ● PHPだし構造がシンプル だから、ワリと何とでも なる ● わずか数行でカスタム投稿 タイプを追加できるのは素 晴らしい ● M○を理解するよりは、 ずいぶん簡単! (↑あくまで個人的感想なので、  関係者各位お許しを…) ‣ 奇麗な管理画面に萌える ‣ コミュニティ熱いよね!
  102. 102. まとめ
  103. 103. ディレクターの方へ ‣ ディレクターだってWPの仕組 みを知っている方がずっと良い ● どんどん低くなる分業の壁 ‣ プラグインの過剰利用は避ける ● プラグイン同士の競合で困る ● 特に、同種のデータを扱う時 ● いらない機能まで入ってる (=>重くなるし邪魔だし) ● 独自のカスタマイズを難しく する。リスクやコストの増加 ‣ カスタマイズの実装をプラグイ ン化することも検討できる ● プラグイン化自体は簡単 ● 機能と外観の分離 ● 汎用性を高めるという点で、 難易度は上がる ● プラグイン化するメリット ● 受託開発したものをベースに、 公式プラグイン作成 ● ポートフォリオを豊かに ● 有償サポートをビジネスに
  104. 104. デザイナーの方へ ‣ 仕組みを知る事で自由を ● グラフィックデザインは アプリケーションUIの主 役 ● 仕組みを知ることでこそ 出来るアプローチやデザ インもある ● プログラマさんに文句言 われそうでやりたいこと が出来なかったり ● マジで怒られたり ‣ 今日はプラグインAPI中心 のお話しでしたが… ● フックはWordPressのカ スタマイズの根幹 ● コピペを卒業するために もフックの理解は必要 ● 今日の話で少しでも理解 が進むと嬉しいです
  105. 105. 開発者の方へ ‣ 凝ったWPカスタマイズの打診 があったとき ● 他に導入されるプラグインを確 認し、リスクを想定する ● 同種のデータを扱うものは注意 ● 想定が難しい時は、クライアン トとも相談 ‣ プラグイン開発を受注したら ● プラグイン化の目的を確認する ● 汎用化の度合いをクライアント と擦り合わせる ‣ プラグイン化を考えよう! ● プラグイン化も有用な実装手段 の一つ ● せっかく書いたコード、再利 用しやすくしない手はない ● 汎用化など、難しいところも あるが、結果、WPをもっとよ く理解できる ● せっかくだから、公式にアップ できるようになろう! (・∀・) オマエモナ
  106. 106. おまけ
  107. 107. フックの探し方。 僕の
  108. 108. フック名が分かる時 ‣ http://adambrown.info/ p/wp_hooks/version/3.5 ‣ ブラウザの検索で探せる ‣ サイトでソースまで閲覧で きるので ● 引数の確認 ● 意味合いの確認
  109. 109. 処理の流れで探したい時 ‣ Debug Bar Actions and Filters Addonプラグイン ‣ その画面で、呼ばれている アクションフックが、呼ば れている順で確認出来る ● あるタイミングで処理する フックを探したい時 ● フックの意味を確認したい
  110. 110. 雰囲気?で探したい時 ‣ ソースを検索する ● WordPress全体を検索 する(正規表現を使う) ● 「なんとなくこんな処理 がしたいんだけどフック あるかな?」的な時便利 ‣ 地道にソースを追う ● それっぽい場所のソース を開いて読むと、意外な 発見があったりする (do_action¦apply_filters)(_ref_array)?( ?['"][_'"w]*検索文字列 フック検索 正規表現
  111. 111. 道具は色々。 知っ得
  112. 112. WPのプログラムの道具は
  113. 113. Plugin API Shortcode API Widget API Database API - Metadata API - Options API - Transients API Settings API Theme Modification API Theme Customization API Quicktags API Rewrite API HTTP API File Header API File System API Dashboard Widget API XML-RPC WordPress API etc...etc... 他にもいろいろ、 在る。 http://wpdocs.sourceforge.jp/WordPress_API from Codex 他にも、wpdb や WP_Query 、wp-cron、 wp_mail や あと i18n も APIだと思うので、 実際もっとたーーーーーーっくさんある!
  114. 114. WordPress の API (1) ‣ Plugin API ● WordPressの既定の処理 を変更する ‣ ShortCode API ● 投稿本文で使えるマクロ スクリプトの登録 ‣ Widget API ● ウィジェットの作成 ‣ Database API ● Metadata API カスタムフィールドなど、 post/user/comment に 付帯するメタ情報の管理 ● Option API アプリケーションの オプション値などを保存 ● Transients API 一時キャッシュの為のAPI
  115. 115. WordPress の API (2) ‣ Settings API ● プラグインやテーマの独自の管 理画面の作成をサポートする ‣ Theme Modification API ● カレントテーマ固有のオプショ ン値を取得・保存 ‣ Theme Customaization API ● テーマカスタマイザーの準備や 拡張 ‣ Quicktags API ● 投稿編集画面のビジュアルエ ディタに機能を追加 ‣ Rewrite API ● URLルーティングの追加・変 更 ‣ HTTP API ● http GET/POST/Other.. でリ モートサーバーのデータを取得
  116. 116. WordPress の API (3) ‣ File Header API ● テーマやプラグインのメタ情報 を取得 ‣ File System API ● ローカルの他、FTP、SSH2な どでのファイルアクセス ‣ ダッシュボードウィジェット API ● 管理画面ダッシュボードにウィ ジェットを追加 ‣ XML-RPC WordPress API ● XML-RPC を使った Web API インターフェース
  117. 117. ご清聴、ありがとうございました!
  118. 118. @yuka2py
  119. 119. この文書は クリエイティブ・コモンズ 表示 - 継承 2.1 日本 ライセンスの下に提供されています。

×