Deaktivieren Sie die Benutzerregistrierungskennwort-E-Mail

13

Also, WordPress 4.3 hat ein neues Passwortsystem, wie wir alle wissen. Leider hat dieses neue System die Möglichkeit beseitigt , neuen Benutzern KEINE E-Mails zu senden.

Mein Kunde verwendete ein System, in dem er seinen Kunden eine benutzerdefinierte E-Mail schickte, deren E-Mails manuell registrierte und ihnen anschließend eine E-Mail mit den Anmeldeinformationen mit einer benutzerdefinierten Nachricht schickte. Wir sind uns bewusst, dass dieses neue System versucht, sicherer zu sein, aber dies funktioniert nicht für das Maß an Kontrolle, das er gerne hätte.

Ich habe auf meiner Suche nach einer Lösung zum Deaktivieren dieser E-Mails den folgenden Code gefunden, aber ich denke, dass die Benachrichtigungs-E-Mails nur deaktiviert werden, wenn die E-Mail eines Benutzers für zuvor registrierte Benutzer GEÄNDERT wurde, nicht beim erstmaligen Erstellen:

add_filter( 'send_password_change_email', '__return_false');
add_filter( 'send_email_change_email', '__return_false');

Kennt jemand eine Möglichkeit, diese anfänglichen Passwort-E-Mails zu deaktivieren, die nach der Registrierung gesendet werden?

Vielen Dank.

Lisa Cerilli
quelle
2
Hast du das versucht? add_filter( 'user_registration_email', '__return_false');
Abhik

Antworten:

9

Sie können diese E-Mail abfangen, bevor sie mit dem phpmailer_initHook gesendet wird .

Standardmäßig wird dieser Haken ausgelöst, bevor eine E-Mail gesendet wird. In der folgenden Funktion $phpmailerwird eine Instanz von PHPMailer verwendet , und Sie können dessen Methoden verwenden, um den Standardempfänger zu entfernen und die E-Mail zu bearbeiten , bevor sie gesendet wird.

add_action('phpmailer_init', 'wse199274_intercept_registration_email');
function wse199274_intercept_registration_email($phpmailer){
    $admin_email = get_option( 'admin_email' );

    # Intercept username and password email by checking subject line
    if( strpos($phpmailer->Subject, 'Your username and password info') ){
        # clear the recipient list
        $phpmailer->ClearAllRecipients();
        # optionally, send the email to the WordPress admin email
        $phpmailer->AddAddress($admin_email);
    }else{
        #not intercepted
    }
}
Sxalexander
quelle
Dies funktioniert einwandfrei, hat mein Problem vollständig gelöst und ist auch für andere Zwecke perfekt geeignet. Vielen Dank für eine tolle Antwort!
Pattyd
3

Tatsächlich hängt es davon ab, wie Sie den neuen Benutzer erstellen. Wenn Sie dies über Administration - Benutzer - Neu hinzufügen tun, sind Sie richtig. In 4.3 können Sie das Versenden der Benachrichtigungs-E-Mail leider nicht deaktivieren. Aber wenn Sie wirklich einen neuen Benutzer ohne die E-Mail erstellen möchten, gibt es einen Weg.

Sie können ein kleines Plugin erstellen, in dem Sie selbst über die wp_insert_userFunktion ein neues Konto erstellen . Standardmäßig werden keine E-Mails gesendet.

Diese Funktion kann so aufgerufen werden.

wp_insert_user( $userdata );

Bei dem die userdata Parameter ein Array, in dem Sie alle erforderlichen Informationen übergeben können.

$userdata = array(
    'user_login'  =>  'login',
    'user_pass'   =>  'password',
);

$user_id = wp_insert_user( $userdata ) ;

//On success
if ( ! is_wp_error( $user_id ) ) {
    echo "User created : ". $user_id;
}

Weitere Informationen finden Sie im Codex hier .

Emetrop
quelle
Diese Funktion wird also immer dann aufgerufen, wenn ein neuer Benutzer erstellt wird, nehme ich an?
Lisa Cerilli
3

Die wp_new_user_notificationFunktion ist steckbar, Sie können sie also überschreiben, indem Sie Ihre eigene definieren. Sie sollten in der Lage sein, die gesamte Funktion von wp-includes/pluggable.phpin Ihr Plugin (oder functions.php) zu kopieren und die Zeile zu entfernen, die die E-Mail versendet.

Simon Blackbourn
quelle
1
Sie können wp_new_user_notification in der functions.php des Themas nicht überschreiben, da steckbare Funktionen vor dem Theme geladen werden. Es muss im Plugin oder Mu-Plugin überschrieben werden. Weitere
Informationen
1

Um dies in Ihrem Theme zu lösen, erstellen Sie ein neues Mu-Plugin, indem Sie eine neue Datei erstellenwp_new_user_notifications.php (der Name liegt bei Ihnen) und diese in einen wp-content/mu-pluginsOrdner legen . Wenn es keinen solchen Ordner gibt, erstellen Sie einen. Denken Sie daran, die PHP-Datei direkt in den Ordner zu legen, nicht in einen Unterordner.

Dann mach weiter wie von Simon vorgeschlagen - Kopiermethode wp_new_user_notifications.phpvonwp-includes/pluggable.php in Ihre brandneue wp_new_user_notifications.phpDatei und ändern Sie sie nach Bedarf.

So beantworten Sie Ihre Frage: Zum Deaktivieren des ersten Kennworts reichen E-Mails aus, um den letzten wp_mailMethodenaufruf zu entfernen .

Fandasson
quelle
0
add_filter('send_password_change_email', '__return_false');

Funktioniert. Aber es ist wesentlich, dass es dem Plugin selbst hinzugefügt wird und nicht der functions.php für das Theme.

Mögen.

class ... {
  public function __construct() {
    ...
    $this->init_hooks();
  }

  public function init_hooks() {
    add_filter('send_password_change_email', '__return_false');
  }
}
Philip
quelle