46
1 プラグインフックの 仕組みとカスタマイズ BuddyPressとSubscribe2 水野 史土 http://php-web.net/ mizuno

Mizuno buddypress-plugin

Embed Size (px)

DESCRIPTION

wordpress plugin のアクションフック、フィルターフックの仕組み。 フックの仕組みを利用して、既存のプラグインをカスタマイズする方法。

Citation preview

Page 1: Mizuno buddypress-plugin

1

プラグインフックの仕組みとカスタマイズ

BuddyPressとSubscribe2

水野 史土http://php-web.net/

mizuno

Page 2: Mizuno buddypress-plugin

2

WordPress に関する活動

● WordBench● 川崎、名古屋、大阪、神戸

● オープンソースカンファレンス (OSC)● 東京、名古屋、京都、神戸

● 公式マニュアル (Codex) ● プラグイン配布

● ShowID for Post/Page/Category/Tag/Comment● Select Category to Post

Page 3: Mizuno buddypress-plugin

3

プラグイン

● WP にプログラムを追加(どこで?何を?)● 追加する場所 → フック● プログラムの中身 → PHP

● フィルターフックとアクションフック● WP に多数用意されている● ソースを読んでフックの箇所を調べる

● プラグイン同士の整合性に注意する● フック箇所/中身を調べる

Page 4: Mizuno buddypress-plugin

4

フィルターフック

● WP の処理データを改変● the_title (記事タイトル)● excerpt_length (抜粋の長さ)

● フックでプラグインが実行可能● add_filter(フック名, プラグイン関数)

● Codex の例: 抜粋の長さを変える● どこで? → 抜粋 ● 何を? → 長さの変更

Page 5: Mizuno buddypress-plugin

5

WP の処理抜粋

長さの変更

WP に apply_filters が用意されている

add_filter でプラグイン登録

「抜粋の長さを変更」を実行

apply_filters('excerpt_length')

add_filter

Page 6: Mizuno buddypress-plugin

6

例: 抜粋の長さを変えるfunction new_excerpt_length($length) {

return 20;

}add_filter('excerpt_length', 'new_excerpt_length');

フック名 関数

Multibyte patch 使用時は excerpt_mblength

Page 7: Mizuno buddypress-plugin

7

アクションフック

● WP の処理途中の目印● wp_head (header.php読込)● comment_post (コメント投稿)

● フックでプラグインが実行可能● add_action(フック名, プラグイン関数)

● Codex の例: HTMLヘッダーにFavicon表示● どこで? → ヘッダー読込● 何を? → favicon 追加

Page 8: Mizuno buddypress-plugin

8

WP の処理ヘッダー読込

favicon 追加

WP に do_action が用意されている

add_action でプラグイン登録

「favicon 追加」を実行

do_action('wp_head')

add_action

Page 9: Mizuno buddypress-plugin

9

例: ヘッダー → favicon表示

function favicon_link() {

echo '<link rel="shortcut icon" type="image/x-icon" href="/favicon.ico" />' . "\n";

}

add_action('wp_head', 'favicon_link');

フック名 関数

Page 10: Mizuno buddypress-plugin

10

Subscribe2

● メルマガプラグイン● どこで?

– ユーザー登録時● 何を?

– メルマガ登録

もちろん記事投稿-メール配信もある

Page 11: Mizuno buddypress-plugin

11

WP の処理ユーザー登録

Subscribe2 に登録する

WPのユーザー登録にフックする

WP登録と同時にメルマガに登録

Page 12: Mizuno buddypress-plugin

12

BuddyPress

● WPをソーシャルネットワーク化● ワードベンチ http://wordbench.org/ ● スローフードあいち http://www.slowaichi.net/

● 独自の関数、独自フックが多数● ソースは比較的綺麗● 独自の関数/フックは bp_ で始まる

Page 13: Mizuno buddypress-plugin

13

BuddyPress と他のプラグイン

● WP用のプラグインをBPで使いたい● BP 独自のフックがある● そのままで動くとは限らない

● BuddyPressのフックで動かす● BuddyPressにはフックが多く用意されている● テンプレートファイルを調べる● プラグインのフック箇所を書き換える

Page 14: Mizuno buddypress-plugin

14

WP の処理ユーザー登録

Subscribe2 に登録する

BP の処理ユーザー登録

BPのユーザー登録処理がWPと異なる

そのままではメルマガ登録できない

Page 15: Mizuno buddypress-plugin

15

Page 16: Mizuno buddypress-plugin

16

WP の処理ユーザー登録

Subscribe2 に登録する

BP の処理ユーザー登録

BPのユーザー登録にフックする

BP登録と同時にメルマガに登録

Page 17: Mizuno buddypress-plugin

17

Page 18: Mizuno buddypress-plugin

18

Subscribe2のソースを調べる

● メルマガ登録処理をする関数(メソッド)● s2class->register_form

● フック先を調べる● add_action('register_form', array(&$this,

'register_form'));

Page 19: Mizuno buddypress-plugin

19

WP の処理ユーザー登録

Subscribe2 に登録する

add_aciton('register_form') は、

WP のユーザー登録にフックする

add_action('register_form')

do_action('register_form')

Page 20: Mizuno buddypress-plugin

20

BPでのフックの場所を調べる● WordPress

● ファイル wp-login.php● フック register_form

● BuddyPress

● ファイル bp-themes/bp-default/registration/register.php ● フック bp_custom_profile_edit_fields

● subscribe2.php で該当箇所を書き換えるadd_action('register_form', array(&$this, 'register_form'));

add_action('bp_custom_profile_edit_fields ', array(&$this, 'register_form'));

Page 21: Mizuno buddypress-plugin

21

WP の処理ユーザー登録

Subscribe2 に登録する

BP の処理ユーザー登録

add_action('bp_custom_profile_edit_fields')

に変更して、BP のユーザー登録にフックする

do_action('bp_custom_profile_edit_fields')

add_action('bp_custom_profile_edit_fields')

Page 22: Mizuno buddypress-plugin

22

プラグイン本体は改変しない

● 前述の方法はプラグイン本体を書き換える● プラグインアップデート時に困る

● プラグイン本体は書き換えない方法● functions.php に書く

if ( class_exists('s2class') && $mysubscribe2 instanceof s2class ) {

add_action('bp_custom_profile_edit_fields', array(&$mysubscribe2, 'register_form'));

}

Page 23: Mizuno buddypress-plugin

23

参考資料&ライセンス

● Codex http://wpdocs.sourceforge.jp/● BuddyPress http://buddypress.org/● Subscribe2

http://subscribe2.wordpress.com/

● CC-BY-SA 表示&継承● 誰でも自由に利用可能

Page 24: Mizuno buddypress-plugin

Oct. 30, 2010

Mizuno WordCamp Nagoya 2010 1

Oct. 30, 2010 Mizuno WordCamp Nagoya 2010 1

プラグインフックの仕組みとカスタマイズ

BuddyPressとSubscribe2

水野 史土http://php-web.net/

mizuno

Page 25: Mizuno buddypress-plugin

Oct. 30, 2010

Mizuno WordCamp Nagoya 2010 2

Oct. 30, 2010 Mizuno WordCamp Nagoya 2010 2

WordPress に関する活動

● WordBench● 川崎、名古屋、大阪、神戸

● オープンソースカンファレンス (OSC)● 東京、名古屋、京都、神戸

● 公式マニュアル (Codex) ● プラグイン配布

● ShowID for Post/Page/Category/Tag/Comment● Select Category to Post

ワードベンチ:川崎、名古屋、大阪、神戸ユーザー同士で交流

OSC:東京、名古屋、京都、神戸他のCMS(Concrete5, Drupal, Geeklog,

Joruri, MODx, Typo3等)やLinux、MySQL等、ウェブを支えるコミュニティと交流

公式マニュアルドキュメントの共有

プラグインShowID for Post/Page/Category/Tag/CommentSelect Category to Post(公式に登録準備中)

Page 26: Mizuno buddypress-plugin

Oct. 30, 2010

Mizuno WordCamp Nagoya 2010 3

Oct. 30, 2010 Mizuno WordCamp Nagoya 2010 3

プラグイン

● WP にプログラムを追加(どこで?何を?)● 追加する場所 → フック● プログラムの中身 → PHP

