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/)

흡연은 건강과 완전한 대척점에 있다. 담배는 백해무익이라는 말도 이미 널리 알려져 있다. 심지어 담배를 피우는 당사자들도 담배가 해롭다는 걸 안다. 그렇지만 끊지 못한다. 아니, 알면서도 끊지 않는 사람도 있다.

스스로 흡연을 선택한 사람들에게까지 간섭할 수는 없다. 문제는 금연을 원하면서도 쉽사리 끊지 못하는 사람들이다. 금연에 도움이 된다는 것이라면 뭐든 시도해보지만, 별 효과를 보지 못하는 사람. 혹은 일시적으로 효과를 봤다가도 시간이 지나면 다시 피우게 되는 사람들이 이에 해당한다.

‘금연에 도움이 된다’라는 관점으로 접근한 또 한 가지의 사례를 소개한다. 미국 건강전문 미디어 ‘헬스라인’에 보도된 ‘바나나’에 관한 내용 일부를 인용했다.

바나나가 금연에 도움이 된다?

2020년 진행된 한 연구에서는 정신건강 문제를 겪고 있는 흡연자들이 담배를 끊기 위해 도움을 받을 수 있는 방법들을 탐구한 바 있다. 껌을 씹는 등의 구강 자극 방법을 포함해, 여러 가지 방법을 시도했다. 이 연구는 바나나를 섭취함으로써 흡연 욕구를 줄일 수 있었다는 결과를 내놓은 바 있다.

흡연이라는 행위는 본래 스트레스 해소를 위해 선택하는 기호 행동이다. 흡연을 통해 도파민이 분비되도록 유도하면서 기분전환 효과를 얻는 것이다. 바꿔 말하면, 흡연을 통해 스트레스를 해소하던 사람은 금연을 시도함으로써 스트레스나 불안감을 느낄 가능성이 높다는 것이다.

바나나에는 필수 아미노산의 일종인 트립토판이 포함돼 있다. 이는 기분을 좋게 만들고 스트레스를 줄이는 신경전달물질 세로토닌의 생성을 촉진한다. 흡연으로 인한 스트레스 해소 효과를 대체할 수 있다는 것이다. 

또한, 바나나에는 자연적인 당분이 포함돼 있어, 뇌가 필요로 하는 에너지를 빠르게 공급할 수 있다. 이밖에 비타민 B6와 마그네슘, 섬유질 등 영양가도 풍부하다. 즉, 바나나를 먹는 것은 ‘손으로 할 수 있는’ 대체 활동도 함께 제공하는 셈이다.

‘구강 자극’이 금연의 핵심

엄밀히 말하면, 바나나를 섭취하는 것이 근본적인 금연 방법이 될 수 있다는 내용의 연구는 없다. 바나나가 니코틴 등 담배에 포함된 유해성분에 특별히 효과적으로 작용하는 것도 아니다. 다만, 바나나를 먹는 행위와 영양소의 생화학적 작용으로 인해 금연에 도움이 될 수 있다는 내용이다.

바꿔 말하면, ‘구강 자극’이라는 물리적 요소와 ‘스트레스 완화’라는 심리적 요소가 갖춰지면 무엇이든 금연에 도움이 될 수 있다는 것이다. 한때 금연을 위해 담배 대신 막대사탕을 소비하는 것이 트렌드처럼 여겨지기도 했는데, 이 또한 구강 자극과 단맛을 통한 즉각적인 스트레스 해소에 초점을 맞춘 방법이라 할 수 있다.

막대사탕은 칼로리와 혈당 상승 면에서 바람직한 선택이라 할 수 없으므로 적절한 대안이 필요하다. 낱개로 구성된 다크 초콜릿을 휴대하며 흡연 욕구가 생길 때 한 개씩 먹는 것을 고려해볼 만하다. 높은 카카오 함량으로 약간의 당분과 함께 항산화 효과를 얻을 수 있는 대안이다. 낱개 단위로 휴대할 수 있는 간식으로는 견과류도 괜찮은 선택일 수 있다.

흡연으로 발생하는 ‘영양 손실’에 주목

균형 잡힌 음식 섭취를 하고 있는 있다고 해보자. 만약 이 사람이 흡연을 한다면 건강한 식단을 유지하고 있음에도 영양소 면에서 어떤 문제가 있을 거라 예상해볼 수 있을 것이다.

대표적으로 흡연은 비타민 C의 필요량을 증가시킨다. 담배 연기 속 유해한 성분이 활성산소를 만들어내기 때문에, 체내 비타민 C의 소모량을 늘리기 때문이다. 비타민 C는 수용성으로 체내 축적이 되지 않으므로 그만큼 충분한 섭취가 필요하며, 부족할 경우 면역력 저하 및 노화를 촉진할 수 있다.

마찬가지로 항산화 측면에서 비타민 E도 더 많이 소모된다. 비타민 E가 부족하면 세포 손상이나 심혈관 질환 위험이 증가한다. 그나마 비타민 E는 지용성이기 때문에 평소 섭취량이 충분한 편이라면 비타민 C에 비해 부족할 가능성은 상대적으로 낮다.

흡연은 신체 에너지 대사 및 신경계 작용에 관여하는 비타민 B군에도 영향을 미친다. 비타민 B군의 흡수와 대사에 영향을 주기 때문에 세포 성장 저해, 빈혈 유발, 신경계 기능 저하로 인한 피로감이나 우울감 등의 증상을 유발할 수 있다.

칼슘이나 마그네슘 등 무기질의 흡수 효율을 떨어뜨리고 배출을 늘려 결핍 상태를 유발할 수 있다. 이를 통해 뼈 건강에 악영향을 미칠 수 있다.

바나나가 유력 후보인 이유

많고 많은 음식 중 왜 하필 바나나였을까? 금연과의 상관관계에 대한 연구에는 다양한 음식들이 동원됐을 거라 예상하지만, 그 중에서 바나나에 대한 결과만 다뤄진 데는 나름의 이유가 있을 것이다.

앞서 흡연으로 인해 손실되거나 부정적인 영향을 받는 영양소들의 면면을 살펴보자. 바나나가 전부는 아니어도 상당 부분을 충당할 수 있다는 것을 알 수 있다. 손에 들고 한 입씩 깔끔하게 베어먹을 수 있다는 점에서 형태적 유사성도 있다. 바나나로 충족할 수 없는 다른 부분을 곁들인다면 분명 도움이 될 거라는 건 나름 합리적인 의견이다.

다만, 간식에 의존도가 높은 금연 방법은 결국 ‘칼로리 섭취량 증가’라는 부작용이 따른다. 금연을 목표로 하고 있다면, 한 가지 방법에만 집중하기보다 여러 가지 방법을 함께 적용하는 편이 보다 확실한 효과를 보장할 것이다. 이를테면 껌 씹기, 수분 섭취, 운동, 항산화 성분 섭취 같은 것들 말이다.

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년만에 엄마된 근황 깜짝 발표…’축하 물결’
  • 직함도 월급도 아니었다, 반값 급여에도 다시 출근하는 이유
    직함도 월급도 아니었다, 반값 급여에도 다시 출근하는 이유

공유하기