standaard welkom registratie email aanpassen

Status
Niet open voor verdere reacties.

Naughtygirl

Gebruiker
Lid geworden
17 jan 2009
Berichten
174
Ik heb een tutorial gevonden over het aanpassen van de standaard welkom registratie mail in Wordpress: http://www.webtipblog.com/change-wordpress-user-registration-welcome-email/

Ik heb de stappen uitgevoerd en hier en daar aangepast naar mijn wensen. Als ik een gebruiker toevoeg, krijg ik keurig een mailtje. De gebruikersnaam en de overige tekst is goed uitgevoerd. Echter, het wachtwoord wordt of niet goed weergegeven of helemaal niet.

In de standaard welkom registratie email wordt je echter verwezen naar een link, zodat de gebruiker zelf een wachtwoord kan aanmaken. Hoe kan ik dit in de bovengenoemde tutorial verwerken? Ik heb wel de code gevonden in pluggable.php, maar weet niet hoe ik dit stukje code moet implementeren in mijn plugin.

Kan iemand mij verder helpen?
 
Heb je misschien iets aan de code die hier staat?

Mocht je daar niet mee verder kunnen, kun je dan misschien de code hier plaatsen die je nu gebruikt?
 
Die code heb ik inderdaad ook geprobeerd, ook dan laat het bericht geen wachtwoord zien.

Heb een map in wp-content/plugins aangemaakt, met de naam user-emails. Hierin staan 2 bestanden: user-emails.php en email_welcome.php

In het bestand user-emails.php staat het volgende:
Code:
<?php
/*
Plugin Name: User Emails
Description: Changes the default user emails
Version: 1.0
Author: Anneke van der Wal
Author URI: http://www.slotraceclub.nl
*/

if ( !function_exists( 'wp_new_user_notification' ) ) {
    function wp_new_user_notification( $user_id, $plaintext_pass = '' ) {
 
	// set content type to html
    add_filter( 'wp_mail_content_type', 'wpmail_content_type' );

	// user
	$user = new WP_User( $user_id );
	$userEmail = stripslashes( $user->user_email );

	$subject = 'Welkom op slotraceclub MNDDB';
	$headers = 'From: Slotraceclub MNDDB <webmaster@slotraceclub.nl>';

	ob_start();
	include plugin_dir_path( __FILE__ ).'/email_welcome.php';
	$message = ob_get_contents();
	ob_end_clean();

	@wp_mail( $userEmail, $subject, $message, $headers );

	// remove html content type
	remove_filter ( 'wp_mail_content_type', 'wpmail_content_type' );
    }
}

/**
 * wpmail_content_type
 * allow html emails
 *
 * @author Anneke van der Wal <webmaster@slotraceclub.nl>
 * @return string
 */
function wpmail_content_type() {
 
    return 'text/html';
}
?>

Ik heb de mail voor de admin weggelaten omdat ik zelf de gebruikers toevoeg.

In het bestand email_welcome.php staat het volgende:
Code:
<!-- wp-content/plugins/user-emails/email_welcome.php -->
 
<?php if ( $user->first_name != '' ) : ?>
    <h1>Welkom op Slotraceclub MNDDB, <?php echo $user->first_name; ?></h1>
<?php else : ?>
    <h1>Welkom op Slotraceclub MNDDB,</h1>
<?php endif; ?>
 
<p>
    Je account is aangemaakt door de beheerder van MNDDB. Om in te kunnen loggen, moet je alleen nog een wachtwoord aanmaken. Ga hiervoor naar: <br /><br />
	
	Om in te loggen op de website, ga je naar: <a href="http://slotraceclub.nl/.................">Slotraclub MNDDB login</a> <br />
	Om in te loggen op het forum, ga je naar: <a href="http://slotraceclub.nl/forum">Slotraclub MNDDB forum login</a>
</p>

<p>
	Je gebruikersnaam is: <?php echo $user->user_login ?><br />
	Je wachtwoord is: <?php echo $user->user_pass ?>
</p>
 
<p>
    Vriendelijke groet,<br>
    Slotraceclub MNDDB
</p>

Met de code bij "Je wachtwoord is:" krijg ik in het mailbericht een hele reeks combinaties van getallen, letters en tekens. Als ik naar de database ga staat daar inderdaad dezelfde combinatie, maar ik heb tijdens het toevoegen van een gebruiker, een ander wachtwoord verkregen. Het liefst gebruik ik dat helemaal niet, liever dat de gebruiker zelf een ww invoert via de link, wat ik ook in mijn eerste bericht noemde.
 
Ik heb er even mee zitten stoeien en momenteel lukt het mij ook niet. Wel heb ik ontdekt dat de functie voor het versturen van deze mails in Wordpress 4.4.0 flink gewijzigd is, wellicht dat e.e.a. ook daar mee te maken heeft.

:iever dat de gebruiker zelf een ww invoert via de link, wat ik ook in mijn eerste bericht noemde.