● フィルターフックとアクションフック● WP に多数用意されている● ソースを読んでフックの箇所を調べる

● プラグイン同士の整合性に注意する● フック箇所/中身を調べる

プラグイン:どこで、何をするかを決める

ワードプレス本体の機能はそれほど多くないプラグインを作ることで拡張可能

フィルターとアクションの2種類のフック公式マニュアルの例を元に解説

プラグイン同士が競合することがあるそれぞれのプラグイン中身を調べておくフックする箇所に注意する

Page 27: Mizuno buddypress-plugin

Oct. 30, 2010

Mizuno WordCamp Nagoya 2010 4

Oct. 30, 2010 Mizuno WordCamp Nagoya 2010 4

フィルターフック

● WP の処理データを改変● the_title (記事タイトル)● excerpt_length (抜粋の長さ)

● フックでプラグインが実行可能● add_filter(フック名, プラグイン関数)

● Codex の例: 抜粋の長さを変える● どこで? → 抜粋 ● 何を? → 長さの変更

フィルターフックとアクションフックがある

ワードプレスの処理データを変更する場合はフィルターを使う

Page 28: Mizuno buddypress-plugin

Oct. 30, 2010

Mizuno WordCamp Nagoya 2010 5

Oct. 30, 2010 Mizuno WordCamp Nagoya 2010 5

WP の処理抜粋

長さの変更

WP に apply_filters が用意されている

add_filter でプラグイン登録

「抜粋の長さを変更」を実行

apply_filters('excerpt_length')

add_filter

抜粋の長さを変更する

ワードプレス側apply_filters が用意されている

プラグインの側フィルターに対する処理を書くadd_filter でフックする

Page 29: Mizuno buddypress-plugin

Oct. 30, 2010

Mizuno WordCamp Nagoya 2010 6

Oct. 30, 2010 Mizuno WordCamp Nagoya 2010 6

例: 抜粋の長さを変える

function new_excerpt_length($length) {

return 20;

}add_filter('excerpt_length', 'new_excerpt_length');

フック名 関数

Multibyte patch 使用時は excerpt_mblength

フィルターフックの例

抜粋の長さ(デフォルト55単語)を変更できる

日本語の場合(マルチバイトパッチ使用)は、excerpt_mblength で設定する

Page 30: Mizuno buddypress-plugin

Oct. 30, 2010

Mizuno WordCamp Nagoya 2010 7

Oct. 30, 2010 Mizuno WordCamp Nagoya 2010 7

アクションフック

● WP の処理途中の目印● wp_head (header.php読込)● comment_post (コメント投稿)

● フックでプラグインが実行可能● add_action(フック名, プラグイン関数)

● Codex の例: HTMLヘッダーにFavicon表示● どこで? → ヘッダー読込● 何を? → favicon 追加

アクションフックは、ワードプレスの処理の目印

フックのある箇所で、プラグイン実行

PHP で記述するので、自由度、汎用性に優れる

Page 31: Mizuno buddypress-plugin

Oct. 30, 2010

Mizuno WordCamp Nagoya 2010 8

Oct. 30, 2010 Mizuno WordCamp Nagoya 2010 8

WP の処理ヘッダー読込

favicon 追加

WP に do_action が用意されている

add_action でプラグイン登録

「favicon 追加」を実行

do_action('wp_head')

add_action

ヘッダー読込時にファビコンを追加する

ワードプレス側do_action が用意されている

プラグイン側フックでの処理を書くフックする場所を add_action で指定する

Page 32: Mizuno buddypress-plugin

Oct. 30, 2010

Mizuno WordCamp Nagoya 2010 9

Oct. 30, 2010 Mizuno WordCamp Nagoya 2010 9

例: ヘッダー → favicon表示

function favicon_link() {

echo '<link rel="shortcut icon" type="image/x-icon" href="/favicon.ico" />' . "\n";

}

add_action('wp_head', 'favicon_link');

フック名 関数

HTML ヘッダー部分に、ファビコンを表示する

wp_head のところで、ヘッダー出力処理をする

ワードプレス本体やテンプレートを改変しないでカスタマイズできる

Page 33: Mizuno buddypress-plugin

Oct. 30, 2010

Mizuno WordCamp Nagoya 2010 10

