Probleem:
Je wilt de standaard e-mail die WordPress verstuurd als je het wachtwoord van jouw account vergeten bent aanpassen. In WordPress zit hiervoor geen optie. Je kan de plugin Theme My Login installeren zodat je de e-mail aan kan passen. Echter sinds in 2018 versie 7 is uitgekomen moet je voor deze functionaliteit betalen.
Oplossing:
Je kan dit ook zelf oplossen door onderstaande code naar het functions.php bestand van je thema of child thema te kopiëren. Je kan het dan niet beheren vanuit WordPress, maar het komt wel heel dicht in de buurt.
Onderstaande functie past de titel van de e-mail aan:
/** * Compose the title for the custom password reset e-mail. * * @param $old_subject * @return string */ function child_passwordmail_subject_filter($old_subject) { return 'Domein.nl > Wachtwoord opnieuw instellen'; } add_filter ( 'retrieve_password_title', 'child_passwordmail_subject_filter', 10, 1 );
Onderstaande functie past het e-mailbericht aan. Je kan gewoon HTML tekens gebruiken voor opmaak. Gebruik %reseturl% om de link te plaatsen waar de gebruiker op moet klikken. De waarde %siteurl% wordt vervangen door het adres van de website.
/** * Compose custom password reset e-mail. * * @param string $old_message * @param string $key * @return string $message */ function child_passwordmail_message_filter($old_message, $key) { // Get user information. if (strpos($_POST['user_login'], '@')) { $email = trim( sanitize_email($_POST['user_login'])); $user_data = get_user_by( 'email', $email); } else { $login = trim(sanitize_text_field($_POST['user_login'])); $user_data = get_user_by('login', $login); } $user_login = $user_data->user_login; // Compose the e-mail. $message = 'Je bericht met HTML code.'; // Change parameters. $site_url = get_site_url(); $reset_url = network_site_url("wp-login.php?action=rp&key=$key&login=" . rawurlencode($user_login), 'login'); $message = str_replace(array("%reseturl%","%siteurl%"), array($reset_url, $site_url), $message); return $message; } add_filter ( 'retrieve_password_message', 'child_passwordmail_message_filter', 10, 2 );
De functie hieronder zorgt ervoor dat de e-mail als een HTML e-mail wordt verstuurd. Doe je dat niet dan wordt de HTML code als plain text verstuurd.
/** * Force WordPress to send each e-mail as a HTML e-mail. * * @param $content_type * @return string */ function child_mail_setcontenttype($content_type) { return 'text/html'; } add_filter( 'wp_mail_content_type', 'child_mail_setcontenttype' );
Oplossing getest op:
WordPress 4.9.8 met BuddyPress 4.0.0