Dat lijkt me ook het verstandigst en veiligst. Ik duik er nog even verder in en kom erop terug.
 
Volgens mij is het gelukt :). Ik heb de code die in Wordpress gebruikt wordt sinds versie 4.4.0 als uitgangspunt voor jouw plugin genomen en daarin jouw aanpassingen verwerkt. Je kunt de aangepaste versie hier downloaden (ZIP). Ik hoor graag of het werkt :).
 
Ik zou 'm dolgraag willen testen, maar nu kan ik opeens geen gebruiker meer toevoegen. Ik kom er net achter, omdat een broer van mij zich wilde registreren, voordat ik jou plugin activeerde.
Hij geeft nu plotseling aan dat ik een wachtwoord moet invullen, bij het aanmaken van een gebruiker. Voorheen hoefde dat nooit. Als ik op de knop druk om een ww te genereren, gebeurt er niets.
Ik krijg een foutmelding (omdat ik F12 Ontwikkelhulpprogramma nog open had staan): Kan de eigenschap hasClass van een niet-gedefinieerde verwijzing of een verwijzing naar een lege waarde niet ophalen, in het load-scripts.php in de wp-admin map.
Ik heb alleen 2 plugins geupdate, deze heb ik even gedeactiveerd om te kijken of het aan deze plugin lag, maar niet het geval.

Opgelost! Heb het load-scripts.php even overschreven met degene die ik local gebruikte toen ik de site eerst lokaal aan het opzetten was.
 
Laatst bewerkt:
Heb je de door mij gemaakte plug-in ook gedeactiveerd? En zo ja, maakt dat verschil?
Kun je een screenshot plaatsen van het scherm waar je nu een wachtwoord in moet vullen en tevens van de foutmelding die je ziet?
 
Ook de tekst van die e-mail is aan te passen, maar vereist een andere aanpak. De tekst van de e-mail als iemand een nieuw wachtwoord aanvraagt, kan worden gewijzigd met de "retrieve_password_message"-filter.

Wil je dat zelf eens proberen of zal ik er naar kijken?
 
Wil het eerst wel zelf proberen. Heb hier wat gevonden. Kan ik die code in dezelfde plugin gebruiken? En dan de 'echte' e-mail-tekst in een apart bestand? Net zoals de vorige?
 
Je kunt deze code in je user-emails.php-bestand gebruiken en dan inderdaad de echte tekst in een apart bestand.
Succes!
 
Er staat waarschijnlijk iets niet helemaal goed in de code. Kan niets meer beginnen in de back-end, alleen maar een witte pagina.

In de user-emails.php heb ik de volgende code toegevoegd:
Code:
// Change "From" email address
add_filter('wp_mail_from', function($email) {
	return 'webmaster@slotraceclub.nl';
});

// Change "From" email name
add_filter('wp_mail_from_name', function($name) {
	return _('Slotraceclub MNDDB');
});

// Change subject
add_filter('retrieve_password_title', function($title, $user_login, $user_data) {
	return _('Wachtwoord resetten');
});

