Wanneer een nieuwe gebruiker aan WordPress wordt toegevoegd, dat zal WordPress automatisch een welkom email toesturen aan die gebruiker.
Standaard is de email afkomstig van wordpress@domeinnaamvandesite.tld. Aangezien je waarschijnlijk dat email adres nooit zal hebben aangemaakt, is het onmogelijk voor de ontvanger om hierop te reageren. En omdat het ook geen ‘noreply’ adres is, is het onduidelijk, dat het ook niet de bedoeling is hierop te reageren.
Je wilt hier dus graag een ander email adres voor hebben. En een andere naam.
Wanneer je echter op zoek gaat naar de instellingen, dan zal je merken, dat dit nergens instelbaar is.
Je zal dit dus op moeten lossen via een stukje maatwerk code. Gelukkig valt de complexiteit enorm mee.
Deze functionaliteit is een functionaliteit die niet gerelateerd is aan het gebruikte thema, dus hoewel je de code makkelijk in de functions.php zou kunnen zetten, is de meest passende plaats een site specifieke snippet plugin.
<?php
//Instellen email adres
add_filter( 'wp_mail_from', 'wxp_custom_wp_mail_from' );
function wxp_custom_wp_mail_from( $original_email_address ) {
return 'jouwnaam@jouwdomein.com';
}
//Instellen gebruikersnaam
add_filter( 'wp_mail_from_name', 'wxp_custom_wp_mail_from_name' );
function wxp_custom_wp_mail_from_name( $original_email_from ) {
return 'Jouw Naam';
}
Natuurlijk vervang je het email adres en de naam door jouw eigen email adres en je eigen naam.
Maar wat nu, wanneer je ook de inhoud van het bericht wilt wijzigen. Ook dat is mogelijk.
Maar dat doe je per type email. Laten we eerst eens naar de welkom email kijken.
<?php
add_filter( 'wp_new_user_notification_email', 'wxp_new_user_notification_email', 10, 3 );
function wxp_new_user_notification_email( $wp_new_user_notification_email, $user, $blogname ) {
// Verander de onderwerp regel
$wp_new_user_notification_email['subject'] = 'Welkom bij onze website';
// Verander de tekst van de e-mail
$wp_new_user_notification_email['message'] = sprintf("Beste %1$s,
Welkom bij onze website. We zijn blij dat je je hebt geregistreerd.
Met vriendelijke groet,
Het %2$s Team", $user->display_name, $blogname );
// Geef de nieuwe e-mail terug
return $wp_new_user_notification_email;
}
Werken met tekst argumenten in PHP
In de tekst van bovenstaand bericht komen we iets tegen, wat we nog niet eerder zijn tegengekomen. Wil je alleen met de code werken, dan kan je de komende paar voorbeelden overslaan, maar wil je ook meer leren over het ‘waarom’ van de zaken, dan zou ik zeker doorlezen.
In PHP wordt vaak met zogenaamde ‘strings’ gewerkt, een opeenvolging van tekens. Nu is er in PHP een functie (sprintf), waarmee je variabele tekst in kan voegen in vaststaande tekst.
Op de eenvoudigste manier ziet het er ongeveer zo uit:
<?php
$ik = 'Wilko';
$beroep = 'WordPress Professional';
echo sprintf('Mijn naam is %s en ik ben een %s',$ik, $beroep);
Wanneer ik deze code plak in OnlinePHP.io en op Execute Code klik, dan krijg ik het volgende resultaat:
Mijn naam is Wilko en ik ben een WordPress Professional
Maar nu denk ik, dat de tekst toch niet helemaal is wat ik bedoelde, dus ik verander hem wat:
<?php
$ik = 'Wilko';
$beroep = 'WordPress Professional';
echo sprintf('Ik ben een %s en mijn naam is %s',$ik, $beroep);
Je hoeft geen Einstein te zijn om te begrijpen wat er mis gaat. We hebben de volgorde van de argumenten aangepast, en daarmee komen de waarden daarvoor op de verkeerde plaats te staan, het resultaat is nu
Ik ben een Wilko en mijn naam is WordPress Professional
Ik had natuurlijk de volgorde van de variabelen ook aan moeten passen. Maar dan krijg ik toch met een ander probleem te maken. Want met twee variabelen is het nog bij de houden, maar wat, wanneer ik tien variabelen had meegegeven in de functie? Dat is namelijk mogelijk. Dan zou het toch een heel gepuzzel worden om te weten welke variabele waar moet komen.
Vandaar dat er voor de sprintf functie nog een alternatieve syntax mogelijk is, waarbij ik de volgorde van de variabelen aangeef door een volgnummer.
<?php
$ik = 'Wilko';
$beroep = 'WordPress Professional';
echo sprintf('Mijn naam is %1$s en ik ben een %2$s',$ik, $beroep);
Dat is dus hetzelfde als het eerste voorbeeld:
Mijn naam is Wilko en ik ben een WordPress Professional
Maar ga ik nu de zinsvolgorde veranderen, en iets als dit schrijf:
<?php
$ik = 'Wilko';
$beroep = 'WordPress Professional';
echo sprintf('Ik ben een %2$s en mijn naam is %1$s',$ik, $beroep);
dan gaat het wel goed
Ik ben een WordPress Professional en mijn naam is Wilko
Het voordeel is dat ik bij genummerde argumenten ook deze argumenten kan hergebruiken
<?php
$ik = 'Wilko';
$beroep = 'WordPress Professional';
echo sprintf('Mijn naam is %1$s en ik ben een %2$s, vriendelijke groet, %1$s',$ik, $beroep);
leidt tot:
Mijn naam is Wilko en ik ben een WordPress Professional, vriendelijke groet, Wilko
Nu is er ook nog een alternatieve mogelijk om hetzelfde eindresultaat te bereiken:
<?php
$ik = 'Wilko';
$beroep = 'WordPress Professional';
echo "Mijn naam is {$ik} en ik ben een {$beroep}";
Dit geeft ook als resultaat. Let overigens op de dubbele quotes, met enkele quotes gaat dit niet werken.
Mijn naam is Wilko en ik ben een WordPress Professional
Dat is toch veel duidelijker. Waarom hebben we daar niet gelijk voor gekozen? Simpelweg omdat het dan wel duidelijker is, maar het kost ook meer tijd om deze code te doorlopen. In een situatie met veel variabelen in de tekst is om wille van gemak en onderhoudbaarheid de laatste optie een goede methode, maar met een tekst met slechts enkele parameters is de sprintf functie te verkiezen.
Het wachtwoord vergeten bericht aanpassen
Een ander bericht wat we mogelijk aan willen passen is het wachtwoord vergeten bericht.
<?php
add_filter( 'retrieve_password_message', 'wxp_password_reset_email', 10, 2 );
function wxp_password_reset_email( $msg, $key ) {
// Haal de gebruikersnaam op
$user_data = get_userdata( (int) $key );
$user_login = $user_data->user_login;
$reset_url= network_site_url("wp-login.php?action=rp&key=$key&login=" . rawurlencode($user_login), 'login');
// Pas het onderwerp en de inhoud van de e-mail aan
$subject = 'Wachtwoord resetten';
$msg = sprintf("Beste %1$s,\r\n\r\n
U heeft een verzoek ingediend om uw wachtwoord te resetten. Klik op de onderstaande link om uw wachtwoord opnieuw in te stellen:\r\n\r\n
%2$s\r\n\r\n Als u deze e-mail niet heeft aangevraagd, hoeft u verder geen actie te ondernemen.",$user_login,$reset_url);
// Geef de aangepaste e-mail terug
return $msg;
}
Even een paar regels in deze snippet, die het nader bekijken zeker waard zijn.
Allereerst in regel 5. De functie ‘get_userdata’ geeft een object terug met de informatie over de gebruiker waarop het betrekking heeft. De ID van die gebruiker wordt als parameter in de functie meegegeven, maar omdat deze als string is ontvangen wordt deze ‘gecast’ naar het type integer.
In regel 7 wordt de URL voor het resetten van een wachtwoord opgebouwd.
En de rest spreekt eigenlijk voor zich.
Succes met het aanpassen van je WordPress systeem mailberichten.