Dezactivarea email-urilor de înregistrare pentru utilizatori noi

16 aug. 2016, 20:47:10
Vizualizări: 22.9K
Voturi: 5

Aș dori să dezactivez emailurile pe care le primește administratorul când se înregistrează un utilizator nou. Primim multe emailuri din cauza înregistrărilor noi (sunt înregistrări legitime) dar nu vreau să mai văd emailul care mă anunță că cineva s-a înregistrat iar și iar.

Până acum am încercat să instalez plugin-uri dar nu funcționează. (chiar și suportul spune că nu mai funcționează). Când am căutat pe aici singura întrebare pe care am putut să o găsesc a fost Dezactivarea emailurilor admin pentru înregistrări noi care este de acum trei ani și nu pare să mai funcționeze. Am încercat cu acest cod:

// Redefinește funcția de notificare utilizator 
if ( !function_exists('wp_new_user_notification') ) {
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);

    $message  = sprintf(__('Înregistrare utilizator nou pe blogul tău %s:'), get_option('blogname')) . "rnrn";
    $message .= sprintf(__('Nume utilizator: %s'), $user_login) . "rnrn";
    $message .= sprintf(__('E-mail: %s'), $user_email) . "rn";


    //  @wp_mail(get_option('admin_email'), sprintf(__('[%s] Înregistrare Utilizator Nou'), get_option('blogname')), $message);

    if ( empty($plaintext_pass) )
        return;

    $message  = __('Salut,') . "rnrn";
    $message .= sprintf(__("Bun venit pe %s! Iată cum te poți autentifica:"), get_option('blogname')) . "rnrn";
    $message .= wp_login_url() . "rn";
    $message .= sprintf(__('Nume utilizator: %s'), $user_login) . "rn";
    $message .= sprintf(__('Parolă: %s'), $plaintext_pass) . "rnrn";
    $message .= sprintf(__('Dacă întâmpini probleme, te rog să mă contactezi la %s.'), get_option('admin_email')) . "rnrn";
    $message .= __('La revedere!');

    wp_mail($user_email, sprintf(__('[%s] Numele tău de utilizator și parola'), get_option('blogname')), $message);

    }
}

în functions.php al temei mele (are linia @wp_mail comentată) și am încercat chiar să comentez acea linie în wp-includes/pluggable.php dar tot primesc emailurile.

Folosesc WordPress 4.5.3 acum. (ACTUALIZAT la 4.6 ca parte a acestui proces)

Încerc să fiu cât mai clar posibil. Nu vreau ca emailul care merge către utilizator să se oprească deoarece ei ar trebui să îl primească în continuare, dar cum pot face ca emailul către admin să se oprească?

18
Comentarii

Ai încercat să pui în folderul de pluginuri?

Jarod Thornton Jarod Thornton
16 aug. 2016 21:47:18

Nu știam dacă ar fi ajutat, având în vedere că am editat direct fișierul pluggable.php. Doar asta ar trebui să comentez?

rudtek rudtek
16 aug. 2016 21:54:03

Hopa. Voiam să postez aici. Nu ar trebui să editezi fișierele de bază. De asta folosim pluginuri. Poți apela pluggable din plugin, dar dacă nu e necesar (și rareori este), poți pur și simplu să pui codul într-un fișier php, să-l încarci în directorul de pluginuri și să-l activezi.

Jarod Thornton Jarod Thornton
16 aug. 2016 21:56:39

Voi reveni în biroul meu în curând și voi ajuta cu asta dacă pot.

Jarod Thornton Jarod Thornton
16 aug. 2016 21:57:49

folosești WPMU sau versiunea standalone?

Jarod Thornton Jarod Thornton
17 aug. 2016 02:13:30

Am testat pe un WPMU fără să pot reproduce problema. Totuși, am configurat o versiune standalone și acum înțeleg cu ce avem de-a face.

Jarod Thornton Jarod Thornton
17 aug. 2016 02:47:43

folosesc versiunea standalone

rudtek rudtek
17 aug. 2016 02:53:50

Am reușit să opresc TOATE notificările, dar nu asta vrem, dar e un început.

Jarod Thornton Jarod Thornton
17 aug. 2016 02:54:34

Linia 350 din pluggable.php este locul unde caut acum, pentru informare

Jarod Thornton Jarod Thornton
17 aug. 2016 03:04:59

Nu vor să ne lase să schimbăm asta, lol. Ai putea pur și simplu să creezi filtre la nivel de server în cPanel.

Filtrare la nivel de cont & Filtrare la nivel de utilizator. Sunt convins că nu există nicio rezolvare pentru asta, lol.

Jarod Thornton Jarod Thornton
17 aug. 2016 03:24:25

O altă opțiune este să faci site-ul tău MultiSite și să-l dezactivezi acolo.

Jarod Thornton Jarod Thornton
17 aug. 2016 03:26:09

Hm, nasol. Mersi oricum pentru ajutor!

rudtek rudtek
17 aug. 2016 21:09:41

yw np

Ai putea crea și o adresă de email falsă și să setezi un filtru pentru a le șterge. Sau să ajustezi setările în clientul tău de email, dar asta ar fi limitat la servicii de email bazate pe web precum Gmail pentru a suporta mai multe dispozitive.

Prima soluție este modul în care eu gestionez aceste tipuri de notificări.

Jarod Thornton Jarod Thornton
17 aug. 2016 22:05:07

continuăm această discuție în chat.

Jarod Thornton Jarod Thornton
17 aug. 2016 22:17:22

Dacă nu te superi, acceptă răspunsul pe care l-am scris. Nu este exact ceea ce căutai, dar va face treaba. Apreciez foarte mult.

Jarod Thornton Jarod Thornton
18 aug. 2016 06:58:55

am adăugat un vot pozitiv, dar nu pot selecta ca răspuns deoarece ai postat ca un comentariu, nu ca un răspuns?

rudtek rudtek
19 aug. 2016 19:31:04

Este chiar sub aceste comentarii :)

Jarod Thornton Jarod Thornton
19 aug. 2016 21:16:37

Acest lucru te va duce la link. Apreciez asta. Voi continua să lucrez pentru a găsi o soluție la aceasta, dar în acest moment nu văd niciun semn de speranță.

Jarod Thornton Jarod Thornton
19 aug. 2016 22:23:18
Arată celelalte 13 comentarii
Toate răspunsurile la întrebare 5
11

Abordare pentru WordPress 4.6+

Verificați patch-ul din tichetul #36009 care a fost integrat în versiunea WordPress 4.6.

Acesta adaugă opțiunea 'user' pentru parametrul de intrare $notify al funcției wp_new_user_notification(), pentru a omite trimiterea acelor email-uri către administrator.

Cum funcționează

Funcția register_new_user() conține această parte:

do_action( 'register_new_user', $user_id );

Notificările prin email sunt activate cu:

add_action( 'register_new_user', 'wp_send_new_user_notifications' );

unde callback-ul este definit ca:

function wp_send_new_user_notifications( $user_id, $notify = 'both' ) {
        wp_new_user_notification( $user_id, null, $notify );
}

Soluție alternativă

Putem încerca această abordare (netestată) cu un callback personalizat și eliminarea celui implicit:

add_action( 'init', function()
{
    remove_action( 'register_new_user',   'wp_send_new_user_notifications'         );
    add_action(    'register_new_user',   'wpse236122_send_new_user_notifications' );
} );

function wpse236122_send_new_user_notifications(  $user_id, $notify = 'user' )
{   
    wp_send_new_user_notifications( $user_id, $notify );    
}

unde schimbăm valoarea implicită de la 'both' la 'user'.

Este important de menționat că wp_send_new_user_notifications() este de asemenea conectată la următoarele acțiuni:

  • network_site_new_created_user
  • network_site_users_created_user
  • network_user_new_created_user
  • edit_user_created_user

Putem gestiona aceste cazuri într-un mod similar cu cel descris mai sus.

18 aug. 2016 15:45:23
Comentarii

acest lucru părea minunat. Am actualizat la versiunea 4.6 și am încercat, dar în continuare îmi trimite notificarea de utilizator nou.

rudtek rudtek
19 aug. 2016 19:44:40

Este listat ca un patch și necesită teste unitare. Ape nelmăsurate.

Jarod Thornton Jarod Thornton
19 aug. 2016 21:18:05

Tocmai am încercat asta pe o instalare proaspătă fără pluginuri și cu tema implicită, fără succes.

Jarod Thornton Jarod Thornton
19 aug. 2016 22:21:07

O să urmăresc asta, pentru că are foarte mult sens

rudtek rudtek
19 aug. 2016 23:18:21

@Jarmerson Mulțumesc pentru testare, tocmai am observat o mică problemă cu fragmentul meu de cod, o voi rezolva ;-) PS: testul unitar a fost adăugat aici.

birgire birgire
19 aug. 2016 23:26:35

@rudtek Tocmai am actualizat răspunsul, am corectat o greșeală de tipar. L-am testat și acum pare să funcționeze pe instalarea mea de test.

birgire birgire
19 aug. 2016 23:31:30

Codul de mai sus nu funcționează pentru mine în WP 4.6.1.

wired wired
29 sept. 2016 21:13:18

Mulțumesc pentru comentariu @wired. Am testat acest lucru cu succes pe o instalare simplă, ca un plugin, dacă îmi amintesc corect. Ai primit vreo eroare PHP de la cod? Presupune PHP 5.3+.

birgire birgire
29 sept. 2016 23:23:40

Am pus pe un site live BuddyPress cu multe plugin-uri, așa că ar putea fi un conflict, nu știu. Doar că nu funcționează. Nu pot să-l testez local.

wired wired
2 oct. 2016 03:26:48

A trecut ceva timp de când am folosit BuddyPress, așa că nu am testat acolo, dar pluginurile pot interfera mereu. @wired

birgire birgire
2 oct. 2016 12:58:18

Cred că din anumite motive, nu prinde acțiunea, pentru că snippet-ul tău TREBUIE să funcționeze. Am verificat wp_send_new_user_notifications și wp_new_user_notification în user.php și pluggable.php.

gdfgdfg gdfgdfg
6 feb. 2019 00:36:47
Arată celelalte 6 comentarii
8

Abordare Plugabilă Generică pentru WordPress < 4.6 (Vezi Răspunsul lui @birgire pentru versiunile > 4.6)

Funcțiile plugabile sunt una dintre relicvele mai deprimante ale trecutului WordPress și vin cu o serie de complexități. Faptul că modificarea directă a fișierului de bază (ceea ce este complet nerecomandat, așa cum a menționat @Jarmerson în comentarii) nu a funcționat, mă face să suspectez că un alt plugin din instalarea ta poate suprascrie funcția plugabilă.

Fișierul wp-includes/pluggable.php este încărcat după pluginurile active și mu-plugins, dar înaintea temei active; asta înseamnă că "Funcțiile Plugabile" pot fi suprascrise doar de declarații dintr-un plugin.

Modificarea pe care ai descoperit-o în celălalt răspuns se aplică unei versiuni mult mai vechi de WordPress. În procesul de înlocuire a oricărei funcții plugabile, ar trebui să începi cu funcția originală așa cum există în versiunea ta de WordPress (în cazul tău, v4.5.3). Făcând acest lucru, soluția devine următoarea (comentarii omise; fără linii adăugate, doar eliminate):

function wp_new_user_notification( $user_id, $deprecated = null, $notify = '' ) {
  if ( $deprecated !== null )
    _deprecated_argument( __FUNCTION__, '4.3.1' );

  if ( 'admin' === $notify || ( empty( $deprecated ) && empty( $notify ) ) 
    return;

  global $wpdb, $wp_hasher;
  $user     = get_userdata( $user_id );
  $blogname = wp_specialchars_decode(get_option('blogname'), ENT_QUOTES);
  $key      = wp_generate_password( 20, false );

  do_action( 'retrieve_password_key', $user->user_login, $key );

  if ( empty( $wp_hasher ) ) {
    require_once ABSPATH . WPINC . '/class-phpass.php';
    $wp_hasher = new PasswordHash( 8, true );
  }

  $hashed = time() . ':' . $wp_hasher->HashPassword( $key );
  $wpdb->update( $wpdb->users, array( 'user_activation_key' => $hashed ), array( 'user_login' => $user->user_login ) );

  $message = sprintf(__('Nume de utilizator: %s'), $user->user_login) . "\r\n\r\n";
  $message .= __('Pentru a-ți seta parola, vizitează următoarea adresă:') . "\r\n\r\n";
  $message .= '<' . network_site_url("wp-login.php?action=rp&key=$key&login=" . rawurlencode($user->user_login), 'login') . ">\r\n\r\n";
  $message .= wp_login_url() . "\r\n";

  wp_mail($user->user_email, sprintf(__('[%s] Informații despre numele de utilizator și parolă'), $blogname), $message);
}

Am omis verificarea tradițională if( !function_exists() ) care de obicei încapsulează o suprascriere plugabilă, deoarece în acest caz o potențială eroare de declarație duplicată este de dorit - ar indica că un alt plugin a suprascris funcția wp_new_user_notification() înaintea ta, și astfel încercarea ta de a face același lucru este complet ignorată.

Aș recomanda plasarea acestei funcții într-un mu-plugin deoarece reduce șansa ca un alt plugin să te întreacă la post. În orice scenariu, nu modifica fișierul de bază wp-includes/pluggable.php cu codul de mai sus.

18 aug. 2016 09:23:40
Comentarii

Am încercat asta și primesc această eroare: Eroare fatală: Nu se poate redeclara wp_new_user_notification() (declarată anterior în /home/tdh/public_html/wp-includes/pluggable.php:1709) în /home/tdh/public_html/wp-content/themes/tdh/functions.php la linia 71

rudtek rudtek
19 aug. 2016 21:30:24

Această eroare apare din cauza faptului că funcția wp_new_user_notification() este deja declarată. Ce trebuie să faci este să o suprascrii prin includerea verificării function_exists() în care este încapsulată.

Dacă incluzi acest lucru, cred că funcția ta va avea prioritate față de nucleul WP.

Jarod Thornton Jarod Thornton
19 aug. 2016 22:13:52

@Jarmerson verificarea cu function_exists() nu suprascrie nimic - doar sări complet peste declarația funcției tale în cazul în care funcția a fost deja declarată. Tot ce face este să suprime o eroare fatală de coliziune prin ignorarea codului tău.

bosco bosco
19 aug. 2016 22:29:39

@rudtek se pare că ai plasat soluția mea în tema ta. Aceasta trebuie să fie pusă într-un plugin - suprascrierile funcțiilor pluggable într-o temă vor întotdeauna eșua.

bosco bosco
19 aug. 2016 22:29:52

El folosește o instalație independentă. Totuși, tocmai am testat codul tău pe o instalație proaspătă și FUNCȚIONEAZĂ!!! :D

@rudtek intră în folderul de plugin-uri și creează un fișier nou, de exemplu disable-admin-notices.php și lipește acest cod imediat după tag-ul de deschidere /* Plugin Name: Disable Admin Email Notices */ apoi lipește codul lui bosco și activează din plugin-uri. A funcționat pentru mine.

Jarod Thornton Jarod Thornton
19 aug. 2016 22:31:21

@Jarmerson un "mu-plugin" este un "must-use plugin" - plugin-urile plasate într-un folder special fac ca acestea să rămână întotdeauna "activate" și să se încarce mai devreme decât alte plugin-uri. Nicio legătură cu WPMU ;)

bosco bosco
19 aug. 2016 22:35:26

Bineînțeles că nu, lol. Încă învăț... Mulțumesc.

Jarod Thornton Jarod Thornton
19 aug. 2016 22:36:25

A funcționat. Se instala ca un plugin. Mulțumesc @Bosco! Mulțumesc și ție @Jamerson!

rudtek rudtek
19 aug. 2016 23:17:24
Arată celelalte 3 comentarii
0

Pentru WordPress 6.1+

Există hook-uri pe care le puteți utiliza pentru gestionarea emailurilor de bază trimise:

add_filter('wp_send_new_user_notification_to_admin', '__return_false');
add_filter('wp_send_new_user_notification_to_user', '__return_false');

Aceasta va opri o instanță de a trimite emailuri cu subiectul "[NUMELE SITE-ULUI] Înregistrare Utilizator Nou".

17 ian. 2024 16:50:38
0

După o cercetare am ajuns la concluzia că poți dezactiva toate emailurile de notificare, dar nu și pe cele care sunt trimise către administrator.

Referitor la întrebarea ta inițială, pot oferi câteva sfaturi despre cum să gestionăm emailurile de notificare nedorite din înregistrarea utilizatorilor WordPress și resetarea parolei.

Presupunând că ai un mediu cPanel care rulează instalarea ta, urmează pur și simplu acești pași și vei elimina efectiv acele emailuri specifice.

Accesează Filtrarea la Nivel de Cont din administrarea cPanel. În această zonă poți gestiona filtrele pentru contul tău principal. Vrei să Creezi un Filtru și să procedezi la crearea unui Filtru Nou pentru Toate Emailurile de pe Contul Tău.

În câmpul Regulă selectează Către și este egal cu. Notă: Poți crea și filtre pentru alte condiții. Ultimul câmp este o zonă de text unde introduci adresa de email cu care lucrezi. Sub zona regulilor este locul unde se întâmplă magia. Selectează Renunță la Mesaj. Există și alte opțiuni.

Întotdeauna am creat o adresă de email pe care știam că nu va fi folosită și am creat filtrul folosind-o.

Aș putea continua cu cârlige pluggable din WordPress și altele, dar nu există nimic care să facă exact ceea ce ai dori. Pacat...

16 aug. 2016 21:56:02
0

Această soluție a funcționat pentru mine. https://gist.github.com/someguy9/b24866f521ec3eb20b13feb4c72a6afd#file-disable-wordpress-admin-new-user-notification-php

    <?php
// Dezactivează notificarea de utilizator nou trimisă administratorului site-ului
function smartwp_disable_new_user_notifications() {
    // Elimină email-urile originale de creare a utilizatorului
    remove_action( 'register_new_user', 'wp_send_new_user_notifications' );
    remove_action( 'edit_user_created_user', 'wp_send_new_user_notifications', 10, 2 );
    
    // Adaugă o nouă funcție pentru preluarea creării email-urilor
    add_action( 'register_new_user', 'smartwp_send_new_user_notifications' );
    add_action( 'edit_user_created_user', 'smartwp_send_new_user_notifications', 10, 2 );
}
function smartwp_send_new_user_notifications( $user_id, $notify = 'user' ) {
    if ( empty($notify) || $notify == 'admin' ) {
      return;
    }elseif( $notify == 'both' ){
        // Trimite email doar noului utilizator, nu și administratorului
        $notify = 'user';
    }
    wp_send_new_user_notifications( $user_id, $notify );
}
add_action( 'init', 'smartwp_disable_new_user_notifications' );
16 oct. 2022 20:18:32