为了实现这一点,我们可以阻止管理员通过身份验证进入站点,即使他们的登录名和密码正确,除非他们使用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 );