Cum să dezactivezi notificările prin email pentru înregistrarea utilizatorilor noi în WordPress
Cum pot dezactiva notificările prin email pentru utilizator și administrator atunci când un utilizator nou se înregistrează?
Am văzut câteva sugestii și plugin-uri, dar niciunul nu pare să funcționeze. Una dintre sugestii era să preiau funcția dintr-un plugin:
if ( !function_exists('wp_new_user_notification') ) :
/**
* Notifică administratorul blogului despre un utilizator nou, în mod normal prin email.
*
* @since 2.0
*
* @param int $user_id ID-ul utilizatorului
* @param string $plaintext_pass Opțional. Parola în text simplu a utilizatorului
*/
function wp_new_user_notification($user_id, $plaintext_pass = '') {
$user = new WP_User($user_id);
$user_login = stripslashes($user->user_login);
$user_email = stripslashes($user->user_email);
// Opțiunea blogname este escapată cu esc_html la salvarea în baza de date în sanitize_option
// dorim să inversăm acest lucru pentru zona de text simplu a emailurilor.
$blogname = wp_specialchars_decode(get_option('blogname'), ENT_QUOTES);
$message = sprintf(__('Înregistrare utilizator nou pe site-ul tău %s:'), $blogname) . "\r\n\r\n";
$message .= sprintf(__('Nume utilizator: %s'), $user_login) . "\r\n\r\n";
$message .= sprintf(__('Email: %s'), $user_email) . "\r\n";
@wp_mail(get_option('admin_email'), sprintf(__('[%s] Înregistrare Utilizator Nou'), $blogname), $message);
if ( empty($plaintext_pass) )
return;
$message = sprintf(__('Nume utilizator: %s'), $user_login) . "\r\n";
$message .= sprintf(__('Parolă: %s'), $plaintext_pass) . "\r\n";
$message .= wp_login_url() . "\r\n";
// wp_mail($user_email, sprintf(__('[%s] Numele și parola ta de utilizator'), $blogname), $message)
}
endif;
Întrebările și sugestiile erau destul de vechi, așa că poate WordPress 3.5 suprascrie ceva.
La înregistrare, încă primesc email-ul către administrator și un email către utilizator.
Nu vreau să blochez email-ul pentru parolă uitată.

Funcția wp_new_user_notification
este "pluggable". Aceasta înseamnă că o poți suprascrie declarând propria versiune a acestei funcții în plugin-ul/tema ta.
Deci, dacă dorești să dezactivezi complet toate notificările, poți face astfel:
if ( !function_exists( 'wp_new_user_notification' ) ) :
function wp_new_user_notification( $user_id, $plaintext_pass = '' ) {
return;
}
endif;
Totuși, nu aș recomanda să dezactivezi toate notificările și aș sugera să trimiți cel puțin o notificare către utilizator (Cum altfel va afla utilizatorul parola?). În acest caz, codul tău ar trebui să arate astfel:
if ( !function_exists( 'wp_new_user_notification' ) ) :
function wp_new_user_notification( $user_id, $plaintext_pass = '' ) {
$user = get_userdata( $user_id );
$user_login = stripslashes($user->user_login);
$user_email = stripslashes($user->user_email);
$blogname = wp_specialchars_decode(get_option('blogname'), ENT_QUOTES);
if ( empty($plaintext_pass) ) {
return;
}
$message = sprintf(__('Nume de utilizator: %s'), $user_login) . "\r\n";
$message .= sprintf(__('Parolă: %s'), $plaintext_pass) . "\r\n";
$message .= wp_login_url() . "\r\n";
wp_mail($user_email, sprintf(__('[%s] Numele și parola dumneavoastră'), $blogname), $message);
}
endif;

+1 @Rob ... cum poate un utilizator obține o parolă dacă dezactivezi notificarea? Acesta este un punct foarte bun pe care îl face Eugene Manuilov.

@s_ha_dum Am o înregistrare pe frontend folosind Gravity Forms, care trimite un email separat. Va bloca acest lucru email-ul pentru parolă uitată?

@EugeneManuilov Tocmai am încercat prima casetă de cod, dar tot primesc email-uri.

Conform acestei pagini, ar fi suficient să folosiți acest cod (pentru a dezactiva complet toate notificările):
if ( !function_exists('wp_new_user_notification') ) {
function wp_new_user_notification( ) {}
}
Este destul de apropiat de răspunsul dat, dar puțin mai scurt. Am considerat că merită să împărtășesc această informație.

Începând cu versiunea 4.6, există un parametru pentru a dezactiva notificările pentru administrator. https://developer.wordpress.org/reference/functions/wp_new_user_notification/
- @since 4.6.0 Parametrul
$notify
acceptă valoarea 'user' pentru trimiterea notificării doar către utilizatorul creat. - @param string $notify Opțional. Tipul de notificare care ar trebui să fie trimisă. Acceptă 'admin' sau un șir gol (doar administrator), 'user', sau 'both' (administrator și utilizator). Valoare implicită șir gol. */
- function wp_new_user_notification( $user_id, $deprecated = null, $notify = 'user' )

A trebuit să fac asta astăzi și am descoperit că multe dintre soluțiile disponibile par destul de depășite. Aceasta pare a fi o metodă mai bună fără a suprascrie funcții pluggable. Nu este exact codul meu, dar ar trebui să fie un bun punct de referință.
add_action( 'register_post', 'maybe_stop_notifications', 10, 3 );
function maybe_stop_notifications ( $sanitized_user_login, $user_email, $errors ) {
if( empty( $errors->get_error_code() )) {
remove_action( 'register_new_user', 'wp_send_new_user_notifications' );
}
}