// Change the message/body of the email
add_filter('retrieve_password_message', 'rv_new_retrieve_password_message', 10, 4);
function rv_new_retrieve_password_message($message, $key, $user_login, $user_data) {
	$reset_url = add_query_arg( array(
		'action' => 'rp',
		'key' => $key,
		'login' => rawurlencode($user_login)
	), wp_login_url();
	
	ob_start();
	include plugin_dir_path(__FILE__ ).'/email_passw_reset.php';
	$message = ob_get_contents();
	ob_end_clean();
}

Ik heb de ob_start() etc... overgenomen van de vorige, i.p.v. die uit de tutorial, hopelijk is dat goed?

In het bestand email_passw_reset.php heb ik de volgende code:
Code:
<h1>Beste <?php echo get_user_meta($user->first_name, true) ?>,</h1>

<p>
Je hebt ons gevraagd om je wachtwoord te resetten voor Slotraceclub MNDDB, omdat je deze waarschijnlijk bent vergeten. Als je niet een wachtwoord reset hebt aangevraagd, kun je dit bericht negeren. Het bericht verloopt in 24 uur en is dan niet meer te gebruiken.
</p>

<p>
Om je wachtwoord te resetten bezoek dan <?php echo network_site_url("wp-login.php?action=rp&key=$key&login=" . rawurlencode($user_login), 'login'); ?>">deze</a> pagina.
</p>

<p>
Bij het bezoeken van die pagina kun je een nieuw wachtwoord instellen, dat wordt niet naar je gestuurd uit beveiliging overwegingen.
</p>

<p>
Je gebruikersnaam is: <?php echo $user->user_login; ?>
</p>

<p>
Vriendelijke groet, <br />
Slotraceclub MNDDB
</p>

Wat gaat er fout?
 
In user-emails.php ben je in elk geval één regeltje vergeten. Ik heb hem in onderstaande code in rood toegevoegd:
Code:
// Change "From" email address
add_filter('wp_mail_from', function($email) {
	return 'webmaster@slotraceclub.nl';
});

// Change "From" email name
add_filter('wp_mail_from_name', function($name) {
	return _('Slotraceclub MNDDB');
});

// Change subject
add_filter('retrieve_password_title', function($title, $user_login, $user_data) {
	return _('Wachtwoord resetten');
});

// Change the message/body of the email
add_filter('retrieve_password_message', 'rv_new_retrieve_password_message', 10, 4);
function rv_new_retrieve_password_message($message, $key, $user_login, $user_data) {
	$reset_url = add_query_arg( array(
		'action' => 'rp',
		'key' => $key,
		'login' => rawurlencode($user_login)
	), wp_login_url();
	
	ob_start();
	include plugin_dir_path(__FILE__ ).'/email_passw_reset.php';
	$message = ob_get_contents();
	ob_end_clean();

	[COLOR="#FF0000"]return $message;[/COLOR]
}

Krijg je nu wel een mail?
 
Ja, nu krijg ik wel mail. Alleen hij verwerkt de html niet, deze zijn ook zichtbaar (<h1>, <p> etc.) en de gebr.nm. staat niets.

Ik heb deze code er nog aan toegevoegd, in user-emails.php:
Code:
// Change email type to HTML
add_filter('wp_mail_content_type', function($content_type) {
	return 'text/html';
});

Dacht dat dat niet nodig was, omdat die er ook al stond voor die andere mail. Nu heb ik geen html meer in de mail, maar de gebr.nm komt er nog steeds niet te staan, en de link klopt niet, stuurt me weer door naar ww aanvragen.
 
Laatst bewerkt:
Dacht dat dat niet nodig was, omdat die er ook al stond voor die andere mail.

Dat klopt, hij staat er inderdaad voor de andere mail, maar ook echt alleen voor die functie. Die betreffende functie wordt niet gebruikt voor de wachtwoord reset mail en dat is dan ook de reden waarom de mail niet in HTML was.

Ik heb zelf de code in user-email.php als volgt aangepast:
Code:
// Change the message/body of the email
add_filter('retrieve_password_message', 'rv_new_retrieve_password_message', 10, 4);
function rv_new_retrieve_password_message($message, $key, $user_login, $user_data) {
	$reset_url = add_query_arg( array(
		'action' => 'rp',
		'key' => $key,
		'login' => rawurlencode($user_login)
	), wp_login_url() );
[COLOR="#FF0000"]
	// set content type to html
	add_filter( 'wp_mail_content_type', 'wpmail_content_type' );[/COLOR]
	
	ob_start();
	include plugin_dir_path(__FILE__ ).'/email_passw_reset.php';
	$message = ob_get_contents();
	ob_end_clean();

	return $message;

	[COLOR="#FF0000"]// remove html content type
	remove_filter ( 'wp_mail_content_type', 'wpmail_content_type' );[/COLOR]
}

In email_passw_reset.php heb ik de volgende dingen nog gewijzigd:
Code:
<h1>Beste [COLOR="#FF0000"]<?php echo $user_data->first_name; ?>[/COLOR],</h1>

<p>
Je hebt ons gevraagd om je wachtwoord te resetten voor Slotraceclub MNDDB, omdat je deze waarschijnlijk bent vergeten. Als je niet een wachtwoord reset hebt aangevraagd, kun je dit bericht negeren. Het bericht verloopt in 24 uur en is dan niet meer te gebruiken.
</p>

<p>
Om je wachtwoord te resetten bezoek dan <a href="<?php echo network_site_url("wp-login.php?action=rp&key=$key&login=" . rawurlencode($user_login), 'login'); ?>">deze</a> pagina.
</p>

<p>
Bij het bezoeken van die pagina kun je een nieuw wachtwoord instellen, dat wordt niet naar je gestuurd uit beveiliging overwegingen.
</p>

<p>
Je gebruikersnaam is: [COLOR="#FF0000"]<?php echo $user_login; ?>[/COLOR]
</p>

<p>
Vriendelijke groet, <br />
Slotraceclub MNDDB
</p>

Je zou nu in de e-mail ook de voornaam van de gebruiker in de aanhef moeten zien (deze stond er bij mij niet tussen) en de gebruikersnaam staat nu ook in de tekst.

Verder vraag ik me af, maar dat zou je even moeten uitproberen, of onderstaande code er niet voor zorgt dat het van-adres en de van-naam bij alle mail die vanaf de site gestuurd wordt gewijzigd wordt naar wat je hier definieert:
Code:
add_filter('wp_mail_from', function($email) {
	return 'webmaster@slotraceclub.nl';
});

// Change "From" email name
add_filter('wp_mail_from_name', function($name) {
	return _('Slotraceclub MNDDB');
});
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan