Envato Elements - pobierasz co chcesz, ile chcesz

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.
Młody Szymon dzięki motywowi Divi od Elegant Themes zrobił stronę dla firmy ojca
WebInsider poleca księgowość wFirma
WebInsider korzysta z VPSa w HitMe.pl
WebInsider poleca VPSy DigitalOcean
WebInsider poleca serwis Vindicat
Napisz komentarz
wipl_napisz-komentarz_01Jeśli informacje zawarte na tej stronie okazały się pomocne, możesz nam podziękować zostawiając poniżej swój komentarz.

W tej formie możesz również zadać dodatkowe pytania dotyczące wpisu, na które – w miarę możliwości – spróbujemy Ci odpowiedzieć.
Linki partnerskie
Niektóre z linków na tej stronie to tzw. „linki partnerskie”, co oznacza, że jeśli klikniesz na link i dokonasz wymaganej akcji (np. zakup/rejestracja) możemy otrzymać za to prowizję. Pamiętaj, że polecamy tylko te produkty i usługi, z których sami korzystamy, i uważamy, że są tego na prawdę warte… :-)
Znaki towarowe i nazwy marek
W niektórych wpisach (oraz innych miejscach na stronie) mogą być przedstawione/użyte znaki towarowe i/lub nazwy marek, które stanowią własność intelektualną tych podmiotów, a zostały użyte wyłącznie w celach informacyjnych.
Monika ćwiczy przed kongresem ko..., ale jej też należy się zniżka 80% na skięgowość wFirma dla oglądających WebInsider.pl