如何阻止WordPress管理员通过WooCommerce我的帐户页面登录

时间:2021-12-05 作者:Nina

网站管理员可以使用woocommerce我的帐户页面登录。是否有任何方法可以防止这种情况并更改admin的登录页面?我的意思是管理员用户名、电子邮件和密码只有在我的自定义登录页面中才可以接受。

1 个回复
最合适的回答,由SO网友:Greg36 整理而成

为了实现这一点,我们可以阻止管理员通过身份验证进入站点,即使他们的登录名和密码正确,除非他们使用WordPress默认表单而不是WooCommerce登录页面。

首先,在处理登录请求时,我们需要区分两种表单,为此,我们需要在WP的核心登录表单中添加一个隐藏字段:

/**
 * Add a hidden field to admin login page to distinguish where request originated
 */
function wpse_398884_add_admin_login_hidden_field() {
    echo \'<input type="hidden" name="admin-login-page" value="1" />\';
}
add_action( \'login_form\', \'wpse_398884_add_admin_login_hidden_field\', 10, 0 );
然后我们在wp_authenticate 作用首先,我们检查用户是否经过正确的身份验证,然后检查admin-login-page 变量已设置。如果不是,则意味着登录是从WooCommerce表单进行的,因此我们会返回一个错误并向用户发送一条消息。

/**
 * Restrict admin login access only to main WordPress login form
 */
function wpse_398884_restrict_admin_login_location( $user, $username, $password ) {

    if ( $user instanceof WP_User && ! isset( $_POST[\'admin-login-page\'] ) ) {
        if ( array_intersect( (array) $user->roles, [ \'administrator\' ] ) ) {
            return new WP_Error( \'admin-error\', \'Use admin login page instead.\' );
        }
    }

    return $user;
}
add_filter( \'authenticate\', \'wpse_398884_restrict_admin_login_location\', 40, 3 );

相关推荐

在该主题的函数.php文件中添加html链接

我使用的选项是,人们需要有一个帐户才能结账。因此,签出页面被阻止。此时,您将收到消息“您必须登录才能结账”。为了提高客户不必搜索单击下一步的位置,我想添加额外的超链接文本。我发现这段代码工作得很好,但HTML在“我的消息”区域中不起作用。function filter_woocommerce_checkout_must_be_logged_in_message( $message ) { $message = \'MY MESSAGE\'; return $message;