我有一个网站,需要使更安全。所以我试图通过电子邮件获得通知时,任何尝试(失败或成功无关紧要),使登录到我的网站。我已经试过下面的代码。
<?php
function wpsln_log_wp_user_login( $user_user_login, $user ) {
$admin_email = get_bloginfo('admin_email');
$site_info = sprintf('%1$s (%2$s)', get_bloginfo('name'), get_bloginfo('wpurl'));
// generate email core
$header = 'From: "'.$admin_email.'" <'.$admin_email.'>'. "'r'n";
$header .= "Content-type: text/html; charset: ".get_bloginfo('charset')."'r'n";
$email_subject = sprintf(__('Login of the user %1$s on the website %2$s', 'wpsln'), $user->user_login, $site_info);
$body_message = sprintf(__('Hello a user has logged in on the website %1$s. Here are the details of this access:', 'wpsln'),$site_info).'<br />'."'n";
$body_message .= sprintf(__('User email: %1$s', 'wpsln'), $user->user_email).'<br />'."'n";
wp_mail($admin_email, $email_subject, $body_message, $header);
}
add_action( 'wp_login', 'wpsln_log_wp_user_login', '60', 2 );
function wpsln_log_wp_user_login_fail( $username ) {
$site_info = sprintf(__('%1$s (%2$s)', 'wpsln'), get_bloginfo('name'), get_bloginfo('wpurl'));
// generate email core
$header = 'From: "'.$admin_email.'" <'.$admin_email.'>'. "'r'n";
$header .= "Content-type: text/html; charset: ".get_bloginfo('charset')."'r'n";
$email_subject = sprintf(__('/!' Error : login failed on %1$s', 'wpsln'), $site_info);
$body_message = sprintf(__('Hello, someone just failed to log in on %1$s. Here are the details:', 'wpsln'),$site_info).'<br />'."'n";
$body_message .= sprintf(__('Login: %1$s', 'wpsln'), $username).'<br />'."'n";
wp_mail($admin_email, $email_subject, $body_message, $header);
}
add_action( 'wp_login_failed', 'wpsln_log_wp_user_login_fail' );
但是这段代码并没有给我通知。我不明白的问题是什么?实际上我是WordPress的新手。所以请帮帮我。
又问你一个问题。这里是代码可能是通知被发送到管理电子邮件。在我的网站有两个更多的管理。我的问题是"通知邮件发送到哪个管理电子邮件?"
谢谢你的阅读。
你的做法是正确的,但我认为你很晚才调用wp_login
钩子。
add_action( 'wp_login', 'wpsln_log_wp_user_login', '10', 2 );
而不是add_action( 'wp_login', 'wpsln_log_wp_user_login', '60', 2 );
和您的wp_login_failed工作正常,但您缺少
$admin_email = get_bloginfo('admin_email');
邮件将被发送给内部的管理员设置->常规->电子邮件地址
你为什么不用Wordfence呢?它会提供详细信息,例如尝试的时间,ip地址,国家,并允许您阻止它们。它还告诉您登录者和用户角色。每次登录失败或成功时,您还会收到一封电子邮件通知。我通常设置为一次尝试。这消除了来自同一个ip的多次尝试,并阻止他们登录至少5分钟。如果你愿意,你可以永久屏蔽它们。那是我通常做的。
我等到他们试图登录,wordfence捕获他们,我看到他们的ip地址,然后我禁止他们从网站。
https://wordpress.org/plugins/wordfence/