Potrzebujesz profesjonalnej pomocy? Skontaktuj się z nami!

Kiedyś pisałem o tym, jak w prosty sposób ustawić, by po każdym logowaniu użytkownika do serwera VPS przychodził do nas e-mail z odpowiednią informacją.Teraz pokażę jak to zrobić w WordPressie…

E-mail z informacją o zalogowaniu się użytkownika do WordPressa

Wprawdzie każdy zainteresowany tematem zapewne bez problemu znajdzie przynajmniej kilka wtyczek, za pomocą których możemy ustawić powiadomienia o zalogowaniu się do WordPressa, ale dlaczego nie zrobić tego samemu – zwłaszcza że jest to dość prosta operacja.

Wykorzystamy tu kilka linijek kodu, które umieścimy w pliku functions.php naszego motywu (zalecam korzystać z motywów potomnych). A w przypadku gdy z Waszej strony korzysta więcej osób, być może warto skorzystać z wtyczki typu „must-use”.

Zaczynamy najpierw od przygotowania funkcji, która zostanie wykonana przy każdym logowaniu:

function webinsider_wp_email_after_user_login( $user_login ) {
// KOD DO WYKONANIA
}
add_action('wp_login', 'webinsider_wp_email_after_user_login', 99, 1);

Teraz możemy przygotować kod odpowiedzialny za wysłanie wiadomości – skorzystamy też z pobieranej powyżej zmiennej „username”, dzięki czemu w wiadomości od razu będzie nazwa użytkownika, który się zalogował:

$to = '[email protected]';
$subject = 'Webinsider - logowanie użytkownika: ' . $user_login; 
$message = 'Wiadomość ze strony Webinsider.pl';
    
$headers = array( 'Content-Type: text/plain; charset=UTF-8;' );

wp_mail( $to, $subject, $message, $headers );

Całość będzie wyglądać tak:

function webinsider_wp_email_after_user_login( $user_login ) {

    $to = '[email protected]';
    $subject = 'Webinsider - logowanie użytkownika: ' . $user_login; 
    $message = 'Wiadomość ze strony Webinsider.pl';
    
    $headers = array( 'Content-Type: text/plain; charset=UTF-8;' );

    wp_mail( $to, $subject, $message, $headers );
}
add_action('wp_login', 'webinsider_wp_email_after_user_login', 99, 1);

Dzięki temu za każdym razem, gdy ktoś zaloguje się do panelu zarządzania WordPressem otrzymamy zdefiniowane powiadomienie (oczywiście warto wcześniej upewnić się, że w naszym WordPressie mamy poprawnie skonfigurowane konto do wysyłania wiadomości e-mail).

Jest to oczywiście wersja dość podstawowa, nic nie stoi na przeszkodzie by rozbudować to o dodatkowe opcje, np. różne adresy dla różnych użytkowników, czy powiadomienia tylko gdy zaloguje się użytkownik z wybranej grupy/z wybranymi uprawnieniami, np.:

function webinsider_wp_email_user_login( $user_login, $user ) {

 $user_info = stripslashes( $user_login ); 

 $to = '[email protected]';

 $subject = get_option('blogname') . " -> " . current_filter() . ": " . $user_info;

 $message = current_time( 'mysql' );
 if ( !empty( $_SERVER['REQUEST_TIME'] ) ) { $message = $message . " (" . $_SERVER['REQUEST_TIME'] . ")"; }
 if ( !empty( $_SERVER['REMOTE_ADDR'] ) ) { $message = $message . " | IP RA: " . $_SERVER['REMOTE_ADDR']; }
 if ( !empty( $_SERVER['HTTP_X_FORWARDED_FOR'] ) ) { $message = $message . " | IP X: " . $_SERVER['HTTP_X_FORWARDED_FOR']; }
 if ( !empty( $_SERVER["HTTP_CF_IPCOUNTRY"] ) ) { $message = $message . " | CF CC: " . $_SERVER["HTTP_CF_IPCOUNTRY"]; }
 $message = $message . "\r\n";
 if ( !empty( $_SERVER['REQUEST_URI'] ) ) { $message = $message . "Request URI: " . $_SERVER['REQUEST_URI']; }
 if ( !empty( $_SERVER['SCRIPT_FILENAME'] ) ) { $message = $message . " (" . $_SERVER['SCRIPT_FILENAME'] . ")"; }
 $message = $message . "\r\n";
 if ( !empty( $_SERVER['PATH_INFO'] ) ) { $message = $message . "Patch: " . $_SERVER['PATH_INFO']; }
 $message = $message . "\r\n";
 if ( !empty( $_SERVER['HTTP_HOST'] ) ) { $message = $message . "HTTP Host: " . $_SERVER['HTTP_HOST']; }
 $message = $message . "\r\n";
 if ( !empty( $_SERVER['HTTP_REFERER'] ) ) { $message = $message . "HTTP Referer: " . $_SERVER['HTTP_REFERER']; }
 $message = $message . "\r\n";
 if ( !empty( $_SERVER['HTTP_USER_AGENT'] ) ) { $message = $message . "HTTP UA: " . $_SERVER['HTTP_USER_AGENT']; }

 $headers = array( 'Content-Type: text/plain; charset=UTF-8;' );

 wp_mail( $to, $subject, $message, $headers );

}
add_action( 'wp_login', 'webinsider_wp_email_user_login', 10, 2 );

