以前に公開した、ログイン時にメール通知する方法をさらにカスタマイズし、サイトやユーザーのロケール(管理画面上で登録した地域設定)に応じて内容を翻訳して送信する方法のメモ書きです。
まずは前知識として、ログイン時のメール通知を実装しておいた方がいい理由やコードの詳細解説は以下のページを参照ください。
そして、以下がリンク先ページのコードを、翻訳対応(国際化対応)できるようにしたコードです。
使用しているテーマ・プラグインのテキストドメインが「textdomain」、翻訳対応させるための措置がされていることが前提です
/* ログイン後に「管理者メールアドレス」へ通知 */
function pwcn_send_login_notification_to_admin($user_login, $user) {
$locale = get_locale();
switch_to_locale($locale);
$admin_email = get_option( 'admin_email' );
$subject = __('Login Notification','textdomain');
$message = __('User Name : ','textdomain') . $user_login . __('is logged in Site' . "\n\n";
$message .= __('Logged in IP Address: ','textdomain') . $_SERVER['REMOTE_ADDR'];
wp_mail( $admin_email, $subject, $message );
restore_previous_locale();
}
add_action('wp_login', 'pwcn_send_login_notification_to_admin', 10, 2);
比べていただくと分かりますが、以下が変更点です。
- get_locale()関数で言語を取得
- switch_to_locale()関数でget_locale()で取得した言語へ変更
- __()で翻訳の割り当て
- restore_previous_locale()関数で処理後に元の言語に戻す
「switch_to_locale()」で言語を変更する、これをしないと、いくら翻訳用の文字列設定をしても言語は変わりません。
これ以降で処理されるものが言語変更されたままになってしまうので、「restore_previous_locale()」で元の言語に戻すというのがポイントですね。
コメントを残す