Wyłącz adres e-mail hasła rejestracji użytkownika

13

Tak więc WordPress 4.3 ma nowy system haseł, jak wszyscy wiemy. Niestety, ten nowy system wyeliminował możliwość NIE wysyłania nowym użytkownikom wiadomości e-mail.

Mój klient korzystał z systemu, w którym wysyłał niestandardową wiadomość e-mail do swoich klientów, ręcznie rejestrując ich wiadomości e-mail, a następnie wysyłając im wiadomość e-mail z danymi logowania za pomocą niestandardowej wiadomości. Wiemy, że ten nowy system stara się być bardziej bezpieczny, ale to nie działa na tyle kontroli, jakiej by chciał.

Znalazłem następujący kod w poszukiwaniu rozwiązania, aby wyłączyć te e-maile, ale myślę, że wyłączają one powiadomienia e-mail tylko wtedy, gdy e-mail użytkownika został ZMIENIONY dla wcześniej zarejestrowanych użytkowników, a nie przy jego pierwszym utworzeniu:

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

Czy ktoś wie, jak wyłączyć te początkowe e-maile z hasłem wysłane po rejestracji?

Dziękuję Ci.

Lisa Cerilli
źródło
2
Próbowałeś tego? add_filter( 'user_registration_email', '__return_false');
Abhik,

Odpowiedzi:

9

Możesz przechwycić tego e-maila, zanim zostanie on wysłany za pomocą phpmailer_inithaka.

Domyślnie ten hak jest uruchamiany przed wysłaniem wiadomości e-mail. W funkcji poniżej $phpmailerbędzie instancja PHPMailera i możesz użyć jej metod do usunięcia domyślnego odbiorcy i manipulowania wiadomością e-mail przed jej wysłaniem.

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
źródło
działa to bezbłędnie, całkowicie rozwiązało mój problem i jest idealne również do innych zastosowań. Dzięki za świetną odpowiedź!
pattyd
3

W rzeczywistości zależy to od sposobu utworzenia nowego użytkownika. Jeśli zrobisz to z administracji - Użytkownicy - Dodaj nowy masz rację. W 4.3 niestety nie można wyłączyć wysyłania powiadomienia e-mail. Ale jeśli naprawdę chcesz utworzyć nowego użytkownika bez wiadomości e-mail, istnieje sposób.

Możesz utworzyć małą wtyczkę, w której sam utworzyłbyś nowe konto za pomocą wp_insert_userfunkcji, która domyślnie nie wysyła żadnych wiadomości e-mail.

Tę funkcję można nazwać w ten sposób.

wp_insert_user( $userdata );

Gdzie userdataparametrem jest tablica, w której można przekazać wszystkie potrzebne informacje.

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

Aby uzyskać więcej informacji, sprawdź kodeks tutaj .

Emetrop
źródło
Więc ta funkcja jest wywoływana za każdym razem, gdy tworzony jest nowy użytkownik.
Lisa Cerilli,
3

wp_new_user_notificationFunkcja tę zaletę, że można zastąpić je definiując własne. Powinieneś być w stanie skopiować całą funkcję ze wp-includes/pluggable.phpswojej wtyczki (lub functions.php) i usunąć wiersz, który wysyła wiadomość e-mail.

Simon Blackbourn
źródło
1
Nie można przesłonić wp_new_user_notification w pliku theme.php, ponieważ funkcje wtykowe są ładowane przed kompozycją. Musi zostać zastąpione we wtyczce lub wtyczce mu. Czytaj więcej: wordpress.stackexchange.com/a/55966/56759
fandasson
1

Aby rozwiązać ten problem w swoim motywie, utwórz nową wtyczkę mu, tworząc nowy plik wp_new_user_notifications.php(nazwa należy do Ciebie) i umieść go w wp-content/mu-pluginsfolderze. Jeśli nie ma takiego folderu, utwórz go. Pamiętaj, aby umieścić plik php bezpośrednio w folderze, a nie w żadnym podfolderze.

Następnie kontynuuj zgodnie z sugestią Simona - skopiuj wp_new_user_notifications.phpmetodę ze wp-includes/pluggable.phpswojego nowego wp_new_user_notifications.phppliku i zmodyfikuj w razie potrzeby.

Aby odpowiedzieć na twoje pytanie: do wyłączenia początkowego hasła wystarczy e-mail, aby usunąć ostatnie wp_mailwywołanie metody

fandasson
źródło
0
add_filter('send_password_change_email', '__return_false');

Pracuje. Konieczne jest jednak dodanie go do wtyczki, a nie funkcji.php dla motywu.

Lubić.

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

  public function init_hooks() {
    add_filter('send_password_change_email', '__return_false');
  }
}
Philip
źródło