Powyższy kod spowoduje przesłanie takiej wiadomości:

2017-09-15 07:58:53 (1505455132) | IP RA: [Adres IP] | IP X: [Adres IP] | CF CC: PL
Request URI: /wp-login.php (/var/www/public_html/wp-login.php)

HTTP Host: webinsider.pl
HTTP Referer: https://webinsider.pl/wp-login.php?loggedout=true
HTTP UA: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:55.0) Gecko/20100101 Firefox/55.0

Oprócz standardowych funkcji WordPressa, PHP i (web)serwera wykorzystałem tu kod kraju odwiedzającego, przesyłany przez CloudFlare (moja strona akurat jest „schowana” za CloudFlare).

W tytule wiadomości korzystam z funkcji current_filter() dostępnej w WordPressie zamiast samodzielnego opisywania czynności, bo podany kod po lekkich modyfikacjach można wykorzystać również do powiadomień o innych zdarzeniach.

Rejestracja nowego użytkownika:

function webinsider_wp_email_new_user_register( $user_id ) {

 $user = get_userdata( $user_id );
 $user_info = stripslashes( $user->user_login );
 $user_info = $user_info . "/" . $user_id;; 

 $to = '[email protected]';

 $subject = get_option('blogname') . " -> " . current_filter() . ": " . $user_info;

 $message = current_time( 'mysql' );
 if ( !empty( $_SERVER['REQUEST_TIME'] ) ) { $message = $message . " (" . $_SERVER['REQUEST_TIME'] . ")"; }
 if ( !empty( $_SERVER['REMOTE_ADDR'] ) ) { $message = $message . " | IP RA: " . $_SERVER['REMOTE_ADDR']; }
 if ( !empty( $_SERVER['HTTP_X_FORWARDED_FOR'] ) ) { $message = $message . " | IP X: " . $_SERVER['HTTP_X_FORWARDED_FOR']; }
 if ( !empty( $_SERVER["HTTP_CF_IPCOUNTRY"] ) ) { $message = $message . " | CF CC: " . $_SERVER["HTTP_CF_IPCOUNTRY"]; }
 $message = $message . "\r\n";
 if ( !empty( $_SERVER['REQUEST_URI'] ) ) { $message = $message . "Request URI: " . $_SERVER['REQUEST_URI']; }
 if ( !empty( $_SERVER['SCRIPT_FILENAME'] ) ) { $message = $message . " (" . $_SERVER['SCRIPT_FILENAME'] . ")"; }
 $message = $message . "\r\n";
 if ( !empty( $_SERVER['PATH_INFO'] ) ) { $message = $message . "Patch: " . $_SERVER['PATH_INFO']; }
 $message = $message . "\r\n";
 if ( !empty( $_SERVER['HTTP_HOST'] ) ) { $message = $message . "HTTP Host: " . $_SERVER['HTTP_HOST']; }
 $message = $message . "\r\n";
 if ( !empty( $_SERVER['HTTP_REFERER'] ) ) { $message = $message . "HTTP Referer: " . $_SERVER['HTTP_REFERER']; }
 $message = $message . "\r\n";
 if ( !empty( $_SERVER['HTTP_USER_AGENT'] ) ) { $message = $message . "HTTP UA: " . $_SERVER['HTTP_USER_AGENT']; }

 $headers = array( 'Content-Type: text/plain; charset=UTF-8;' );

 wp_mail( $to, $subject, $message, $headers );

}
add_action( 'user_register', 'webinsider_wp_email_new_user_register', 10, 1 );

Skasowanie użytkownika:

function webinsider_wp_email_delete_user( $user_id ) {

 $user = get_userdata( $user_id );
 $user_info = stripslashes( $user->user_login );
 $user_info = $user_info . "/" . $user_id;; 

 $to = '[email protected]';

 $subject = get_option('blogname') . " -> " . current_filter() . ": " . $user_info;

 $message = current_time( 'mysql' );
 if ( !empty( $_SERVER['REQUEST_TIME'] ) ) { $message = $message . " (" . $_SERVER['REQUEST_TIME'] . ")"; }
 if ( !empty( $_SERVER['REMOTE_ADDR'] ) ) { $message = $message . " | IP RA: " . $_SERVER['REMOTE_ADDR']; }
 if ( !empty( $_SERVER['HTTP_X_FORWARDED_FOR'] ) ) { $message = $message . " | IP X: " . $_SERVER['HTTP_X_FORWARDED_FOR']; }
 if ( !empty( $_SERVER["HTTP_CF_IPCOUNTRY"] ) ) { $message = $message . " | CF CC: " . $_SERVER["HTTP_CF_IPCOUNTRY"]; }
 $message = $message . "\r\n";
 if ( !empty( $_SERVER['REQUEST_URI'] ) ) { $message = $message . "Request URI: " . $_SERVER['REQUEST_URI']; }
 if ( !empty( $_SERVER['SCRIPT_FILENAME'] ) ) { $message = $message . " (" . $_SERVER['SCRIPT_FILENAME'] . ")"; }
 $message = $message . "\r\n";
 if ( !empty( $_SERVER['PATH_INFO'] ) ) { $message = $message . "Patch: " . $_SERVER['PATH_INFO']; }
 $message = $message . "\r\n";
 if ( !empty( $_SERVER['HTTP_HOST'] ) ) { $message = $message . "HTTP Host: " . $_SERVER['HTTP_HOST']; }
 $message = $message . "\r\n";
 if ( !empty( $_SERVER['HTTP_REFERER'] ) ) { $message = $message . "HTTP Referer: " . $_SERVER['HTTP_REFERER']; }
 $message = $message . "\r\n";
 if ( !empty( $_SERVER['HTTP_USER_AGENT'] ) ) { $message = $message . "HTTP UA: " . $_SERVER['HTTP_USER_AGENT']; }

 $headers = array( 'Content-Type: text/plain; charset=UTF-8;' );

 wp_mail( $to, $subject, $message, $headers );

}
add_action( 'delete_user', 'webinsider_wp_email_delete_user', 10, 1 );