Oct. 30, 2010 Mizuno WordCamp Nagoya 2010 10

Subscribe2

● メルマガプラグイン● どこで?

– ユーザー登録時● 何を?

– メルマガ登録

もちろん記事投稿-メール配信もある

サブスクライブは、メルマガ配信プラグイン

ユーザー登録時に、「メルマガ登録する?」か選択可能

もちろん、記事投稿 → メール投稿という処理がメインだが、今回取り上げるのはこちら

Page 34: Mizuno buddypress-plugin

Oct. 30, 2010

Mizuno WordCamp Nagoya 2010 11

Oct. 30, 2010 Mizuno WordCamp Nagoya 2010 11

WP の処理ユーザー登録

Subscribe2 に登録する

WPのユーザー登録にフックする

WP登録と同時にメルマガに登録

サブスクライブは、ワードプレスのユーザー登録にフックしている

ワードプレスのユーザー登録時に、「メルマガ登録」も一緒に行うことができる

Page 35: Mizuno buddypress-plugin

Oct. 30, 2010

Mizuno WordCamp Nagoya 2010 12

Oct. 30, 2010 Mizuno WordCamp Nagoya 2010 12

BuddyPress

● WPをソーシャルネットワーク化● ワードベンチ http://wordbench.org/ ● スローフードあいち http://www.slowaichi.net/

● 独自の関数、独自フックが多数● ソースは比較的綺麗● 独自の関数/フックは bp_ で始まる

バディプレスは、ソーシャルネットワークシステムを作るためのプラグイン

利用例:ワードベンチ、スローフードあいち等

技術的な話バディプレス独自の関数、独自のフックがたく

さん用意されている

ソースは綺麗(WP本体は汚い)中身を理解しやすい

独自の関数やフックは bp_ で始まる他のプラグインと名前が被ることはまず無い

Page 36: Mizuno buddypress-plugin

Oct. 30, 2010

Mizuno WordCamp Nagoya 2010 13

Oct. 30, 2010 Mizuno WordCamp Nagoya 2010 13

BuddyPress と他のプラグイン

● WP用のプラグインをBPで使いたい● BP 独自のフックがある● そのままで動くとは限らない

● BuddyPressのフックで動かす● BuddyPressにはフックが多く用意されている● テンプレートファイルを調べる● プラグインのフック箇所を書き換える

バディプレスには、独自のフックがある

ワードプレス用プラグインがそのまま動作するとは限らない

プラグインのフック箇所を調べて、バディプレスのフックに書き換える

Page 37: Mizuno buddypress-plugin

Oct. 30, 2010

Mizuno WordCamp Nagoya 2010 14

Oct. 30, 2010 Mizuno WordCamp Nagoya 2010 14

WP の処理ユーザー登録

Subscribe2 に登録する

BP の処理ユーザー登録

BPのユーザー登録処理がWPと異なる

そのままではメルマガ登録できない

バディプレスは独自の登録画面を用意しており、そこからユーザー登録する

サブスクライブをそのままインストールした場合、バディプレスのユーザー登録にフックしていないので、バディプレスの登録画面で「メルマガ登録」を一緒にはできない

一度にできるほうが、ユーザーにとって嬉しい

Page 38: Mizuno buddypress-plugin

Oct. 30, 2010

Mizuno WordCamp Nagoya 2010 15

Oct. 30, 2010 Mizuno WordCamp Nagoya 2010 15

Page 39: Mizuno buddypress-plugin

Oct. 30, 2010

Mizuno WordCamp Nagoya 2010 16

Oct. 30, 2010 Mizuno WordCamp Nagoya 2010 16

WP の処理ユーザー登録

Subscribe2 に登録する

BP の処理ユーザー登録

BPのユーザー登録にフックする

BP登録と同時にメルマガに登録

サブスクライブのフック先をバディプレスの登録画面に変更すればOK

Page 40: Mizuno buddypress-plugin

Oct. 30, 2010

Mizuno WordCamp Nagoya 2010 17

Oct. 30, 2010 Mizuno WordCamp Nagoya 2010 17

Page 41: Mizuno buddypress-plugin

Oct. 30, 2010

Mizuno WordCamp Nagoya 2010 18

