这可能是实现类似结果的不同方法
我希望能够阻止任何人通过忘记密码链接更改管理员密码-我希望为订阅者保留忘记密码链接
请注意,如果您运气不好忘记了管理员密码,您需要有一种替代方法来重置管理员密码(例如直接数据库访问)
您可以将此代码中的“administrator”更改为您想要限制的任何用户,例如“subscriber”。
如果管理员试图重置密码(或者更确切地说,如果您的管理员电子邮件已被黑客攻击,而黑客正试图获取重置链接),他们应该无法重置。
应使用标准消息阻止它们:
此用户不允许重置密码
Put this code at the end of your functions.php in your child theme.
// Block Admin Accounts from external Password Reset
function disable_password_reset() {
return false;
}
add_action( \'retrieve_password\', \'log_password_requests\' );
function log_password_requests( $user_name_or_email ) {
$user = get_user_by( \'login\', $user_name_or_email );
if (in_array( "administrator", $user->roles )){
add_filter ( \'allow_password_reset\', \'disable_password_reset\' );
}else{
remove_filter ( \'allow_password_reset\', \'disable_password_reset\' );
}
}
学分-感谢:
您可以使用以下代码获得角色:
Getting a user role from the user login name
这就是我的阻塞代码的来源:
https://www.isitwp.com/disable-the-allow_password_reset-feature/
您可以扩展要阻止的选项数,或者使用
!
选择
users->roles
数组应该是您想要的。感谢:
https://stackoverflow.com/questions/2440506/how-to-check-if-an-array-value-exists
同时打开
https://www.geeksforgeeks.org/php-in_array-function/这就是我得到代码的地方——最初是为了记录试图更改密码的人——我用它包装并触发密码重置阻止功能。它提供钩子来检测何时发出密码重置请求,并抓取发出请求的用户。正如这篇文章所建议的,您还可以添加一行记录用户。
How can I tell who changed the password?
这个答案提供了一些关于如何将日志文件与PHP错误日志分开的有用想法:
https://stackoverflow.com/questions/4660692/is-it-possible-to-print-a-log-of-all-database-queries-for-a-page-request-in-word/4660903#4660903我在其他任何地方都找不到这个确切的功能,所以希望它能帮助别人。
如果我的代码不完全是WordPress的完美代码,但到目前为止,它已经在六个网站上运行过,并且表现出了预期的效果,我深表歉意。它使用标准的功能wp-login.php
模板-抱歉,对于那些想要更多个性化内容的人,这里还有其他代码。