<?php if ( !defined( 'ABSPATH' ) ) exit;//PHPの宣言と直接アクセスの拒否
/*
function haup_restrict_admin_by_ip_by_settings() {
	if ( is_admin() && ! ( defined( 'DOING_AJAX' ) && DOING_AJAX ) ) {
        
		// オプション名や取得方法は、現在の環境（配列形式）に合わせて調整してください
		$options = get_option( 'hautility-option-01-security' );
		$ip_string = $options['setting-restrict-access-ip'] ?? '';
        
		// 空の場合は制限をかけずに終了する
		if ( empty( trim( $ip_string ) ) ) {
			return;
		}

		$allowed_ips = array_map( 'trim', explode( ',', $ip_string ) );
		$current_ip = $_SERVER['REMOTE_ADDR'];

		$message = __('You do not have permission to open the admin panel','hima-art-utility');
		if ( ! in_array( $current_ip, $allowed_ips ) ) {
			wp_die( esc_html( $message ), '403 Forbidden', array( 'response' => 403 ) );
		}
	}
}
//20260217 下のログイン画面と両方制御するコードにしたのでこの関数は実行しないよう変更
//add_action( 'init', 'haup_restrict_admin_by_ip_by_settings' );
*/

/**
 * 管理画面およびログイン画面へのアクセスをIPで制限
 */
function haup_restrict_admin_and_login_by_ip() {
	// 1. 判定条件の拡張
	// 「管理画面（AJAX除く）」または「ログイン画面」であるかチェック
	$is_login_page = ( $GLOBALS['pagenow'] === 'wp-login.php' );
	$is_admin_page = is_admin() && ! ( defined( 'DOING_AJAX' ) && DOING_AJAX );

	if ( $is_admin_page || $is_login_page ) {
        
		$set_name = 'hautility-option-01-security';
		$options = get_option( $set_name );
		$ip_string = $options['setting-restrict-access-ip'] ?? '';
		$redirect_pattern = $options['ip-vanned-redirect-page'] ?? '';
        
		// 設定が空なら制限しない（セーフティ）
		if ( empty( trim( $ip_string ) ) ) {
			return;
		}

		$allowed_ips = array_map( 'trim', explode( ',', $ip_string ) );
		$current_ip = $_SERVER['REMOTE_ADDR'];

		if ( ! in_array( $current_ip, $allowed_ips ) ) {
			$message = __('You do not have permission to open the admin panel','hima-art-utility');

			switch ( $redirect_pattern ) {
				case '2': // Plain 404
					status_header( 404 );
					echo '<!DOCTYPE html><html><head><title>404 Not Found</title></head><body><h1>Not Found</h1><p>The requested URL was not found on this server.</p></body></html>';
					exit;

				case '3': // Site 404 Page
					global $wp_query;
					$wp_query->set_404();
					status_header( 404 );
					get_template_part( '404' ); 
					exit;

				case '4': // Home Redirect
					wp_safe_redirect( home_url(), 302 );
					exit;

				case '1':
				default: // 403 Forbidden
					wp_die( esc_html($message), '403 Forbidden', array( 'response' => 403 ) );
					break;
			}
		}
	}
}
// initフックは両方で動くが、より確実にログイン画面を捕まえるためにlogin_initも追加
add_action( 'init', 'haup_restrict_admin_and_login_by_ip' );
add_action( 'login_init', 'haup_restrict_admin_and_login_by_ip' );