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 검색에서 뷰어스 기사를 더 자주 볼 수 있습니다.

제주 3박 4일 여행 중 2일차에 이용하게 된 제주 서귀포 호텔 나인부띠끄 호텔의 분위기와 청결함이 마음에 들고 무엇보다 호텔 조식과 제주 가성비 호텔이란 점에서 매우 만족스러웠기에 간략히 소개하려 한다.

제주나인부띠끄호텔입구

제주특별자치도 서귀포시 서귀동

제주 서귀포 호텔 나인부띠끄 영상 1분 43초.

저녁 식사까지 마치고 찾아온 제주 가성비 호텔 나인부띠끄.

후면으로 주차장이 있고 측면으로도 2대의 차량을 주차할 수 있다. 차량이 많지 않거나 일찍 체크인을 하게 되면 이곳에 주차하는 것이 더 편할 것도 같다.

제주 가성비 호텔 나인부띠끄 1층은 카페로 운영되고 있다.

입구로 들어서면 바로 오른쪽이 프런트이고 그 안쪽은 카페로 운영되므로 카페와 프런트가 동일 공간이라 생각하면 맞겠다.

카페만으로도 분위기가 정말 마음에 드는 곳인데 이곳에서 나인부띠끄 호텔 조식을 먹게 된다니 기대가 된다.

훔… 이 자리에서 커피 마시며 음악 듣다 잠깐씩 졸아보면 어떨까? 어쩐지 이 자리를 그래야만 할 것 같은 편안함이 느껴진다. 이런 부위기를 누가 제주 가성비 호텔이라 말할 수 있을까? 아직 객실로 들어본 것이 아님에도 정말 마음에 드는 곳이다.

부분적으로 6명~10명 정도의 회의도 가능할 공간이 따로 구성되어 있다는 점도 매력적이고 테이블과 의자가 동일하지 않아 다양성이 있는 분위기 좋은 카페라 하겠다.

하지만 과거와 달리 요즘은 제주도 여행객이 줄어든 것을 이곳 카페에서조차 느끼게 된다.

제주도 여행을 하다 보면 과거와 달리 비싸다는 생각이 들지 않는 건 과거 비쌌던 제주 물가가 몇 년째 고정되어 있고 타 지역의 물가는 꾸준히 오른 탓이라 생각된다. 일부 물의를 일으키는 식당, 카페, 숙박업소 등이 있지만 대부분의 제주도 식당, 카페, 호텔 등은 과거와 비교해 서비스 마인드가 달라졌고 친절해졌음을 알 수 있다.

제주 서귀포 호텔 중 하나인 나인부띠끄 호텔 1층의 카페 분위기도 좋지만 2024.05.26일 기준 네이버 예약을 확인해 보니 투숙료도 매우 저렴해 마음에 드는 제주 가성비 호텔이다.

제주 가성비 호텔 나인부띠끄 예약 Tip

대부분의 호텔이 그러하듯 이곳도 홈페이지에는 정가만 표시되어 있고 할인가가 표시되어 있지 않다. 하지만 네이버 예약을 이용하면 훨씬 저렴하게 이용이 가능하다. 검색은 [제주 나인 부띠끄 호텔] 또는 [제주 나인 부띠끄]로 검색하면 되며 당연히 주말과 공휴일 그리고 성수기에는 가격이 높아진다.

제주 서귀포 호텔 나인부띠끄는 100m 거리에 제주 올레길 6코스가 지나고 있고, 서귀포 여행지인 이중섭 거리, 이중섭 미술관 등이 400m, 자구리공원 500m, 서귀포 칠십리 공원 700m, 천지연 폭포 1km, 새연교 1km, 새섬 1.1km 등으로 도보 이동이 가능한 거리에 가볼 만한 곳이 많다. 이 외에 2km 이내에 위치한 황우지 해안, 외돌개 등의 여행지도 가볼 만하다.

객실 화장실 이용 순서를 기다리기가 어렵다면 1층으로 내려와 이곳 화장실을 이용해도 좋을 듯.

제주 서귀포 호텔 객실 입구.

정확히는 모르겠지만 퀸 사이즈로 짐작되는 침대 2개가 놓인 이 객실은 스탠더드 룸이며 트윈 베드로 구성된다.

옷 걸이, 치약 칫솔, 포트, 차, 컵, TV, 냉장고, 테이블, 의자 등이 잘 갖춰져 있으며 사용감이 있는 것으로 보아 이곳 제주 서귀포 호텔이 오픈한 지는 꽤 된 듯하다. 하지만 전체적인 분위기가 깔끔해 딱히 인상 찌푸릴 곳이 없다.

냉장고에 들어 있는 생수 2병이 조금 썰렁하다.

무언가 먹을 거라도 사도 놓을까 생각해 봤지만 저녁 식사도 했고 호텔 조식도 나오는 마당에 굳이 주전부리를 사다 넣을 필요성을 느끼지 못했고 술을 잘 마시는 것도 아니니 맥주나 기타 음료도 패스.

비데가 있는 화장실, 깔끔하게 정리되어 있는 샤워실과 세면대 등 세월의 흔적인 사용감은 보이지만 지저분한 곳 없이 깔끔하게 청소되어 있다.

제주 서귀포 호텔 나인부띠끄에서 바라보는 전경.

바로 앞은 일방통행로이고 조금 더 멀리 시선을 두면 천지연 폭포 방향 그리고 더 멀리로는 바다가 위치하게 된다.

객실에서 맞이하는 다음 날 아침 풍경.

나인부띠끄 제주 서귀포 호텔의 분위기는 딱 마음에 들었고 이제 호텔 조식이 어떠할지 내려가 봐야겠다.

어젯밤 체크인을 하며 둘러봤을 때의 분위기와 다른 1층 카페.

어젯밤은 매우 차분한 분위기의 카페였는데 오늘은 차분함에 활기 참이 더해진 느낌이다. 아마도 아침이기 때문일지도 모를 일이고 음악이 바뀐 탓일지도 모르겠다.

호텔 조식과 함께 선택할 수 있는 음료는 오렌지주스와 우유 그리고 커피이며 쿠니는 언제나처럼 우유로 식사를 하고 이어 마시게 될 커피도 한 잔 미리 가져다 둔다.

내 앞에 놓인 호텔 조식. 이 정도면 배부를 정도는 아니지만 허기질 일도 없을 정도라 하겠다.

모두 동일한 제주 서귀포 호텔 조식을 펼쳐 놓고 하하 호호 즐거움을 나눈다.

햇살이 드는 카페 1층의 구석이 무척이나 화사하게 보인다.

호텔 조식과 함께하는 이 시간이 즐겁고 제주 가성비 호텔 선택의 탁월함에 어깨가 우쭐하다.

여러부운~

맛난 제주 서귀포 호텔 조식으로 활기찬 아침을 시작해요!

author-img
쿠니의 아웃도어 라이프
content@viewus.co.kr

댓글0

300

댓글0

[AI 추천] 랭킹 뉴스

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

당신을 위한 인기글

  • 유럽의 유명 축구 구단들을 쇼핑하듯 사고있는 한국인 억만장자 여성
    유럽의 유명 축구 구단들을 쇼핑하듯 사고있는 한국인 억만장자 여성
  • 아나운서 이혜성 “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년만에 엄마된 근황 깜짝 발표…’축하 물결’
  • 직함도 월급도 아니었다, 반값 급여에도 다시 출근하는 이유
    직함도 월급도 아니었다, 반값 급여에도 다시 출근하는 이유

공유하기