Het aanpassen van je WordPress systeem e-mails

WordPress verstuurt de welkom en de wachtwoord vergeten email vanuit een email adres, wat je niet aan kan passen. Tenzij natuurlijk met deze snippet!

Wil je direct een mail ontvangen wanneer nieuwe snippets zijn toegevoegd?

Vul dan onderstaand formulier in en je krijgt direct na het toevoegen van nieuwe snippets een email. Zo blijf je altijd bij!

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.

Codesnippet verbeteren

Het doel van deze code snippet is een probleem op te lossen in een specifieke situatie. Daarom zie je regelmatig voorbeelden waar je specifiek tekst moet aanpassen om te krijgen wat je wilt. 

Wil jij leren hoe je complete plugins zelf kunt programmeren inclusief ‘admin’ schermen voor het instellen en de output in de gewenste taal, dan is misschien de cursus ‘Introductiecursus Plugins Programmeren‘ iets voor jou. 

Wil je als ‘full stack’ WordPress programmeur aan de gang gaan, dan biedt WordXPression ook een compleet traject ‘WordPress Developer‘ aan. Dit is een traject wat deels online, deels klassikaal wordt gegeven.

WordPress Developer worden?

Wil je leren hoe je zelf plugins, thema's, shortcodes, widgets, Gutenberg blocks en meer kan maken?
Schrijf je dan in voor de cursus WordPress Developer.

Meer snippets

Prijzen verbergen voor niet ingelogde gebruikers
Hoe verberg je de WooCommerce prijzen voor niet ingelogde gebruikers?
Stuur je bezoeker naar een 'dank je' pagina na commentaar
In enkele regels stuur je je bezoeker naar een 'bedankt pagina'.
WooCommerce product titel inkorten
Past de titel in je WooCommerce product matrix niet? Zo pas je het aan.
jQuery Migrate verwijderen voor meer snelheid
Voor de meeste WordPress websites is jQuery Migrate al heel lang niet meer nodig. Je kan enigszins de...
Een shortcode om de winkelwagen inhoud te tonen
Soms wil je de inhoud van een winkelwagen laten zien. Met behulp van deze shortcode kan je de inhoud...
Op Woensdag alle pizza's voor 7 euro! (WooCommerce)
Een leuke uitdaging. Een klant wilde een aanpassing op WooCommerce om op specifieke weekdagen andere...

Veiligheid voor alles!

Met betrekking tot de code die je hier aantreft een aantal waarschuwingen, voordat je deze code snippets toepast op je eigen website.

  1. Voer de code nooit direct uit op je eigen website, maar probeer deze eerst op een staging omgeving of een locale kopie van je website. 
  2. Voor je de geteste code installeert op je website, maak eerst een back up van je website.
  3. Zorg altijd voor alle zekerheid, dat je voor je een aanpassing live zet, je ook de FTP gegevens van je website bij de hand hebt.  
 
Voel je je onvoldoende vertrouwd met het toepassen van een dergelijke code snippet, bedenk dat je dit ook door een professional kan laten doen. De WordXPression support strippenkaart is een voordelige manier om dit soort aanpassingen te laten doen.
Heeft dit artikel je geholpen je probleem op te lossen?
Deel het met je vrienden via je favoriete social media.

Heb je vragen bij, of opmerkingen over deze code snippet, stel deze bij de commentaren hieronder.

Geef een reactie

Je e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *

Word je website de baas. Neem vandaag nog contact op!

Contact Information

WordXPression 

Bezoekadres
Eperweg 135 (op afspraak)
8072 PL Nunspeet

Postadres
Aardoliestraat 14-I
7553GT Hengelo

06-10449807 (van 9:00 tot 17:00 van ma-vr)

KVK : 75580152 

Social media
Stuur een bericht

Introductiecursus Plugins Programmeren

wordpress coding Can use php code as background in html

Ontdek de wereld van WordPress Plugin ontwikkeling met WordXPression's introductiecursus