Zmiana danych w profilu użytkownika:

function webinsider_wp_email_user_profile_update( $user_id ) {

 $user = get_userdata( $user_id );
 $user_info = stripslashes( $user->user_login );
 $user_info = $user_info . "/" . $user_id;; 

 $to = '[email protected]';

 $subject = get_option('blogname') . " -> " . current_filter() . ": " . $user_info;

 $message = current_time( 'mysql' );
 if ( !empty( $_SERVER['REQUEST_TIME'] ) ) { $message = $message . " (" . $_SERVER['REQUEST_TIME'] . ")"; }
 if ( !empty( $_SERVER['REMOTE_ADDR'] ) ) { $message = $message . " | IP RA: " . $_SERVER['REMOTE_ADDR']; }
 if ( !empty( $_SERVER['HTTP_X_FORWARDED_FOR'] ) ) { $message = $message . " | IP X: " . $_SERVER['HTTP_X_FORWARDED_FOR']; }
 if ( !empty( $_SERVER["HTTP_CF_IPCOUNTRY"] ) ) { $message = $message . " | CF CC: " . $_SERVER["HTTP_CF_IPCOUNTRY"]; }
 $message = $message . "\r\n";
 if ( !empty( $_SERVER['REQUEST_URI'] ) ) { $message = $message . "Request URI: " . $_SERVER['REQUEST_URI']; }
 if ( !empty( $_SERVER['SCRIPT_FILENAME'] ) ) { $message = $message . " (" . $_SERVER['SCRIPT_FILENAME'] . ")"; }
 $message = $message . "\r\n";
 if ( !empty( $_SERVER['PATH_INFO'] ) ) { $message = $message . "Patch: " . $_SERVER['PATH_INFO']; }
 $message = $message . "\r\n";
 if ( !empty( $_SERVER['HTTP_HOST'] ) ) { $message = $message . "HTTP Host: " . $_SERVER['HTTP_HOST']; }
 $message = $message . "\r\n";
 if ( !empty( $_SERVER['HTTP_REFERER'] ) ) { $message = $message . "HTTP Referer: " . $_SERVER['HTTP_REFERER']; }
 $message = $message . "\r\n";
 if ( !empty( $_SERVER['HTTP_USER_AGENT'] ) ) { $message = $message . "HTTP UA: " . $_SERVER['HTTP_USER_AGENT']; }

 $headers = array( 'Content-Type: text/plain; charset=UTF-8;' );

 wp_mail( $to, $subject, $message, $headers );

}
add_action( 'profile_update', 'webinsider_wp_email_user_profile_update', 10, 1 );

I wielu innych zdarzeń, bo co jak co, ale WordPress hakami stoi… ;-)

(!) Zgłoś błąd na stronie
Potrzebujesz profesjonalnej pomocy? Skontaktuj się z nami!

Spodobał Ci się artykuł? Zapisz się do naszego Newslettera - ZERO SPAMu, same konkrety, oraz dostęp do dodatkowych materiałów przeznaczonych dla subskrybentów!

Na podany adres e-mail otrzymasz od nas wiadomość e-mail, w której znajdziesz link do potwierdzenia subskrypcji naszego Newslettera. Dzięki temu mamy pewność, że nikt nie dodał Twojego adresu przez przypadek. Jeśli wiadomość nie przyjdzie w ciągu najbliższej godziny (zazwyczaj jest to maksymalnie kilka minut) sprawdź folder SPAM.

Patryk

CEO Webinsider.pl, a do tego CTO, CIO, CFO, CMO, CSO, COO i CRO ;-)
Pasjonat nowych technologii - od sprzętu po oprogramowanie, od serwerów po smartfony i rozwiązania IoT. Potencjalnie kiepski bloger, bo nie robi zdjęć "talerza" zanim zacznie jeść.

Dumny przyjaciel swoich psów :-)
Envato Elements - pobierasz co chcesz, ile chcesz