WordPress

マルチサイトでupdate_welcome_user_emailフックが有効にならない件

WordPressでユーザー管理をする際の招待メールの送信、アクティベーションメールの送信などしたい場合、マルチサイトでサイトを構成するとそれらの機能を容易に利用できるようになります。

そうなるとユーザー管理も含めて送信内容を変更して、より業務に近い処理や文面を送信したくなる、という欲が出てきました。

そこでプラグインに機能を組み込みながら実装してみると、招待メールはフックを利用して容易にできました。が、アクティベーションメールを受け取ってユーザー登録と同時にメタデータを保存したり、登録完了メール文を差し替えるためのフック「update_welcome_user_email」に制御が一向に渡ってきません。

最初「admin_init」でフックを登録してましたが、wp-activate.php を見ると、どうも「admin.php」はロードしていないため「init」に変更してみました。ですがこれもダメで、プラグインのコンストラクタに変更しました。しかし、これもダメ。

アクティベーション処理では、どうもプラグインがロードされていないのではないかと疑ってみました。検索してみると、ありました。

wp-activate.php, without explanation, does not load site plugins

どうやら「WP_INSTALLING」定義を取り去るとプラグインがロードできるようになるようです。

ただし、マルチサイトにおいて何のためなのかハッキリしないため、どのような副作用があるか分かりません。

取りあえずこの状態で暫く動かしてみることにしようか思います。

後日譚:アクティベートの際プラグインをロードするように変更

WordPressのプログラムに直接手を加えるとアップデートをする度に書き換えする羽目になるので、避ける方法はないか試してみました。

テーマが幸いロードされるので、functions.phpでプラグインを直接ロードしてしまえば期待通りになるかも知れません。

そこで

if (defined('WP_INSTALLING')) {
    require ABSPATH . 'wp-content/plugins/{directory_name}/{file_name}';
}

とfunctions.phpに登録して試してみたところ、動作しました。WordPressは本当に柔軟性のあるシステムだと思います。

(140828)