Comment personnalisons-nous le "Enregistrement terminé. Vérifiez votre adresse e-mail." message qui apparaît lors de l'inscription sur WordPress 4.0? Dans les versions précédentes, Dave Ross la solution fonctionnait:
add_filter( 'wp_login_errors', 'override_reg_complete_msg', 10, 2 );
function override_reg_complete_msg( $errors, $redirect_to ) {
if( isset( $errors->errors['registered'] ) ) {
$needle = __('Registration complete. Please check your e-mail.');
foreach( $errors->errors['registered'] as $index => $msg ) {
if( $msg === $needle ) {
$errors->errors['registered'][$index] = 'Your new message';
}
}
}
return $errors;
}
En parcourant wp-login.php
, aucune modification n'a été apportée à l'information Filter the login page errors
. Pourquoi le code ci-dessus ne fonctionne-t-il pas dans WP 4?
Si vous avez besoin d'une autre manière, vous pouvez toujours vous connecter au login_init
et modifier le filtre gettext
:
add_filter( 'login_init',
function()
{
add_filter( 'gettext', 'wpse_161709', 99, 3 );
}
);
function wpse_161709( $translated_text, $untranslated_text, $domain )
{
$old = "Registration complete. Please check your e-mail.";
$new = "New text here";
if ( $untranslated_text === $old )
{
$translated_text = $new;
remove_filter( current_filter(), __FUNCTION__ );
}
return $translated_text;
}
WP_Error
a changé:Il semble y avoir un changement dans la définition de la propriété errors
de la classe WP_Errors
:
Dans WordPress version 3.9 nous avons cette partie:
var $errors = array();
mais dans WordPress version 4.0 il a été changé en:
private $error_data = array();
La portée de cette propriété a donc été modifiée de public à private .
C'est la raison pour laquelle vousne pouvez pas le modifierdirectement dans WordPress 4.0+.
... mais vous pouvez plutôt utiliser les méthodes magiques __set
et __get
de la WP_Error
classe introduite dans WordPress 4.0.
Ensuite, votre exemple de code pourrait être modifié pour:
add_filter( 'wp_login_errors', 'wpse_161709', 10, 2 );
function wpse_161709( $errors, $redirect_to )
{
if( isset( $errors->errors['registered'] ) )
{
// Use the magic __get method to retrieve the errors array:
$tmp = $errors->errors;
// What text to modify:
$old = __('Registration complete. Please check your email.');
$new = 'Your new message';
// Loop through the errors messages and modify the corresponding message:
foreach( $tmp['registered'] as $index => $msg )
{
if( $msg === $old )
$tmp['registered'][$index] = $new;
}
// Use the magic __set method to override the errors property:
$errors->errors = $tmp;
// Cleanup:
unset( $tmp );
}
return $errors;
}
pour changer ce message d'erreur particulier.
Voici des exemples de captures d'écran:
Avant:
Après: