Disattivare le email di registrazione dei nuovi utenti

16 ago 2016, 20:47:10
Visualizzazioni: 22.9K
Voti: 5

Vorrei disattivare le email che l'amministratore riceve quando un nuovo utente si registra. Stiamo ricevendo molte email a causa di nuove registrazioni (sono registrazioni legittime) ma non voglio semplicemente continuare a vedere l'email che mi notifica che qualcuno si è registrato ancora e ancora.

Finora ho provato installando plugin ma non funzionano. (il supporto stesso dice che non funzionano più). Cercando qui intorno l'unica domanda che sono riuscito a trovare è stata Disattivare le email amministrative per le nuove registrazioni utente che risale a tre anni fa e sembra non funzionare più. Ho provato con questo codice:

// Ridefinisce la funzione di notifica utente
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(__('Nuova registrazione utente sul tuo blog %s:'), get_option('blogname')) . "rnrn";
    $message .= sprintf(__('Nome utente: %s'), $user_login) . "rnrn";
    $message .= sprintf(__('E-mail: %s'), $user_email) . "rn";


      //  @wp_mail(get_option('admin_email'), sprintf(__('[%s] Nuova Registrazione Utente'), get_option('blogname')), $message);

        if ( empty($plaintext_pass) )
            return;

        $message  = __('Ciao,') . "rnrn";
        $message .= sprintf(__("Benvenuto su %s! Ecco come accedere:"), get_option('blogname')) . "rnrn";
        $message .= wp_login_url() . "rn";
        $message .= sprintf(__('Nome utente: %s'), $user_login) . "rn";
        $message .= sprintf(__('Password: %s'), $plaintext_pass) . "rnrn";
        $message .= sprintf(__('Se hai problemi, contattami a %s.'), get_option('admin_email')) . "rnrn";
        $message .= __('Ciao!');

        wp_mail($user_email, sprintf(__('[%s] Il tuo nome utente e password'), get_option('blogname')), $message);

    }
}

nel file functions.php del mio tema (ha la riga @wp_mail commentata) e ho anche provato a commentare quella riga in wp-includes/pluggable.php ma continuo a ricevere le email.

Sto usando WordPress 4.5.3 al momento. (AGGIORNATO a 4.6 durante questo processo)

Sto cercando di essere il più chiaro possibile. Non voglio che si interrompa l'email che va all'utente poiché dovrebbero continuare a riceverla, ma come posso fare in modo che l'email all'amministratore si fermi?

18
Commenti

Hai provato a metterlo nella cartella dei plugin?

Jarod Thornton Jarod Thornton
16 ago 2016 21:47:18

Non sapevo se sarebbe servito visto che ho modificato direttamente il pluggable.php. È sufficiente commentare solo questo?

rudtek rudtek
16 ago 2016 21:54:03

Ops. Intendevo postare qui. Non dovresti modificare i file core. È per questo che usiamo i plugin. Puoi chiamare pluggable dal plugin, ma se non è necessario (e raramente lo è), puoi semplicemente inserire il tuo codice in un file php, caricarlo nella directory dei plugin e attivarlo.

Jarod Thornton Jarod Thornton
16 ago 2016 21:56:39

Torno presto in ufficio e darò una mano se posso.

Jarod Thornton Jarod Thornton
16 ago 2016 21:57:49

stai usando WPMU o l'installazione stand alone?

Jarod Thornton Jarod Thornton
17 ago 2016 02:13:30

Ho fatto test su WPMU senza riuscire a replicare il problema. Però ho configurato un'installazione stand alone e ora capisco con cosa abbiamo a che fare.

Jarod Thornton Jarod Thornton
17 ago 2016 02:47:43

sto usando la modalità standalone

rudtek rudtek
17 ago 2016 02:53:50

Sono riuscito a fermare TUTTI gli avvisi, ma non è questo che vogliamo, però è un inizio.

Jarod Thornton Jarod Thornton
17 ago 2016 02:54:34

La riga 350 nel tuo pluggable.php è dove sto scavando, per tua informazione

Jarod Thornton Jarod Thornton
17 ago 2016 03:04:59

Non vogliono che possiamo cambiarlo lol. Potresti semplicemente creare filtri a livello di server in cPanel.

Filtri a livello di account & Filtri a livello di utente. Sono convinto che non ci sia soluzione a questo lol

Jarod Thornton Jarod Thornton
17 ago 2016 03:24:25

Un'altra opzione è rendere il tuo sito MultiSite e disabilitarlo lì.

Jarod Thornton Jarod Thornton
17 ago 2016 03:26:09

Mmm, terribile. Grazie comunque per tutto l'aiuto!

rudtek rudtek
17 ago 2016 21:09:41

yw np

Potresti anche creare un indirizzo email fittizio e impostare un filtro per eliminarli. Oppure modificare le impostazioni nel tuo client di posta, ma questo sarebbe limitato a servizi email basati sul web come Gmail per supportare più dispositivi.

La prima soluzione è come gestisco io quel tipo di notifiche.

Jarod Thornton Jarod Thornton
17 ago 2016 22:05:07

Continuiamo questa discussione in chat.

Jarod Thornton Jarod Thornton
17 ago 2016 22:17:22

Se non ti dispiace, accetta la risposta che ho scritto. Non è esattamente quello che cercavi, ma farà al caso tuo. Te ne sarei davvero grato.

Jarod Thornton Jarod Thornton
18 ago 2016 06:58:55

ho aggiunto un voto positivo, ma non posso selezionarlo come risposta perché l'hai pubblicato come commento e non come risposta?

rudtek rudtek
19 ago 2016 19:31:04

È proprio sotto questi commenti :)

Jarod Thornton Jarod Thornton
19 ago 2016 21:16:37

Questo ti porterà al link. Lo apprezzo. Continuerò a lavorare per trovare una soluzione a questo, ma al momento non vedo alcuna luce alla fine del tunnel.

Jarod Thornton Jarod Thornton
19 ago 2016 22:23:18
Mostra i restanti 13 commenti
Tutte le risposte alla domanda 5
11

Approccio per WordPress 4.6+

Controlla la patch nel ticket #36009 che è stata integrata nella versione 4.6 di WordPress.

Aggiunge l'opzione 'user' per il parametro di input $notify di wp_new_user_notification(), per saltare l'invio di quelle email all'amministratore.

Come funziona

La funzione register_new_user() contiene questa parte:

do_action( 'register_new_user', $user_id );

Le notifiche email vengono attivate con:

add_action( 'register_new_user', 'wp_send_new_user_notifications' );

dove il callback è definito come:

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

Soluzione alternativa

Potremmo quindi provare questo approccio (non testato) con un callback personalizzato e rimuovere quello predefinito:

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 );    
}

dove cambiamo il valore predefinito da 'both' a 'user'.

Vale la pena menzionare che wp_send_new_user_notifications() è anche collegata a queste azioni:

  • network_site_new_created_user
  • network_site_users_created_user
  • network_user_new_created_user
  • edit_user_created_user

Potremmo gestirle in modo simile a quanto descritto sopra.

18 ago 2016 15:45:23
Commenti

sembrava fantastico. Ho aggiornato alla versione 4.6 e ho provato, ma continua a inviarmi la notifica per i nuovi utenti.

rudtek rudtek
19 ago 2016 19:44:40

È elencato come una patch e richiede test unitari. Acque inesplorate.

Jarod Thornton Jarod Thornton
19 ago 2016 21:18:05

Ho appena provato su un'installazione pulita senza plugin e con il tema predefinito, ma senza successo.

Jarod Thornton Jarod Thornton
19 ago 2016 22:21:07

Terro' d'occhio questa cosa, perché ha davvero molto senso

rudtek rudtek
19 ago 2016 23:18:21

@Jarmerson Grazie per il test, ho appena notato un piccolo problema con il mio snippet, lo sistemerò ;-) Ps: il test unitario è stato aggiunto qui.

birgire birgire
19 ago 2016 23:26:35

@rudtek Ho appena aggiornato la risposta, corretto un refuso. L'ho testato e sembra funzionare ora nella mia installazione di test.

