重要ですが、見落とされがちな特徴として、プラグイン内でカスタムフックを使用すると、他の開発者がプラグインを拡張し、修正できます。
カスタムフックは、WordPress コアフックと同じように作成され、呼び出されます。
フックの作成
カスタムフックを作成する場合、アクションには do_action()
を、フィルターには apply_filters()
を使用します。
apply_filters()
を使うことをおすすめします。とりわけフロントエンドでは。
これにより、ユーザーのニーズに応じてプラグインを簡単に修正できます。
フックへのコールバックの追加
カスタムフックにコールバック関数を追加する場合、アクションには add_action()
を、フィルターには add_filter()
を使用します。
名前の競合
名前の競合 (「衝突」) は、2人の開発者が同じフック名をまったく異なる目的で使用する場合に発生します。これは発見しにくいバグにつながります。そのため、他のプラグインとのフック名の衝突を避けるために、フック名の前にユニークな文字列を付けることが重要です。
たとえば、フィルター名 email_body
はありきたり過ぎて、2人以上の複数の開発者が異なるプラグイン内で異なる目的のために使用する可能性があります。これを避けるために接頭辞を付けます。たとえば、このハンドブックで例として使われている関数は、接頭辞に wporg_
を使用します。
接頭辞を選ぶ際には、会社名、WordPress ハンドルネーム、プラグイン名など、なんでも好きなものを使うことができます。目標はユニークなものにすることですので、賢く選びましょう。
例
拡張可能なアクション: 設定フォーム
プラグインが管理パネルに設定フォームを追加する場合、アクションを使用して、他のプラグインが独自の設定を追加できるようにできます。
do_action( 'wporg_after_settings_page_html' );
これで、別のプラグインが wporg_after_settings_page_html
フック用のコールバック関数を登録し、新しい設定を注入できるようになりました:
add_action( 'wporg_after_settings_page_html', 'myprefix_add_settings' );
これはアクションですので、値は返されないことに注意してください。また、優先順位が与えられていないので、デフォルトの優先順位10で作動されることにも注意してください。
拡張可能なフィルター: カスタム投稿タイプ
この例では、新しい投稿タイプが登録されるときに、それを定義するパラメータはフィルターを通して渡されるので、投稿タイプが作成される前に別のプラグインがそれらを変更できます。
function wporg_create_post_type() {
$post_type_params = [/* ... */];
register_post_type(
'post_type_slug',
apply_filters( 'wporg_post_type_params', $post_type_params )
);
}
これで、別のプラグインが wporg_post_type_params
フック用のコールバック関数を登録し、投稿タイプのパラメータを変更できるようになりました:
function myprefix_change_post_type_params( $post_type_params ) {
$post_type_params['hierarchical'] = true;
return $post_type_params;
}
add_filter( 'wporg_post_type_params', 'myprefix_change_post_type_params' );
フィルターはデータを受け取り、修正し、それを返すことに注意してください。そのため、( myprefix_change_post_type_params
) というコードは、echo や html などを使って直接画面に何も出力しません。また、返された値は変数に代入されることなく register_post_type
によって直接使用されることにも注意してください。これは、その余分な (不必要な) ステップを省略するための単純なものです。
また、優先順位が与えられていないため、デフォルトの優先順位10で動作する点にも注意してください。また、パラメータの数の値が指定されていないため、デフォルトの1が仮定されます。