当任何人登录或试图登录WordPress仪表板时,收到电子邮件


Get email when anyone logs in or tries to login WordPress dashboard

我有一个网站,需要使更安全。所以我试图通过电子邮件获得通知时,任何尝试(失败或成功无关紧要),使登录到我的网站。我已经试过下面的代码。

<?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/