みなさんこんにちは!速ラボ編集部です。
今回は、WordPressのプラガブル関数(Pluggable Functions)の仕組みや実装方法などについて徹底解説したいと思います。
プラガブル関数とは、WordPressコアの関数を、読み込まれる前に同名の関数で独自定義して処理を「上書き」できる仕組みを持つ関数のことをいいます。
このプラガブル関数の利用により、コア側で定義している関数を手軽に上書きしてカスタマイズすることが可能です。
今回の内容は技術的に少しマニアックな内容になるかと思いますが、初心者エンジニアの方にも無理なく理解でき、仕事でそのまま利用できるように解説しておりますので、よろしければぜひご活用いただければと思います。
プラガブル関数とは
プラガブル関数(Pluggable Functions)とは、WordPressのコアで定義されている関数を、そのコアの関数が読み込まれる手前で同じ関数名で独自に定義して読み込ませることで「上書き」できる仕組みを持った関数のことを言います。
通常、WordPressのコア関数は直接編集することが推奨されていませんが、プラガブル関数はあらかじめfunction_exists()関数で定義の有無を確認してから読み込まれるため、同じ名前の関数を先に定義しておけばコアの処理を差し替えることができます。
これにより、コアを改変せずに独自の処理を追加・変更でき、アップデート時の影響を受けにくいというメリットがあります。
ただし、すべての関数がプラガブルというわけではなく、主に認証やメール送信といった特定の処理に限定されています。
詳しくは以下の公式ページの解説がありますので、よろしければご確認ください。
プラガブル関数の種類
次に、プラガブル関数の種類について解説いたします。
ここで解説するプラガブル関数をすべて覚える必要はありません。
割と多くの種類がありますので、ご自身のよく利用されるであろう関数をピックアップしておき、覚えきれないその他の関数に関しては、実際に実務の際にその都度検索などしていただき対応すればOKかと思います。
プラガブル関数の種類としては以下があります。
- auth_redirect
- cache_users
- check_admin_referer
- check_ajax_referer
- get_avatar
- get_currentuserinfo
- get_user_by_email (deprecated)
- get_user_by
- get_userdatabylogin (deprecated)
- get_userdata
- is_user_logged_in
- wp_authenticate
- wp_check_password
- wp_clear_auth_cookie
- wp_create_nonce
- wp_generate_auth_cookie
- wp_generate_password
- wp_get_current_user
- wp_hash_password
- wp_hash
- wp_logout
- wp_mail
- wp_new_user_notification
- wp_nonce_tick
- wp_notify_moderator
- wp_notify_postauthor
- wp_parse_auth_cookie
- wp_password_change_notification
- wp_rand
- wp_redirect
- wp_safe_redirect
- wp_salt
- wp_sanitize_redirect
- wp_set_auth_cookie
- wp_set_current_user
- wp_set_password
- wp_text_diff
- wp_validate_auth_cookie
- wp_validate_redirect
- wp_verify_nonce
ちなみにこれらのプラガブル関数の定義は、WordPressコアの「wp-includes/pluggable.php」にて定義されております。
それぞれプラガブル関数の種類になりますが、いずれもある程度ざっと把握しておき、詳しく知りたい方は以下の記事ページをご確認いただくと良いかと思います。
ちなみに実際のWordPressコアでのプラガブル関数のファイルは「wp-includes/pluggable.php」にて配置されております。
以下のWordPress公式のGithubのページがありますので、よろしければご確認ください。
プラガブル関数の使い方
プラガブル関数の使い方は、簡単に言うと、WordPressコアにて定義されているプラガブル関数よりも、独自に同じ関数名で定義したファイルを先に読み込むことにより、コアにて定義されている関数の内容を上書き(オーバーライド)することによって使用できます。
プラガブル関数は「wp-includes/pluggable.php」に定義されており、必ずfunction_exists()関数で存在確認を行った上で定義されているため、既に定義されている場合はスキップされると言う仕組みになっております。
ちなみに通常のプラグインやテーマからプラガブル関数を上書きしようとしても、読み込み順の関係で上書きに失敗することがあります。
そこでMU(Must-Use)プラグインを利用すると確実に上書きできます。
MUプラグインは「wp-content/mu-plugins/」に設置することで、WordPress の起動時に必ず読み込まれ、pluggable.php よりも前に実行されるため、プラガブル関数を確実に上書き可能です。
こちらはWordPressのコアのソースコードレベルで読み込み順を把握できればなおイメージしやすいと思います。wp-settings.phpにて把握できますので、もし興味がある方は見てみてください笑
また、MUプラグインでの実装方法は以下の記事をご確認いただくと対応可能なので、よろしければご確認ください。そんなに難しくはありません。
一旦空のサンプルプラグインを、MUプラグインにて作成してください。
MUプラグインでの空のサンプルプラグインの作成が完了したら、そのプラグインのPHPファイルに以下のコードをコピー&ペーストしてください。
<?php
if ( ! function_exists( 'wp_new_user_notification' ) ) {
/**
* 新規ユーザー登録時の通知メールをカスタマイズ
*/
function wp_new_user_notification( $user_id, $deprecated = null, $notify = '' ) {
$user = get_userdata( $user_id );
// 管理者に通知
$admin_email = get_option( 'admin_email' );
$subject = sprintf( '[%s] 新しいユーザーが登録されました', get_bloginfo( 'name' ) );
$message = "ユーザー名: " . $user->user_login . "\n";
$message .= "メールアドレス: " . $user->user_email . "\n";
wp_mail( $admin_email, $subject, $message );
// 本人への通知(必要なら送信)
if ( $notify === 'user' || $notify === 'both' ) {
$subject = sprintf( '[%s] ご登録ありがとうございます', get_bloginfo( 'name' ) );
$message = $user->display_name . " さん、ようこそ!テスト動作によるユーザー登録へ\n";
$message .= "あなたのアカウントが作成されました。よかったな(呪術廻戦のパパ黒風)\n";
wp_mail( $user->user_email, $subject, $message );
}
}
}上記コードは、プラガブル関数の一つであるwp_new_user_notification()関数を上書きするコードになります。
ポイントは、必ずfunction_exists()関数で関数の定義の有無を確認しておき、プラガブル関数と同一の関数名で定義して実装することです。
処理の内容的には、新規ユーザー登録時に管理者へカスタマイズした通知メールを送信しつつ、オプションでユーザー本人にもカスタマイズした歓迎メールを送る処理になります。
ペーストが完了したら、WordPress管理画面左メニュー「ユーザー」から「ユーザーを追加」にてユーザーを新規追加してみてください。
このとき「ユーザーに通知を送信」に関してはONにしておいてください。