birgire birgire
19 ago 2016 23:31:30

Il codice sopra non funziona per me in WP 4.6.1.

wired wired
29 set 2016 21:13:18

Grazie per il tuo commento @wired. Ho testato questo codice con successo su un'installazione vanilla, come plugin, se ricordo bene. Hai ricevuto un errore PHP dal codice? Presuppone PHP 5.3+.

birgire birgire
29 set 2016 23:23:40

L'ho provato su un sito BuddyPress in produzione con molti plugin quindi potrebbe esserci un conflitto, non so. Semplicemente non funziona. Non sono in grado di testarlo localmente.

wired wired
2 ott 2016 03:26:48

È passato un po' di tempo dall'ultima volta che ho usato BuddyPress, quindi non l'ho testato lì, ma i plugin possono sempre interferire. @wired

birgire birgire
2 ott 2016 12:58:18

Penso che per qualche motivo non agganci l'azione, perché il tuo snippet DOVREBBE funzionare. Ho controllato wp_send_new_user_notifications e wp_new_user_notification in user.php e pluggable.php.

gdfgdfg gdfgdfg
6 feb 2019 00:36:47
Mostra i restanti 6 commenti
8

Approccio Pluggable Generico per WordPress < 4.6 (Vedi la risposta di @birgire per versioni > 4.6)

Le funzioni pluggable sono uno dei relitti più deprimenti del passato di WordPress e portano con sé una serie di complessità. Il fatto che modificare direttamente il file core (cosa del tutto sconsigliabile, come ha sottolineato @Jarmerson nei commenti) non abbia funzionato mi fa sospettare che un altro plugin nella tua installazione possa aver sovrascritto la funzione pluggable.

Il file wp-includes/pluggable.php viene caricato dopo i plugin attivi e i mu-plugin, ma prima del tema attivo; ciò significa che le "Funzioni Pluggable" possono essere sostituite solo da dichiarazioni presenti in un plugin.

La modifica che hai trovato nell'altra risposta si applica a una versione molto più vecchia di WordPress. Nel processo di sostituzione di qualsiasi funzione pluggable, dovresti iniziare con la funzione originale così come esiste nella versione della tua installazione (nel tuo caso, la v4.5.3). Facendo così, la soluzione diventa la seguente (commenti omessi; nessuna riga aggiunta, solo rimosse):

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(__('Username: %s'), $user->user_login) . "\r\n\r\n";
  $message .= __('Per impostare la tua password, visita il seguente indirizzo:') . "\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] Informazioni sul tuo username e password'), $blogname), $message);
}

Ho omesso il tradizionale controllo if( !function_exists() ) che tipicamente racchiude un override pluggable perché in questo caso un eventuale errore di dichiarazione duplicata è auspicabile - indicherebbe che un altro plugin ha sovrascritto la funzione wp_new_user_notification() prima di te, e quindi che il tuo tentativo di farlo viene completamente ignorato.

Consiglio di inserire questa funzione in un mu-plugin in quanto riduce la possibilità che un altro plugin ti preceda. In ogni scenario, non modificare il file core wp-includes/pluggable.php con il codice sopra.

18 ago 2016 09:23:40
Commenti

ho provato questo e ottengo questo errore: Errore fatale: Non è possibile ridefinire wp_new_user_notification() (già dichiarata in /home/tdh/public_html/wp-includes/pluggable.php:1709) in /home/tdh/public_html/wp-content/themes/tdh/functions.php alla riga 71

rudtek rudtek
19 ago 2016 21:30:24

Quell'errore è dovuto al fatto che la funzione wp_new_user_notification() è già stata dichiarata. Quello che devi fare è sovrascriverla includendo il controllo function_exists() in cui è racchiusa.

Se includi questo, credo che la tua funzione avrà la priorità rispetto al core di WP.

Jarod Thornton Jarod Thornton
19 ago 2016 22:13:52

@Jarmerson il controllo function_exists() non sovrascrive nulla - salta completamente la tua dichiarazione della funzione nel caso in cui la funzione sia già stata dichiarata. Tutto ciò che fa è sopprimere un errore fatale di collisione ignorando il tuo codice.

bosco bosco
19 ago 2016 22:29:39

@rudtek sembra che tu abbia inserito la mia soluzione nel tuo tema. Deve obbligatoriamente essere posizionata in un plugin - le override di funzioni pluggabili in un tema falliranno sempre.

bosco bosco
19 ago 2016 22:29:52

Lui sta lavorando su un'installazione standalone. Comunque ho appena testato il tuo codice su una installazione fresca e FUNZIONA!!! :D

@rudtek entra nella cartella dei plugin e crea semplicemente un nuovo file ad esempio disable-admin-notices.php e incolla questo subito dopo il tag di apertura /* Plugin Name: Disable Admin Email Notices */ poi incolla il codice di bosco e attivalo dai plugin. Ha funzionato per me.

Jarod Thornton Jarod Thornton
19 ago 2016 22:31:21

@Jarmerson un "mu-plugin" è un "plugin must-use" - i plugin posizionati in una cartella speciale risultano sempre "attivati" e vengono caricati prima degli altri plugin. Nessuna relazione con WPMU ;)

bosco bosco
19 ago 2016 22:35:26

Ovviamente no lol. Sto ancora imparando... Grazie.

Jarod Thornton Jarod Thornton
19 ago 2016 22:36:25

Ha funzionato. Lo stava inserendo come un plugin. Grazie @Bosco! Grazie anche a @Jamerson!

rudtek rudtek
19 ago 2016 23:17:24
Mostra i restanti 3 commenti
0

Per WordPress 6.1+

Ci sono hook che puoi utilizzare per gestire le email di base inviate dal sistema:

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

Questo impedirà all'installazione di inviare email con l'oggetto "[NOMESITO] Registrazione Nuovo Utente".

17 gen 2024 16:50:38
0

Dopo alcune ricerche, ho determinato che puoi disabilitare tutte le email di notifica, ma non quelle che vengono inviate all'amministratore.

Per rispondere alla tua domanda originale, posso offrirti alcuni consigli su come gestire le email di notifica indesiderate dalla registrazione degli utenti di WordPress e le email di reset della password.

Supponendo che tu abbia un ambiente cPanel che gestisce la tua installazione, segui semplicemente questi passaggi e avrai efficacemente rimosso quelle specifiche email.

Accedi a Filtri a Livello di Account dall'amministrazione di cPanel. In questa area puoi gestire i filtri per il tuo account principale. Devi Creare un Filtro e procedere a creare un Nuovo Filtro per Tutte le Email del Tuo Account.

Nel campo Regola seleziona A e uguale a. Nota: Puoi anche creare filtri per altre condizioni. L'ultimo campo è un'area di testo dove inserisci l'indirizzo email con cui stai lavorando. Sotto l'area delle regole è dove avviene la magia. Seleziona Scarta Messaggio. Ci sono anche altre opzioni.

Ho sempre creato un indirizzo email che so non verrà utilizzato e ho creato il filtro utilizzandolo.

Potrei continuare a parlare di hook pluggable di WordPress e simili, ma non c'è nulla che faccia esattamente quello che desideri. Peccato...

16 ago 2016 21:56:02
0

Questa soluzione ha funzionato per me. https://gist.github.com/someguy9/b24866f521ec3eb20b13feb4c72a6afd#file-disable-wordpress-admin-new-user-notification-php

    <?php
// Disabilita la notifica di nuovo utente inviata all'amministratore del sito
function smartwp_disable_new_user_notifications() {
    // Rimuove le email originali di creazione utente
    remove_action( 'register_new_user', 'wp_send_new_user_notifications' );
    remove_action( 'edit_user_created_user', 'wp_send_new_user_notifications', 10, 2 );
    
    // Aggiunge una nuova funzione per gestire la creazione delle email
    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' ){
        // Invia solo l'email al nuovo utente, non all'amministratore
        $notify = 'user';
    }
    wp_send_new_user_notifications( $user_id, $notify );
}
add_action( 'init', 'smartwp_disable_new_user_notifications' );
16 ott 2022 20:18:32