Wdrożenie Omnibusa w sklepie na WooCommerce (kurs)

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
Pomogłem? To może postawisz mi wirtualną kawę?
LUTy dla D-Cinelike (DJI Mini 3 Pro, DJI Avata, OSMO Pocket) od MiniFly
Wdrożenie Omnibusa w sklepie na WooCommerce
Jak (legalnie) latać dronem w Kategorii Otwartej
Wdrożenie Omnibusa w sklepie na WooCommerce (kurs)
Patryk
Wdrożenie Omnibusa w sklepie na WooCommerce (kurs)