新規追加が完了したら、管理者宛のメールと新規作成したユーザー本人宛の2通のメールが届くはずです。
まず管理者宛のメールは下図のイメージです。ちゃんとサンプルコードの内容になっていますね。

新規作成したユーザー本人宛のメールは下図のイメージです。こちらもちゃんとコードの通りになっているかと思います。

これでプラガブル関数の実装は完了です。お疲れ様でした!
意外と難しくなかったかと思います。
プラガブル関数の実装の注意点(プラガブル関数よりできればフックで対応)
ここで、プラガブル関数のカスタマイズをする際の注意点があります。
プラガブル関数は、WordPressコアの関数を上書きして挙動を変えられる便利な仕組みですが、基本的には推奨される方法ではありません。
なぜなら、WordPressのアップデートで仕様が変わった場合に動作が崩れやすく、他のプラグインとの競合も起こりやすいためです。
可能であれば、まずはアクションフックやフィルターフックを使って対応するのが安全で柔軟です。
フックが用意されていない処理をどうしても差し替える必要がある場合にのみ、プラガブル関数を利用するのが望ましい使い方です。
ここで、フックのメリットを整理すると以下になるかと思います。
- コアの関数を上書きする必要がなく、WordPressのアップデートで壊れるリスクが低い
- 複数のプラグインやテーマが同じフックに処理を追加できる
- 関数全体を上書きするのではなく、必要な処理だけを追加・変更できる
次に、プラガブル関数のメリットを整理すると以下になるかと思います。
- フックが用意されていない処理を差し替えられる
- 関数の処理全体を自由に書き換えられる
プラガブル関数を利用する際は、まずフックでカスタマイズが実現できないかを考えていただき、上記のようなメリットを前提にした上で実装をご判断いただくことを強くおすすめいたします。
まとめ
今回は、WordPressのプラガブル関数(Pluggable Functions)について、その仕組みや実装方法を解説しました。
プラガブル関数とは、WordPressコアの関数を読み込む前に同名の関数を独自定義することで処理を「上書き」できる仕組みを持った関数です。
これにより、コアの関数を直接編集せずにカスタマイズを実現できます。
ただし、基本的にはフックで対応できる場合はフックを優先する方が安全で、プラガブル関数は最終手段として使うのが望ましい方法です。


コメント