mizuno buddypress-plugin

Post on 04-Jul-2015

1.837 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

WoedCamp Nagoya 2010

TRANSCRIPT

1

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

BuddyPressとSubscribe2

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

mizuno

2

WordPress に関する活動

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

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

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

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

3

プラグイン

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

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

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

4

フィルターフック

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

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

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

5

WP の処理抜粋

長さの変更

WP に apply_filters が用意されている

add_filter でプラグイン登録

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

apply_filters('excerpt_length')

add_filter

6

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

return 20;

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

フック名 関数

Multibyte patch 使用時は excerpt_mblength

7

アクションフック

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

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

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

8

WP の処理ヘッダー読込

favicon 追加

WP に do_action が用意されている

add_action でプラグイン登録

「favicon 追加」を実行

do_action('wp_head')

add_action

9

例: ヘッダー → favicon表示

function favicon_link() {

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

}

add_action('wp_head', 'favicon_link');

フック名 関数

10

Subscribe2

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

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

– メルマガ登録

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

11

WP の処理ユーザー登録

Subscribe2 に登録する

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

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

12

BuddyPress

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

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

13

BuddyPress と他のプラグイン

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

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

14

WP の処理ユーザー登録

Subscribe2 に登録する

BP の処理ユーザー登録

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

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

15

16

WP の処理ユーザー登録

Subscribe2 に登録する

BP の処理ユーザー登録

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

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

17

18

Subscribe2のソースを調べる

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

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

'register_form'));

19

WP の処理ユーザー登録

Subscribe2 に登録する

add_aciton('register_form') は、

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

add_action('register_form')

do_action('register_form')

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'));

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')

22

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

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

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

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

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

}

23

参考資料&ライセンス

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

http://subscribe2.wordpress.com/

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

Oct. 30, 2010

Mizuno WordCamp Nagoya 2010 1

Oct. 30, 2010 Mizuno WordCamp Nagoya 2010 1

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

BuddyPressとSubscribe2

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

mizuno

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(公式に登録準備中)

Oct. 30, 2010

Mizuno WordCamp Nagoya 2010 3

Oct. 30, 2010 Mizuno WordCamp Nagoya 2010 3

プラグイン

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

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

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

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

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

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

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

Oct. 30, 2010

Mizuno WordCamp Nagoya 2010 4

Oct. 30, 2010 Mizuno WordCamp Nagoya 2010 4

フィルターフック

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

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

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

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

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

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 でフックする

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 で設定する

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 で記述するので、自由度、汎用性に優れる

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 で指定する

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 のところで、ヘッダー出力処理をする

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

Oct. 30, 2010

Mizuno WordCamp Nagoya 2010 10

Oct. 30, 2010 Mizuno WordCamp Nagoya 2010 10

Subscribe2

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

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

– メルマガ登録

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

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

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

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

Oct. 30, 2010

Mizuno WordCamp Nagoya 2010 11

Oct. 30, 2010 Mizuno WordCamp Nagoya 2010 11

WP の処理ユーザー登録

Subscribe2 に登録する

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

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

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

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

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_ で始まる他のプラグインと名前が被ることはまず無い

Oct. 30, 2010

Mizuno WordCamp Nagoya 2010 13

Oct. 30, 2010 Mizuno WordCamp Nagoya 2010 13

BuddyPress と他のプラグイン

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

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

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

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

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

Oct. 30, 2010

Mizuno WordCamp Nagoya 2010 14

Oct. 30, 2010 Mizuno WordCamp Nagoya 2010 14

WP の処理ユーザー登録

Subscribe2 に登録する

BP の処理ユーザー登録

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

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

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

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

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

Oct. 30, 2010

Mizuno WordCamp Nagoya 2010 15

Oct. 30, 2010 Mizuno WordCamp Nagoya 2010 15

Oct. 30, 2010

Mizuno WordCamp Nagoya 2010 16

Oct. 30, 2010 Mizuno WordCamp Nagoya 2010 16

WP の処理ユーザー登録

Subscribe2 に登録する

BP の処理ユーザー登録

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

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

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

Oct. 30, 2010

Mizuno WordCamp Nagoya 2010 17

Oct. 30, 2010 Mizuno WordCamp Nagoya 2010 17

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

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')

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

を呼び出ししない

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

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

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 を書き換えれば解決する

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

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 表示&継承● 誰でも自由に利用可能

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

この資料のライセンス

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

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

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

top related