ユーザーがウェブサイトを見るためにはログインが必要なウェブサイトがあります。私はすべての内部メンバーがウェブサイトを見るために使用するために一人のユーザーを設定しました、しかし私は私達の特定のIPアドレスにそのユーザーだけを制限したいです。
私はあなたがサイト全体のアクセスをhtaccess経由でIPアドレスに制限することができるのを見ることができます、しかし私はそれを1人のユーザーのために実装する必要があるだけです。
これは可能ですか?
これはauthenticate
フィルタにフックして、認証中に特定のユーザーのIPアドレスを検証する方法です。
ユーザーはここに示されているように無効なIPアドレスエラーを見ることができます:
/**
* Validate IP Address During Authentication - For A Given User
*/
add_filter( 'authenticate', function( $user )
{
// Adjust to your needs:
$allowed_user_ip = '127.0.0.1';
$ip_restricted_user_id = 1;
// Current user's IP address
$current_user_ip = isset( $_SERVER['REMOTE_ADDR'] ) ? $_SERVER['REMOTE_ADDR'] : null;
// Nothing to do for valid IP address
if( $current_user_ip === $allowed_user_ip )
return $user;
// Nothing to do for users that are not IP restricted
if(
$user instanceof \WP_User
&& $user->ID > 0
&& $ip_restricted_user_id != $user->ID
)
return $user;
// Add an 'Invalid IP address' error
if( is_wp_error( $user ) )
$user->add(
'invalid_ip',
sprintf(
'<strong>%s</strong>: %s',
esc_html__( 'ERROR', 'mydomain' ),
esc_html__( 'IP address is invalid.', 'mydomain' )
)
);
// Create a new 'Invalid IP address' error
else
$user = new WP_Error(
'invalid_ip',
sprintf(
'<strong>%s</strong>: %s',
esc_html__( 'ERROR', 'mydomain' ),
esc_html__( 'IP address is invalid.', 'mydomain' )
)
);
return $user;
}, 100 );
ここでは、これらのデフォルトのコールバックのために優先順位100を使います。
add_filter( 'authenticate', 'wp_authenticate_username_password', 20, 3 );
add_filter( 'authenticate', 'wp_authenticate_email_password', 20, 3 );
add_filter( 'authenticate', 'wp_authenticate_spam_check', 99 );
これを拡張して、ユーザーのグループまたは特定のユーザーロールを処理することが可能です。