FILE: /var/www/html/wp-includes/build/pages/options-connectors/page-wp-admin.php
SIZE: 10290 bytes
MODIFIED: 2026-08-26 05:34:27

CONTENT:
<?php
/**
 * Page: options-connectors (wp-admin integrated)
 * Auto-generated by build process.
 * Do not edit this file manually.
 *
 * This version integrates with the standard WordPress admin interface,
 * keeping the wp-admin sidebar and scripts/styles intact.
 *
 * @package wp
 */

// Global storage for options-connectors routes and menu items
global $wp_options_connectors_wp_admin_routes, $wp_options_connectors_wp_admin_menu_items;
$wp_options_connectors_wp_admin_routes     = array();
$wp_options_connectors_wp_admin_menu_items = array();

/**
 * Register a route for the options-connectors-wp-admin page.
 *
 * @param string      $path           Route path (e.g., '/types/$type/edit/$id').
 * @param string|null $content_module Script module ID for content (stage/inspector).
 * @param string|null $route_module   Script module ID for route lifecycle hooks.
 */
function wp_register_options_connectors_wp_admin_route( $path, $content_module = null, $route_module = null ) {
	global $wp_options_connectors_wp_admin_routes;

	$route = array( 'path' => $path );
	if ( ! empty( $content_module ) ) {
		$route['content_module'] = $content_module;
	}
	if ( ! empty( $route_module ) ) {
		$route['route_module'] = $route_module;
	}

	$wp_options_connectors_wp_admin_routes[] = $route;
}

/**
 * Register a menu item for the options-connectors-wp-admin page.
 * Note: Menu items are registered but not displayed in single-page mode.
 *
 * @param string $id        Menu item ID.
 * @param string $label     Display label.
 * @param string $to        Route path to navigate to.
 * @param string $parent_id Optional. Parent menu item ID.
 */
function wp_register_options_connectors_wp_admin_menu_item( $id, $label, $to, $parent_id = '' ) {
	global $wp_options_connectors_wp_admin_menu_items;

	$menu_item = array(
		'id'    => $id,
		'label' => $label,
		'to'    => $to,
	);

	if ( ! empty( $parent_id ) ) {
		$menu_item['parent'] = $parent_id;
	}

	$wp_options_connectors_wp_admin_menu_items[] = $menu_item;
}

/**
 * Get all registered routes for the options-connectors-wp-admin page.
 *
 * @return array Array of route objects.
 */
function wp_get_options_connectors_wp_admin_routes() {
	global $wp_options_connectors_wp_admin_routes;
	return $wp_options_connectors_wp_admin_routes ?? array();
}

/**
 * Get all registered menu items for the options-connectors-wp-admin page.
 *
 * @return array Array of menu item objects.
 */
function wp_get_options_connectors_wp_admin_menu_items() {
	global $wp_options_connectors_wp_admin_menu_items;
	return $wp_options_connectors_wp_admin_menu_items ?? array();
}

/**
 * Preload REST API data for the options-connectors-wp-admin page.
 * Automatically called during page rendering.
 */
function wp_options_connectors_wp_admin_preload_data() {
	// Define paths to preload - same for all pages
	// This must exactly match the _fields list in packages/core-data/src/entities.js,
	// same fields in the same order, or the preload is never consumed.
	$preload_paths = array(
		'/?_fields=description,gmt_offset,home,image_max_bit_depth,image_sizes,image_size_threshold,image_strip_meta,name,site_icon,site_icon_url,site_logo,timezone_string,url,page_for_posts,page_on_front,show_on_front',
		array( '/wp/v2/settings', 'OPTIONS' ),
	);

	// Use rest_preload_api_request to gather the preloaded data
	$preload_data = array_reduce(
		$preload_paths,
		'rest_preload_api_request',
		array()
	);

	// Register the preloading middleware with wp-api-fetch
	wp_add_inline_script(
		'wp-api-fetch',
		sprintf(
			'wp.apiFetch.use( wp.apiFetch.createPreloadingMiddleware( %s ) );',
			wp_json_encode( $preload_data )
		),
		'after'
	);
}

/**
 * Enqueue scripts and styles for the options-connectors-wp-admin page.
 * Hooked to admin_enqueue_scripts.
 *
 * @param string $hook_suffix The current admin page.
 */