Oct. 30, 2010 Mizuno WordCamp Nagoya 2010 18

Subscribe2のソースを調べる

● メルマガ登録処理をする関数(メソッド)● s2class->register_form

● フック先を調べる● add_action('register_form', array(&$this,

'register_form'));

プラグインのソースを調べる

メルマガ登録処理をしている関数(オブジェクト指向なので、メソッド)を調べる

s2class->register_form

そのメソッドがフックしている場所を調べるregister_form

Page 42: Mizuno buddypress-plugin

Oct. 30, 2010

Mizuno WordCamp Nagoya 2010 19

Oct. 30, 2010 Mizuno WordCamp Nagoya 2010 19

WP の処理ユーザー登録

Subscribe2 に登録する

add_aciton('register_form') は、

WP のユーザー登録にフックする

add_action('register_form')

do_action('register_form')

プラグインの初期設定add_action('register_form')

ワードプレスのユーザー登録にフックしているバディプレスのユーザー登録画面では、フック

を呼び出ししない

Page 43: Mizuno buddypress-plugin

Oct. 30, 2010

Mizuno WordCamp Nagoya 2010 20

Oct. 30, 2010 Mizuno WordCamp Nagoya 2010 20

BPでのフックの場所を調べる● WordPress

● ファイル wp-login.php● フック register_form

● BuddyPress

● ファイル bp-themes/bp-default/registration/register.php ● フック bp_custom_profile_edit_fields

● subscribe2.php で該当箇所を書き換えるadd_action('register_form', array(&$this, 'register_form'));

add_action('bp_custom_profile_edit_fields', array(&$this, 'register_form'));

サブスクライブがフックしている場所をワードプレス、バディプレスのソースを調べて探す

ワードプレスでは、wp-login.php の register_formバディプレスでは、register.php の

bp_custom_profile_edit_fields

サブスクライブプラグインの、フック箇所を書き換えることで、バディプレスのユーザー登録画面にフックする

Page 44: Mizuno buddypress-plugin

Oct. 30, 2010

Mizuno WordCamp Nagoya 2010 21

Oct. 30, 2010 Mizuno WordCamp Nagoya 2010 21

WP の処理ユーザー登録

Subscribe2 に登録する

BP の処理ユーザー登録

add_action('bp_custom_profile_edit_fields')

に変更して、BP のユーザー登録にフックする

do_action('bp_custom_profile_edit_fields')

add_action('bp_custom_profile_edit_fields')

サブスクライブのフック先をバディプレスの登録画面に変更すればOK

bp_custom_profile_edit_fields にフックする

Subscribe2.php を書き換えれば解決する

Page 45: Mizuno buddypress-plugin

Oct. 30, 2010

Mizuno WordCamp Nagoya 2010 22

Oct. 30, 2010 Mizuno WordCamp Nagoya 2010 22

プラグイン本体は改変しない

● 前述の方法はプラグイン本体を書き換える● プラグインアップデート時に困る

● プラグイン本体は書き換えない方法● functions.php に書く

if ( class_exists('s2class') && $mysubscribe2 instanceof s2class ) {

add_action('bp_custom_profile_edit_fields', array(&$mysubscribe2, 'register_form'));

}

プラグイン本体は書き換えないようにすると、プラグインアップデート時に楽(大幅に仕様変更があった時は別だが)

Subscribe2 プラグインはカスタマイズしやすいように記述されている。オブジェクト指向で書かれていないプラグインだと大変かもしれない。

Page 46: Mizuno buddypress-plugin

Oct. 30, 2010

Mizuno WordCamp Nagoya 2010 23

Oct. 30, 2010 Mizuno WordCamp Nagoya 2010 23

参考資料&ライセンス

● Codex http://wpdocs.sourceforge.jp/● BuddyPress http://buddypress.org/● Subscribe2

http://subscribe2.wordpress.com/

● CC-BY-SA 表示&継承● 誰でも自由に利用可能

公式マニュアル、プラグインのサイトの紹介

この資料のライセンス

クリエイティブコモンズ表示継承引用元を表記する同一ライセンスにする

を満たせば、誰でも自由に利用可能

ワードプレス、ブラグイン、バディプレスに興味をもった人は、自由に使ってください。