パスワードを設定するためのリンクを含む、ユーザーに送信される通知メールをカスタマイズしようとしています。
現在、私はそれぞれsite.com/register
とsite.com/login
のURLでカスタムユーザー登録とログインフォームを設定しました。
登録後、wordpressはパスワードを設定するように求める次のリンクで電子メールを送信しています。
site.com/wp-login.php?action=rp&key=XYieERXh3QinbU4VquB2&login=user%40gmail.com
このURLを次のURLに置き換えます。
site.com/login?action=rp&key=XYieERXh3QinbU4VquB2&login=user%40gmail.com
私はfunctions.php
で以下のコードを試しました
add_filter( 'wp_new_user_notification_email', 'my_wp_new_user_notification_email', 10, 3 );
function my_wp_new_user_notification_email( $wp_new_user_notification_email, $user, $blogname ) {
$message = sprintf(__('Username: %s'), $user->user_login) . "\r\n\r\n";
$message .= __('Hello To set your password, visit the following address:') . "\r\n\r\n";
$message .= '<' . network_site_url("login/?key=$key&login=" . rawurlencode($user->user_login), 'login') . ">\r\n\r\n";
$wp_new_user_notification_email['message'] = $message
return $wp_new_user_notification_email;
}
受信したEメールに次のようなリンクがあるため、$key
情報が欠落していると思います。
site.com/login?action=rp&key=&login=user%40test.com
これを修正するには?
生成されたキーを変数$key
に割り当てることができる必要があります。これは現在未定義です。
これを回避するには、WordPressがキーを生成した直後に起動するretrieve_password_key
アクションに別の関数を添付します。その名前から、私はそれがこの目的のためだけに存在すると思います。
function wpse306642_stash_key( $user_login, $key ) {
global $wpse306642_new_user_key;
$wpse306642_new_user_key = $key;
}
add_action( 'retrieve_password_key', 'wpse306642_stash_key', 10, 2 );
次に、関数内の$key
を$wpse306642_new_user_key
に置き換えて、関数の先頭でグローバルとして宣言します。
この目的のためだけにグローバルを使うのはちょっとやっかいなことですが、うまくいくはずです。
get_password_reset_key
関数 (参照を参照) を使用する必要があります。これはデータベースを照会し、ユーザーのパスワードのリセットキーを返します。
これが完全に機能する例です。
add_filter( 'wp_new_user_notification_email', 'custom_wp_new_user_notification_email', 10, 3 );
function custom_wp_new_user_notification_email( $wp_new_user_notification_email, $user, $blogname ) {
$key = get_password_reset_key( $user );
$message = sprintf(__('Welcome to the Community,')) . "\r\n\r\n";
$message .= 'To set your password, visit the following address:' . "\r\n\r\n";
$message .= network_site_url("wp-login.php?action=rp&key=$key&login=" . rawurlencode($user->user_login), 'login') . "\r\n\r\n";
$message .= "After this you can enjoy our website!" . "\r\n\r\n";
$message .= "Kind regards," . "\r\n";
$message .= "Support Office Team" . "\r\n";
$wp_new_user_notification_email['message'] = $message;
$wp_new_user_notification_email['headers'] = 'From: MyName<[email protected]>'; // this just changes the sender name and email to whatever you want (instead of the default WordPress <[email protected]>
return $wp_new_user_notification_email;
}