function wp_options_connectors_wp_admin_enqueue_scripts( $hook_suffix ) {
	// Check all possible ways this page can be accessed:
	// 1. Menu page via admin.php?page=options-connectors-wp-admin (plugin)
	// 2. Direct file via options-connectors.php (Core) - screen ID will be 'options-connectors'
	$current_screen = get_current_screen();
	$is_our_page = (
		( isset( $_GET['page'] ) && 'options-connectors-wp-admin' === $_GET['page'] ) || // phpcs:ignore WordPress.Security.NonceVerification.Recommended
		( $current_screen && 'options-connectors' === $current_screen->id )
	);

	if ( ! $is_our_page ) {
		return;
	}

	// Load build constants
	$build_constants = require __DIR__ . '/../../constants.php';

	/**
	 * Fires when the options-connectors admin page is initialized so extensions can register routes and menu items.
	 */
	do_action( 'options-connectors-wp-admin_init' );

	// Preload REST API data
	wp_options_connectors_wp_admin_preload_data();

	// Get all registered routes
	$routes = wp_get_options_connectors_wp_admin_routes();

	// Get boot module asset file for dependencies
	$asset_file = ABSPATH . WPINC . '/js/dist/script-modules/boot/index.min.asset.php';
	if ( file_exists( $asset_file ) ) {
		$asset = require $asset_file;

		// This script serves two purposes:
		// 1. It ensures all the globals that are made available to the modules are loaded.
		// 2. It initializes the boot module as an inline script.
		wp_register_script( 'options-connectors-wp-admin-prerequisites', '', $asset['dependencies'], $asset['version'], true );

		$init_modules = [];

		/*
		 * Add inline script to initialize the app using initSinglePage (no menuItems).
		 * The dynamic import is deferred until DOMContentLoaded so that all classic
		 * script dependencies of @wordpress/boot (wp-private-apis, wp-components,
		 * wp-theme, etc.) have finished parsing and executing before the boot module
		 * evaluates. Otherwise, a modulepreloaded @wordpress/boot can win the race
		 * against the classic-script-printing pass on fast CDN-fronted hosts in
		 * Chrome, evaluating before wp.theme.privateApis is defined and throwing
		 * "Cannot unlock an undefined object". See <https://core.trac.wordpress.org/ticket/65103>.
		 */
		$init_js_function = <<<'JS'
		( mountId, routes, initModules ) => {
			const run = async () => {
				const mod = await import( "@wordpress/boot" );
				mod.initSinglePage( { mountId, routes, initModules } );
			};
			if ( document.readyState === "loading" ) {
				document.addEventListener( "DOMContentLoaded", run );
			} else {
				run();
			}
		}
		JS;
		wp_add_inline_script(
			'options-connectors-wp-admin-prerequisites',
			sprintf(
				'( %s )( %s, %s, %s );',
				$init_js_function,
				wp_json_encode( 'options-connectors-wp-admin-app', JSON_HEX_TAG | JSON_UNESCAPED_SLASHES ),
				wp_json_encode( $routes, JSON_HEX_TAG | JSON_UNESCAPED_SLASHES ),
				wp_json_encode( $init_modules, JSON_HEX_TAG | JSON_UNESCAPED_SLASHES )
			)
		);

		// Register prerequisites style by filtering script dependencies to find registered styles
		$style_dependencies = array_filter(
			$asset['dependencies'],
			function ( $handle ) {
				return wp_style_is( $handle, 'registered' );
			}
		);
		wp_register_style( 'options-connectors-wp-admin-prerequisites', false, $style_dependencies, $asset['version'] );

		// Build dependencies for options-connectors-wp-admin module
		$boot_dependencies = array(
			array(
				'import' => 'static',
				'id'     => '@wordpress/boot',
			),
		);

		// Add init modules as static dependencies
			// No init modules configured

		// Add all registered routes as dependencies
		foreach ( $routes as $route ) {
			if ( isset( $route['route_module'] ) ) {
				$boot_dependencies[] = array(
					'import' => 'static',
					'id'     => $route['route_module'],
				);
			}
			if ( isset( $route['content_module'] ) ) {
				$boot_dependencies[] = array(
					'import' => 'dynamic',
					'id'     => $route['content_module'],
				);
			}
		}

		/**
		 * Filters the boot script-module dependencies for the
		 * options-connectors-wp-admin page.
		 *
		 * Surfaces extending this page can append entries to the boot
		 * dependency list. Each entry is an array with 'import' (string
		 * 'static' or 'dynamic') and 'id' (script-module handle) keys.
		 *
		 * @param array $boot_dependencies Boot dependencies for the page.
		 */
		$boot_dependencies = apply_filters(
			'options-connectors-wp-admin_boot_dependencies',
			$boot_dependencies
		);

		// Dummy script module to ensure dependencies are loaded
		wp_register_script_module(
			'options-connectors-wp-admin',
			$build_constants['build_url'] . 'pages/options-connectors/loader.js',
			$boot_dependencies
		);

		// Enqueue the boot scripts and styles
		wp_enqueue_script( 'options-connectors-wp-admin-prerequisites' );
		wp_enqueue_script_module( 'options-connectors-wp-admin' );
		wp_enqueue_style( 'options-connectors-wp-admin-prerequisites' );
	}
}

/**
 * Render the options-connectors-wp-admin page.
 * Call this function from add_menu_page or add_submenu_page.
 * This renders within the normal WordPress admin interface.
 */
function wp_options_connectors_wp_admin_render_page() {
	?>
	<style>
		/* Critical styles to prevent layout shifts - inlined for immediate application */

		#wpwrap {
			overflow-y: auto;
		}
		body.js {
			background: #fff;
		}

		/* Reset wp-admin padding */
		body.js #wpcontent {
			padding-inline-start: 0;
		}
		body.js #wpbody-content {
			padding-bottom: 0;
		}

		/* Hide legacy admin elements */
		body.js #wpbody-content > div:not(.boot-layout-container):not(#screen-meta) {
			display: none;
		}
		body.js #wpfooter {
			display: none;
		}

		/* Accessibility regions */
		.a11y-speak-region {
			inset-inline-start: -1px;
			top: -1px;
		}

		/* Admin menu indicators */
		ul#adminmenu a.wp-has-current-submenu::after,
		ul#adminmenu > li.current > a.current::after {
			border-inline-end-color: #fff;
		}

		/* Media frame fix */
		.media-frame select.attachment-filters:last-of-type {
			width: auto;
			max-width: 100%;
		}

		/* Responsive overflow fix for #wpwrap */
		@media (min-width: 782px) {
			#wpwrap {
				overflow-y: initial;
			}
		}
	</style>
	<div id="options-connectors-wp-admin-app" class="boot-layout-container"></div>
	<?php
}

// Hook the enqueue function to admin_enqueue_scripts
add_action( 'admin_enqueue_scripts', 'wp_options_connectors_wp_admin_enqueue_scripts' );

갑자기 ‘쾅’ 하며 잠 깬다면? 폭발 머리 증후군 바로알기
주요 메뉴 바로가기 (상단) 본문 컨텐츠 바로가기 주요 메뉴 바로가기 (하단)

갑자기 ‘쾅’ 하며 잠 깬다면? 폭발 머리 증후군 바로알기

구글 검색 선호 출처로 추가

Google 검색에서 뷰어스 기사를 더 자주 볼 수 있습니다.

Designed by Freepik (https://www.freepik.com/)

Designed by Freepik (https://www.freepik.com/)

‘폭발 머리 증후군(Exploding Head Syndrome)’에 대해 들어본 적이 있는가? 경험해본 적 없는 사람이라면 ‘무시무시한 이름이다’라고 생각할 것이다. 하지만 이는 아직 뚜렷한 원인이 밝혀지지 않은 ‘수면장애’의 일종이다.

잠에 빠져들기 직전, 갑자기 머리에서 엄청나게 큰 소리가 들렸다고 느끼며 깨어날 때가 있다. 이 때문에 다소 과격하지만 ‘폭발 머리’ 또는 ‘머리 폭발’이라는 이름이 붙었다. 한 연구에 따르면 전 세계적으로 성인 10~20%가 살면서 한 번 이상 이 증상을 겪을 가능성이 있다고 한다. 지역, 인종 등을 가리지 않고 나타날 수 있는 공통의 문제다.

우리나라에서는 구체적인 연구나 통계가 존재하지 않다. 사실, 애당초 그리 잘 알려져 있지도 않으며, 만약 증상을 경험하더라도 단발성으로 나타나는 경우 문제를 인지하지 못할 수도 있다. 자고로 ‘유비무환’이라 했다. 폭발 머리 증후군에 대해 좀 더 알아보도록 한다.

수면 중 나타나는 비정상 패턴

‘파라솜니아(parasomnia)’라는 말이 있다. 아마 ‘불면증(insomnia)’이라는 뜻의 영어 단어를 아는 사람이라면 생소하긴 하지만 잠에 관련된 용어겠구나 하고 짐작할지도 모르겠다. 파라솜니아는 수면 중 발생하는 비정상적인 행동 또는 경험을 총칭하는 말이다.

널리 알려진 파라솜니아의 예로, 끔찍한 꿈을 꾸며 깨어나는 ‘악몽(Nightmare)’, 정신이 잠든 채로 몸이 움직이는 ‘몽유병(Sleepwalking)’ 등이 있다. 이밖에 잠들기 직전 또는 기상 직전 발생하는 일시적 마비 상태(수면 마비, Sleep Paralysis), 잠에 거의 빠져들 때쯤 갑작스럽게 발생하는 경련(하이프닉 저크, Hypnic Jerks) 등이 있다. 폭발 머리 증후군 역시 파라솜니아의 한 종류에 해당한다.

이들은 일반적으로 그 자체가 촌각을 다투는 건강 문제로 여겨지지는 않는다. 하지만 증상이 있는 것을 알게 되면 스트레스나 심리 불안의 원인이 될 수 있다. 무엇보다도, 수면의 질에 영향을 미치기 때문에 장기적으로는 건강 문제와 연결될 수도 있다.

19세기부터 발견, 데카르트도 겪은 적 있어

폭발 머리 증후군은 1876년부터 의료계에 알려져 있었다. 프랑스의 철학자이자 과학자인 르네 데카르트도 이 증상을 경험했다는 기록도 있다고 알려졌다. ‘나는 생각한다, 고로 나는 존재한다’라는 유명한 말을 남긴 바로 그 사람이다.

하지만 상당히 오래된 역사를 가지고 있는 증상임에도 불구하고, 폭발 머리 증후군은 여전히 특발성 증후군에 속한다. 보다 정확히는, 이 증상에 대한 정보 자체가 거의 없다고 해야 옳을 것이다.

가장 큰 문제는 얼마나 많은 사람들이 이 증상을 경험하고 있는지를 파악하기 어렵다는 것이다. 다만 몇 가지 연구를 통해 밝혀진 바에 따르면, 별다른 건강 문제가 없는 성인 중 약 10~11%가 폭발 머리 증후군을 경험한 적이 있는 것으로 나타났다.

가장 최근, 2019년에 수행된 연구에 따르면 18세부터 82세의 남녀 약 1,700명 중 29.59%가 한 번 이상 폭발 머리 증후군을 경험한 것으로 나타났다. 이들 중 약 3.9%에 해당하는 67명은 매달 같거나 비슷한 증상을 겪고 있다고 보고한 바 있다. 

한편, 이 연구팀이 약 200명의 여대생으로만 그룹을 편성해 수행한 연구에 따르면, 평생 유병률 37.19%, 매달 증상을 겪는 비율 6.54%로 나타났다. 연구팀은 이러한 결과를 종합해 ‘폭발 머리 증후군이 젊은 성인들에게서 발생할 가능성이 높으며, 여성에게서 좀 더 흔한 경향을 보인다’라는 결론을 내놓았다.

갑작스러운 큰 소리, 짧은 환각 동반하기도

증상을 겪은 사람들의 증언에 따르면, 머릿속에서 들리는 소리의 종류도 일관되지 않다. 폭발음, 총소리 등 전쟁터에서나 들을 수 있는 극단적인 소리부터, 누군가 비명을 내지르는 듯한 소리를 듣는 경우도 있다. 혹은 문이 갑작스레 쾅 닫히는 소리 등 비교적 일상적인 소리를 듣는 경우도 있다. 약 몇 초 정도로 짧지만 매우 큰 볼륨으로 들린다는 것이 공통점이다. 일상에서 발생할 수 있는 소리라 해도, 주변 환경에서 발생하는 것은 분명 아니다.

머리 폭발 증후군을 겪는 사람들은 시각 이상 또는 촉각 이상을 함께 겪기도 한다. 번쩍 하는 섬광을 보는 듯하다는 사람도 있고, 짧은 환각을 경험했다는 사례도 보고된다. 그런가 하면 어떤 사람은 몸이 갑작스럽게 매우 뜨겁다고 느끼거나 전기 충격이 가해진 듯한 느낌을 받는 경우도 있다.

폭발 머리 증후군, 추정 원인은?

특발성 증후군으로 원인이 명확히 밝혀지지는 않았지만, 그에 관한 몇 가지 이론은 존재한다. 가장 잘 알려진 것은 ‘잠에서 깨어나는 과정에서 발생하는 뇌의 자연스러운 활동’에 관한 이론이다.

우리 뇌에는 ‘망상체(reticular formation)’라 불리는 신경망이 있다. 뇌간에 위치한 복잡한 신경망으로, 뇌의 각성 상태를 유지하고 외부 자극에 대한 주의를 집중시키는 역할을 한다. 또한, 잠들고 깨어나는 패턴을 조절해, 렘 수면과 비렘 수면 주기 형성에도 기여한다.

가장 핵심적으로, 다양한 감각 정보를 필터링하고 처리하는 역할을 한다. 사람이 잠에 드는 과정에서는 망상체의 활동이 느려지게 되는데, 이때 시각이나 소리, 운동 기능을 조절하는 ‘감각 피질’이 서서히 비활성화된다. 

위와 같은 정상 과정의 어딘가에서 장애가 발생함으로써 나타나는 현상 중 하나가 폭발 머리 증후군이라는 추측이다. 즉, 외부 자극 없이 독립적인 중추신경 활동이 발생해, 감각 피질에 도달함으로써 출처가 명확하지 않은 큰 소음을 듣게 된다는 설명이다. 이는 추측에 불과한 이론이며, 신경계 분야 전문가들이 관련된 연구를 계속 진행 중이다. 

건강에 별다른 위협은 되지 않아

자극적이고 선정적인 명칭에도 불구하고, 폭발 머리 증후군은 건강에 별다른 위협이 되지는 않는 것으로 알려져 있다. 다만, 일반적으로 나타나는 두통 증상과 구분할 필요는 있다. 폭발 머리 증후군은 보통 수 초 단위의 짧은 시간 동안만 발생하며, 머리 부위에 통증은 없거나 매우 경미한 수준이다.

문제가 되는 부분은 ‘스트레스’다. 별다른 위협이 없다고 해도, 경험하는 사람 입장에서는 매우 놀랍고 두려운 느낌일 수밖에 없다. 정신적으로 뭔가 이상이 있는 게 아닌가 하는 불안감에 시달릴 수도 있다. 이 때문에 폭발 머리 증후군에 관한 연구는 주로 스트레스 및 수면에의 영향에 초점을 맞춰 진행되고 있다.

명확한 원인과 체계적 치료법이 정립되지 않은 현재로서는, ‘폭발 머리 증후군이 별다른 건강상 이상을 의미하지는 않는다’라는 점을 인지하는 것이 중요하다. 누적된 스트레스 또는 수면 관련 장애를 겪고 있다는 신호일 수 있으니, 이에 관련된 상담을 받아보거나 자신의 수면 습관을 돌아보고 개선하는 것에 초점을 맞춰볼 것을 권한다.

author-img
헬스라이프헤럴드
content@viewus.co.kr

댓글0

300

댓글0

[AI 추천] 랭킹 뉴스

  • ‘낙상 사고’ 허영만, 중환자실 이송…한 달째
  • 람보르기니 무르시엘라고 LP 670-4 SV 수동 경매 단 5대 경매 등장
  • 유럽의 유명 축구 구단들을 쇼핑하듯 사고있는 한국인 억만장자 여성
  • "동창회 나가지 마세요.." 55살 넘어 동창회 가면 안 되는 이유 3가지
  • "뒤통수 맞지 않으려면.." 60대 이후로 가져야할 마음가짐 3가지
  • "현관문 위쪽 나사를 돌려 보세요" 20년차 도어 기사의 '진짜 꿀팁'

당신을 위한 인기글

  • 유럽의 유명 축구 구단들을 쇼핑하듯 사고있는 한국인 억만장자 여성
    유럽의 유명 축구 구단들을 쇼핑하듯 사고있는 한국인 억만장자 여성
  • 아나운서 이혜성 “7년간 부모와도 대화 단절 상태”
    아나운서 이혜성 “7년간 부모와도 대화 단절 상태”
  • 최근 들어서 공유와 한효주가 나이들어 보이는 진짜 이유
    최근 들어서 공유와 한효주가 나이들어 보이는 진짜 이유
  • 14살에 키 172cm, 48kg으로 연예인 엄마 따라잡은 딸의 놀라운 근황
    14살에 키 172cm, 48kg으로 연예인 엄마 따라잡은 딸의 놀라운 근황
  • 전국민이 제발 결혼하라 응원했떤…세기의 커플의 최후
    전국민이 제발 결혼하라 응원했떤…세기의 커플의 최후
  • 노소영, 최태원과 이혼확정 후 집 떠나며 올린 사진 한장…모두 오열
    노소영, 최태원과 이혼확정 후 집 떠나며 올린 사진 한장…모두 오열
  • ‘KTX 논란’ 박위, 더 큰 일 발생…변호사 “법적으로 처벌될 수 있는 상황”
    ‘KTX 논란’ 박위, 더 큰 일 발생…변호사 “법적으로 처벌될 수 있는 상황”
  • 이병철 회장이 경고한 ‘약속 미루는 사람’ 4가지 특징
    이병철 회장이 경고한 ‘약속 미루는 사람’ 4가지 특징
  • 구혜선, 이혼 6년만에 엄마된 근황 깜짝 발표…’축하 물결’
    구혜선, 이혼 6년만에 엄마된 근황 깜짝 발표…’축하 물결’
  • 직함도 월급도 아니었다, 반값 급여에도 다시 출근하는 이유
    직함도 월급도 아니었다, 반값 급여에도 다시 출근하는 이유

당신을 위한 인기글

  • 유럽의 유명 축구 구단들을 쇼핑하듯 사고있는 한국인 억만장자 여성
    유럽의 유명 축구 구단들을 쇼핑하듯 사고있는 한국인 억만장자 여성
  • 아나운서 이혜성 “7년간 부모와도 대화 단절 상태”
    아나운서 이혜성 “7년간 부모와도 대화 단절 상태”
  • 최근 들어서 공유와 한효주가 나이들어 보이는 진짜 이유
    최근 들어서 공유와 한효주가 나이들어 보이는 진짜 이유
  • 14살에 키 172cm, 48kg으로 연예인 엄마 따라잡은 딸의 놀라운 근황
    14살에 키 172cm, 48kg으로 연예인 엄마 따라잡은 딸의 놀라운 근황
  • 전국민이 제발 결혼하라 응원했떤…세기의 커플의 최후
    전국민이 제발 결혼하라 응원했떤…세기의 커플의 최후
  • 노소영, 최태원과 이혼확정 후 집 떠나며 올린 사진 한장…모두 오열
    노소영, 최태원과 이혼확정 후 집 떠나며 올린 사진 한장…모두 오열
  • ‘KTX 논란’ 박위, 더 큰 일 발생…변호사 “법적으로 처벌될 수 있는 상황”
    ‘KTX 논란’ 박위, 더 큰 일 발생…변호사 “법적으로 처벌될 수 있는 상황”
  • 이병철 회장이 경고한 ‘약속 미루는 사람’ 4가지 특징
    이병철 회장이 경고한 ‘약속 미루는 사람’ 4가지 특징
  • 구혜선, 이혼 6년만에 엄마된 근황 깜짝 발표…’축하 물결’
    구혜선, 이혼 6년만에 엄마된 근황 깜짝 발표…’축하 물결’
  • 직함도 월급도 아니었다, 반값 급여에도 다시 출근하는 이유
    직함도 월급도 아니었다, 반값 급여에도 다시 출근하는 이유

공유하기