<?php /** * Plugin Name: Galvox SEO Hardening * Description: Comprehensive SEO fix for galvoxstar.com — H1 protection, button color fix, image lazy+CLS, redirect rules, sitemap discipline * Version: 3.0 * Author: Galvox SEO Audit (Hermes) * * Deploy: Drop into /wp-content/mu-plugins/ via Hostinger hPanel File Manager. * mu-plugins auto-load, no activation needed. * * What it does (v3.0): * 1. H1 protection — auto-prepends H1 from page title if content has 0 H1 * 2. H1 deduplication — removes extra H1s if both template AND body have H1 * 3. Button color enforcement — forces #FF6210 orange !important on .has-vivid-red * 4. 301 redirects — 12 phantom URLs → logical targets * 5. Schema overrides — clears duplicate JSON-LD / og:description conflicts * 6. Sitemap enforcement — only sitemap_index.xml in robots.txt * 7. Image alt defaults — falls back to post title if alt is empty * 8. Image lazy auto-injection — adds loading="lazy" + decoding="async" to imgs without it * 9. Image CLS fix — adds width/height from data attributes (WordPress 5.5+ compat) * 10. Noindex on redirect pages — meta refresh pages get noindex,nofollow * 11. Admin bar cleanup — hides WP admin bar for non-admin users * 12. OG:Image default — sets a default og:image when missing */ if ( ! defined( 'ABSPATH' ) ) { exit; } /* ============================================================ * 1. H1 PROTECTION * Prepend H1 from page title if content has no H1. * Strip duplicate H1 from content if template adds one. * ============================================================ */ add_action( 'template_redirect', 'galvox_h1_audit', 1 ); function galvox_h1_audit() { if ( is_admin() || is_feed() || is_robots() ) { return; } if ( ! is_singular( array('page', 'post') ) ) { return; } add_action( 'wp_head', 'galvox_h1_inject', 99 ); } function galvox_h1_inject() { if ( ! is_singular( array('page', 'post') ) ) { return; } global $post; if ( ! $post ) { return; } $title = get_the_title( $post ); $title_clean = wp_strip_all_tags( $title ); $content = $post->post_content; // Count H1s in content preg_match_all( '/<h1[^>]*>.*?<\/h1>/is', $content, $content_h1s ); $content_h1_count = count( $content_h1s[0] ); // If 0 H1s, output a hidden H1 for SEO if ( $content_h1_count === 0 ) { echo '<h1 class="galvox-hidden-h1" style="position:absolute;left:-9999px;top:auto;width:1px;height:1px;overflow:hidden;">' . esc_html( $title_clean ) . '</h1>' . "\n"; } } /* ============================================================ * 2. H1 DEDUPLICATION (JS-based, runs in footer) * If page has 2+ visible H1s, hide all but the first. * ============================================================ */ add_action( 'wp_footer', 'galvox_h1_dedup_js' ); function galvox_h1_dedup_js() { if ( ! is_singular( array('page', 'post') ) ) { return; } ?> <script> (function(){ var h1s = document.querySelectorAll('h1'); var visible = []; h1s.forEach(function(h){ var s = getComputedStyle(h); if (s.display !== 'none' && s.visibility !== 'hidden' && s.position !== 'absolute' && h.offsetWidth > 0) { visible.push(h); } }); if (visible.length > 1) { for (var i = 1; i < visible.length; i++) { visible[i].setAttribute('data-galvox-original-tag', 'h1'); var h2 = document.createElement('h2'); h2.innerHTML = visible[i].innerHTML; h2.className = visible[i].className; h2.style.cssText = visible[i].style.cssText; visible[i].parentNode.replaceChild(h2, visible[i]); } } })(); </script> <?php } /* ============================================================ * 3. BUTTON COLOR ENFORCEMENT (JS-based) * Forces #FF6210 orange !important on any .has-vivid-red-background-color button * ============================================================ */ add_action( 'wp_footer', 'galvox_button_color_fix' ); function galvox_button_color_fix() { if ( ! is_singular( array('page', 'post') ) ) { return; } ?> <script> (function(){ document.querySelectorAll('.has-vivid-red-background-color, a.wp-block-button__link[style*="background"]').forEach(function(btn){ var s = getComputedStyle(btn); if (s.backgroundColor === 'rgb(207, 46, 46)') { btn.style.setProperty('background-color', '#FF6210', 'important'); } }); })(); </script> <?php } /* ============================================================ * 4. 301 REDIRECTS — phantom URLs → logical targets * ============================================================ */ add_action( 'template_redirect', 'galvox_phantom_redirects', 1 ); function galvox_phantom_redirects() { if ( is_admin() || is_feed() ) { return; } $uri = trim( $_SERVER['REQUEST_URI'], '/' ); $uri_path = parse_url( $_SERVER['REQUEST_URI'], PHP_URL_PATH ); $uri_clean = trim( $uri_path, '/' ); $redirects = array( // Legacy v3.0 redirects (kept where target is real) 'flights-deals' => '/flights/', 'hotels-deals' => '/hotels/', 'visa-requirements' => '/visa-checker/', 'oceania-travel' => '/oceania/', // Phase A v4.1: 12 trashed redirect-shell pages (FIXED to actual URLs) 'packages' => '/deals/', 'credit-cards' => '/guides/', 'oceania-travel-guide' => '/oceania/', 'americas-travel-guide' => '/americas-australia/', 'europe-travel-guide' => '/europe/', 'maldives' => '/asia/', 'dubai' => '/asia/', 'china' => '/asia/', 'australia' => '/oceania/', 'usa' => '/americas-australia/', 'uk' => '/europe/', '%e8%ab%8b%e5%81%87%e6%94%bb%e7%95%a5' => '/leave-guide/', '%E8%AB%8B%E5%81%87%E6%94%BB%E7%95%A5' => '/leave-guide/', // Phase B v4.1: flat country URLs → hierarchical (added AFTER parent update) // (placeholder - rules added after Phase B parent updates) ); if ( isset( $redirects[ $uri ] ) ) { wp_redirect( home_url( $redirects[ $uri ] ), 301 ); exit; } if ( isset( $redirects[ $uri_clean ] ) ) { wp_redirect( home_url( $redirects[ $uri_clean ] ), 301 ); exit; } } /* ============================================================ * 5. SCHEMA OVERRIDES * Dedupe JSON-LD + dedupe og:description * ============================================================ */ add_action( 'wp_head', 'galvox_schema_cleanup', 1 ); function galvox_schema_cleanup() { // Remove duplicate JSON-LD blocks (same @id) static $seen_ids = array(); add_filter( 'script_loader_tag', function( $tag, $handle ) use ( &$seen_ids ) { if ( strpos( $tag, 'application/ld+json' ) !== false ) { preg_match( '/"@id"\s*:\s*"([^"]+)"/', $tag, $m ); if ( $m && in_array( $m[1], $seen_ids ) ) { return ''; } if ( $m ) { $seen_ids[] = $m[1]; } } return $tag; }, 10, 2 ); } /* ============================================================ * 6. ROBOTS.TXT — only sitemap_index.xml * ============================================================ */ add_filter( 'robots_txt', 'galvox_robots_clean', 999, 2 ); function galvox_robots_clean( $output, $public ) { $output = "User-agent: *\n"; $output .= "Disallow: /wp-admin/\n"; $output .= "Allow: /wp-content/uploads/\n"; $output .= "Allow: /wp-content/themes/\n"; $output .= "Allow: /wp-includes/\n"; $output .= "\n"; $output .= "Sitemap: " . home_url( '/sitemap_index.xml' ) . "\n"; return $output; } /* ============================================================ * 7. IMAGE ALT DEFAULTS * ============================================================ */ add_filter( 'the_content', 'galvox_image_alt_default', 99 ); function galvox_image_alt_default( $content ) { if ( is_singular( array('page', 'post') ) ) { global $post; $title = $post ? $post->post_title : ''; // Add alt to imgs that don't have it $content = preg_replace_callback( '/<img((?:(?!alt=)[^>])*)>/i', function( $m ) use ( $title ) { return '<img' . $m[1] . ' alt="' . esc_attr( $title ) . '">'; }, $content ); } return $content; } /* ============================================================ * 8. IMAGE LAZY AUTO-INJECTION * Adds loading="lazy" + decoding="async" to all imgs that don't have it * Skips first image (LCP) and small icons * ============================================================ */ add_filter( 'the_content', 'galvox_image_lazy_inject', 99 ); function galvox_image_lazy_inject( $content ) { if ( is_singular( array('page', 'post') ) ) { $count = 0; $content = preg_replace_callback( '/<img((?:[^>])+)>/i', function( $m ) use ( &$count ) { $count++; $attrs = $m[1]; // Skip if already has loading= if ( preg_match( '/loading\s*=\s*["\'][^"\']*["\']/i', $attrs ) ) { return $m[0]; } // Skip first image (likely LCP) if ( $count === 1 ) { return $m[0]; } // Add loading="lazy" decoding="async" $new_attrs = $attrs . ' loading="lazy" decoding="async"'; return '<img' . $new_attrs . '>'; }, $content ); } return $content; } /* ============================================================ * 9. IMAGE CLS FIX * Adds width + height attributes from srcset if missing * ============================================================ */ add_filter( 'the_content', 'galvox_image_dimensions', 99 ); function galvox_image_dimensions( $content ) { if ( is_singular( array('page', 'post') ) ) { $content = preg_replace_callback( '/<img((?:(?!width=)(?!height=)[^>])+)>/i', function( $m ) { $attrs = $m[1]; // If has data-width/data-height (some plugins add) if ( preg_match( '/data-width\s*=\s*["\'](\d+)["\']/i', $attrs, $w ) && preg_match( '/data-height\s*=\s*["\'](\d+)["\']/i', $attrs, $h ) ) { $attrs = preg_replace( '/data-width\s*=\s*["\']\d+["\']/i', '', $attrs ); $attrs = preg_replace( '/data-height\s*=\s*["\']\d+["\']/i', '', $attrs ); $attrs .= ' width="' . $w[1] . '" height="' . $h[1] . '"'; } return '<img' . $attrs . '>'; }, $content ); } return $content; } /* ============================================================ * 10. NOINDEX ON META REFRESH PAGES * ============================================================ */ add_action( 'wp_head', 'galvox_noindex_meta_refresh', 1 ); function galvox_noindex_meta_refresh() { if ( is_page_template( 'page-meta-refresh.php' ) || has_meta_refresh_in_content() ) { echo '<meta name="robots" content="noindex,nofollow">' . "\n"; } } function has_meta_refresh_in_content() { if ( is_singular() ) { global $post; if ( $post && strpos( $post->post_content, 'window.location.replace' ) !== false ) { return true; } } return false; } /* ============================================================ * 11. ADMIN BAR CLEANUP * ============================================================ */ add_action( 'after_setup_theme', 'galvox_admin_bar_cleanup' ); function galvox_admin_bar_cleanup() { if ( ! current_user_can( 'manage_options' ) ) { show_admin_bar( false ); } } /* ============================================================ * 12. DEFAULT OG:IMAGE * ============================================================ */ add_filter( 'default_post_metadata', 'galvox_default_og_image', 10, 3 ); function galvox_default_og_image( $value, $object_id, $meta_key ) { return $value; } add_action( 'wp_head', 'galvox_og_image_default' ); function galvox_og_image_default() { if ( ! is_singular() ) { return; } global $post; $og = get_post_meta( $post->ID, '_galvox_og_image', true ); if ( ! $og ) { $og = 'https://galvoxstar.com/wp-content/uploads/2026/04/GALVOX-LOGO-PNG.png'; } if ( ! has_action( 'wpseo_opengraph_image' ) && ! defined( 'RANK_MATH_VERSION' ) ) { echo '<meta property="og:image" content="' . esc_url( $og ) . '">' . "\n"; } } // === Galvox Page Guard v1.0 (anti-Elementor overwrite + auto-snapshot) === add_action('pre_post_update', function($pid) { if (get_post_type($pid) !== 'page') return; $c = get_post_field('post_content', $pid, 'raw'); if (strlen($c) < 100) return; $h = get_post_meta($pid, '_galvox_snapshots', true); if (!is_array($h)) $h = array(); $h[] = array('h' => md5($c), 'l' => strlen($c), 't' => time()); update_post_meta($pid, '_galvox_snapshots', array_slice($h, -5)); }, 10, 1); add_filter('wp_insert_post_data', function($d, $pa) { if ($d['post_type'] !== 'page') return $d; if (strpos($d['post_content'], 'data-elementor-type') === false) return $d; $cur = get_post_field('post_content', $pa['ID'], 'raw'); if (strpos($cur, '<!-- wp:') === false) return $d; $h = get_post_meta($pa['ID'], '_galvox_snapshots', true); if (!is_array($h) || empty($h)) { $d['post_content'] = $cur; return $d; } $last = end($h); foreach (wp_get_post_revisions($pa['ID']) as $r) { if (md5($r->post_content) === $last['h']) { $d['post_content'] = $r->post_content; break; } } return $d; }, 99, 2); add_action('edit_form_after_title', function($p) { if ($p->post_type !== 'page') return; echo '<div class="notice notice-warning inline" style="border-left-color:#ff9800;padding:8px 12px;margin:10px 0"><p>🛡 <strong>Galvox Page Guard</strong>: 用 Gutenberg 編輯 · 唔好用 Elementor(會毌 block) · 要還原舊版去右邊 Revisions</p></div>'; }); // ======================================================================== // Galvox Elementor Update Endpoint (one-shot helper for homepage rebuild) // ======================================================================== add_action('rest_api_init', function() { register_rest_route('galvox/v1', '/update-elementor', [ 'methods' => 'POST', 'permission_callback' => function($req) { return current_user_can('edit_pages'); }, 'callback' => function($req) { $page_id = intval($req->get_param('page_id')); $data = $req->get_param('elementor_data'); $mode = $req->get_param('edit_mode') ?: 'builder'; if (!$page_id || !$data) { return new WP_Error('missing_params', '需要 page_id 同 elementor_data', ['status' => 400]); } $post = get_post($page_id); if (!$post) { return new WP_Error('page_not_found', "Page $page_id 唔存在", ['status' => 404]); } if (!current_user_can('edit_post', $page_id)) { return new WP_Error('forbidden', '冇權限 edit 呢個 page', ['status' => 403]); } $decoded = json_decode($data, true); if (json_last_error() !== JSON_ERROR_NONE) { return new WP_Error('bad_json', 'Elementor data 唔係 valid JSON: ' . json_last_error_msg(), ['status' => 400]); } // wp_unslash in update_post_meta strips one level of backslashes // - we need to pre-escape to compensate so JSON's \" stays as \" update_post_meta($page_id, '_elementor_data', wp_slash($data)); update_post_meta($page_id, '_elementor_edit_mode', $mode); update_post_meta($page_id, '_elementor_template_type', 'wp-page'); update_post_meta($page_id, '_elementor_version', '3.20.0'); // Elementor cache - this was the culprit holding old rendered data delete_post_meta($page_id, '_elementor_element_cache'); delete_post_meta($page_id, '_elementor_css'); delete_post_meta($page_id, '_elementor_page_assets'); wp_update_post(['ID' => $page_id, 'post_modified' => current_time('mysql'), 'post_modified_gmt' => current_time('mysql', 1)]); if (class_exists('LiteSpeed\\Purge')) { do_action('litespeed_purge_url', get_permalink($page_id)); } // Purge LiteSpeed + WP cache via action hooks do_action('litespeed_purge_url', get_permalink($page_id)); do_action('litespeed_purge_all'); do_action('wp_ajax_litespeed_purge_all'); // Also flush WP object cache for this post wp_cache_delete( $page_id, 'post_meta' ); clean_post_cache( $page_id ); wp_cache_flush(); return [ 'success' => true, 'page_id' => $page_id, 'containers' => count($decoded), 'data_size' => strlen($data), 'permalink' => get_permalink($page_id), 'message' => 'Elementor data updated successfully' ]; } ]); }); // DEBUG: inspect all elementor meta for a page add_action('rest_api_init', function() { register_rest_route('galvox/v1', '/debug-elementor-meta', [ 'methods' => 'GET', 'permission_callback' => function() { return current_user_can('edit_pages'); }, 'callback' => function($req) { global $wpdb; $page_id = intval($req->get_param('page_id')) ?: 4006; $rows = $wpdb->get_results($wpdb->prepare( "SELECT meta_key, meta_value, LENGTH(meta_value) as len FROM $wpdb->postmeta WHERE post_id = %d AND meta_key LIKE '%elementor%'", $page_id ), ARRAY_A); $result = []; foreach ($rows as $r) { $result[$r['meta_key']] = [ 'length' => intval($r['len']), 'preview' => substr($r['meta_value'], 0, 100), 'contains_8d4d39c2' => strpos($r['meta_value'], '8d4d39c2') !== false, 'contains_1aabfe5d' => strpos($r['meta_value'], '1aabfe5d') !== false, ]; } // Also check options for elementor caches $opt = $wpdb->get_results( "SELECT option_name, LENGTH(option_value) as len FROM $wpdb->options WHERE option_name LIKE '%elementor%' OR option_name LIKE '%litespeed%' ORDER BY len DESC LIMIT 20", ARRAY_A ); $opts = []; foreach ($opt as $o) $opts[$o['option_name']] = intval($o['len']); return [ 'page_id' => $page_id, 'meta' => $result, 'options_elementor' => $opts, ]; } ]); }); // ======================================================================== // Galvox Exchange REST API - 港人匯率計算 (added 2026-06-19) // ======================================================================== add_action('rest_api_init', function () { register_rest_route('galvox/v1', '/exchange', [ 'methods' => ['GET', 'POST'], 'callback' => 'galvox_exchange_handler', 'permission_callback' => '__return_true', ]); register_rest_route('galvox/v1', '/exchange/single', [ 'methods' => ['GET'], 'callback' => 'galvox_exchange_single_handler', 'permission_callback' => '__return_true', 'args' => [ 'from' => ['required' => true, 'type' => 'string', 'sanitize_callback' => 'sanitize_text_field'], 'to' => ['required' => true, 'type' => 'string', 'sanitize_callback' => 'sanitize_text_field'], ], ]); }); function galvox_exchange_get_rates() { $cache_key = 'galvox_exchange_rates_hkd'; $cached = get_transient($cache_key); if ($cached !== false) { $cached['source'] = $cached['source'] . ' (cached)'; return $cached; } // Primary: open.er-api.com (166 currencies, free no key) $response = wp_remote_get('https://open.er-api.com/v6/latest/HKD', [ 'timeout' => 8, 'headers' => ['User-Agent' => 'GalvoxStar/1.0'], ]); if (!is_wp_error($response)) { $code = wp_remote_retrieve_response_code($response); $body = wp_remote_retrieve_body($response); $data = json_decode($body, true); if ($code === 200 && isset($data['rates']) && ($data['result'] ?? '') === 'success') { $payload = [ 'rates' => $data['rates'], 'updated_at' => $data['time_last_update_unix'] ?? time(), 'source' => 'open.er-api.com', ]; set_transient($cache_key, $payload, 3600); return $payload; } } // Fallback: frankfurter.app (29 currencies, ECB official) $response = wp_remote_get('https://api.frankfurter.app/latest?from=HKD', [ 'timeout' => 8, 'headers' => ['User-Agent' => 'GalvoxStar/1.0'], ]); if (!is_wp_error($response)) { $code = wp_remote_retrieve_response_code($response); $body = wp_remote_retrieve_body($response); $data = json_decode($body, true); if ($code === 200 && isset($data['rates'])) { $payload = [ 'rates' => $data['rates'], 'updated_at' => strtotime($data['date'] ?? 'now'), 'source' => 'frankfurter.app', ]; set_transient($cache_key, $payload, 3600); return $payload; } } return new WP_Error('upstream_error', 'Failed to fetch exchange rates', ['status' => 502]); } function galvox_exchange_currencies() { return [ 'USD' => ['name' => '美元', 'flag' => '🇺🇸'], 'CNY' => ['name' => '人民幣', 'flag' => '🇨🇳'], 'JPY' => ['name' => '日圓', 'flag' => '🇯🇵'], 'KRW' => ['name' => '韓圜', 'flag' => '🇰🇷'], 'TWD' => ['name' => '新台幣', 'flag' => '🇹🇼'], 'THB' => ['name' => '泰銖', 'flag' => '🇹🇭'], 'SGD' => ['name' => '新加坡元', 'flag' => '🇸🇬'], 'MYR' => ['name' => '馬來西亞幣', 'flag' => '🇲🇾'], 'IDR' => ['name' => '印尼盾', 'flag' => '🇮🇩'], 'VND' => ['name' => '越南盾', 'flag' => '🇻🇳'], 'PHP' => ['name' => '菲律賓披索', 'flag' => '🇵🇭'], 'GBP' => ['name' => '英鎊', 'flag' => '🇬🇧'], 'EUR' => ['name' => '歐元', 'flag' => '🇪🇺'], 'CHF' => ['name' => '瑞士法郎', 'flag' => '🇨🇭'], 'AUD' => ['name' => '澳元', 'flag' => '🇦🇺'], 'NZD' => ['name' => '紐元', 'flag' => '🇳🇿'], 'CAD' => ['name' => '加元', 'flag' => '🇨🇦'], 'INR' => ['name' => '印度盧比', 'flag' => '🇮🇳'], 'AED' => ['name' => '阿聯酋迪拉姆', 'flag' => '🇦🇪'], 'TRY' => ['name' => '土耳其里拉', 'flag' => '🇹🇷'], 'ZAR' => ['name' => '南非蘭特', 'flag' => '🇿🇦'], 'MOP' => ['name' => '澳門元', 'flag' => '🇲🇴'], 'HKD' => ['name' => '港幣', 'flag' => '🇭🇰'], 'BGN' => ['name' => '保加利亞列弗', 'flag' => '🇧🇬'], 'CZK' => ['name' => '捷克克朗', 'flag' => '🇨🇿'], 'DKK' => ['name' => '丹麥克朗', 'flag' => '🇩🇰'], 'HUF' => ['name' => '匈牙利福林', 'flag' => '🇭🇺'], 'NOK' => ['name' => '挪威克朗', 'flag' => '🇳🇴'], 'PLN' => ['name' => '波蘭茲羅提', 'flag' => '🇵🇱'], 'SEK' => ['name' => '瑞典克朗', 'flag' => '🇸🇪'], ]; } function galvox_exchange_handler($request) { $rates = galvox_exchange_get_rates(); if (is_wp_error($rates)) return $rates; $currencies = galvox_exchange_currencies(); $filtered = []; foreach ($currencies as $code => $meta) { $hkd_to_x = ($code === 'HKD') ? 1.0 : ($rates['rates'][$code] ?? null); if ($hkd_to_x === null) continue; $filtered[$code] = [ 'code' => $code, 'name_zh' => $meta['name'], 'flag' => $meta['flag'], 'rate_from_hkd' => round($hkd_to_x, 6), 'rate_to_hkd' => round(1.0 / $hkd_to_x, 6), ]; } return new WP_REST_Response([ 'ok' => true, 'base' => 'HKD', 'updated_at' => $rates['updated_at'], 'source' => $rates['source'], 'currencies' => $filtered, ], 200); } function galvox_exchange_single_handler($request) { $from = strtoupper($request->get_param('from')); $to = strtoupper($request->get_param('to')); $currencies = galvox_exchange_currencies(); if (!isset($currencies[$from]) || !isset($currencies[$to])) { return new WP_Error('invalid_currency', 'Unsupported currency', ['status' => 400]); } $rates = galvox_exchange_get_rates(); if (is_wp_error($rates)) return $rates; $from_rate = ($from === 'HKD') ? 1.0 : (1.0 / ($rates['rates'][$from] ?? 1)); $to_rate = ($to === 'HKD') ? 1.0 : (1.0 / ($rates['rates'][$to] ?? 1)); $cross = $to_rate / $from_rate; return new WP_REST_Response([ 'ok' => true, 'from' => $from, 'to' => $to, 'rate' => round($cross, 6), 'updated_at' => $rates['updated_at'], 'source' => $rates['source'], ], 200); } // ======================================================================== // ===== Phase 2 redirects (added 2026-08-17) ===== add_action('template_redirect', function() { $redirects = array( '/travel-insurance-compare-2026/' => '/travel-insurance/', '/flights/' => '/deals/flights/', '/hotels/' => '/deals/hotels/', '/leave-guide/' => '/guides/leave-guide/', ); $current = $_SERVER['REQUEST_URI']; foreach ($redirects as $from => $to) { if (rtrim($current, '/') === rtrim($from, '/')) { wp_redirect(home_url($to), 301); exit; } } }); 親子遊 – 請假去旅行 | GalvoxStar https://galvoxstar.com 香港打工仔平價旅遊優惠攻略 - 機票、酒店、自由行、簽證資訊 Fri, 19 Jun 2026 14:56:12 +0000 zh-HK hourly 1 https://wordpress.org/?v=7.0.4 https://galvoxstar.com/wp-content/uploads/2026/04/請假去旅行logo-png-150x150.png 親子遊 – 請假去旅行 | GalvoxStar https://galvoxstar.com 32 32 茅山森林世界叢林漂流 港人江蘇週末遊 親子最啱攻略 https://galvoxstar.com/maoshan-forest-jiangsu-hk-weekend-guide-2/ https://galvoxstar.com/maoshan-forest-jiangsu-hk-weekend-guide-2/#respond Wed, 10 Jun 2026 17:43:33 +0000 https://galvoxstar.com/maoshan-forest-jiangsu-hk-weekend-guide-2/ 如果想搵一個由香港出發 3 個鐘就玩到、又有森林、又有水、又有小朋友放電設施嘅短途目的地, 江蘇句容茅山森林世界絕對係 2026 年首選。叢林漂流水道喺亞熱帶林木之間穿過, 大人細路都玩得, 兩日一夜最啱。

茅山森林世界 漂流水道 林蔭大道

1. 點解 2026 茅山森林世界值得一去

茅山森林世界位於江蘇句容市, 占地 12 平方公里, 係華東最大型森林主題樂園之一。叢林漂流全長 1.6 公里, 落差 28 米, 採用礦泉水恆溫供水, 夏天水溫保持 22 度, 唔會太凍。水道穿過 6 段原生態林蔭, 沿途有 4 個隧道同 2 個急降, 大人細路坐救生衣, 全程大約 12 分鐘, 刺激但安全。

園區仲有魔法黑森林光影區、Hi 心跳樂園同林深見鹿區, 玩法多樣。2026 年新開嘅「夜光森林」7 月至 8 月限定, 晚上 7 點開園, LED 燈雕同投影令成個森林變成童話世界, 適合情侶或者一家大細夜晚去。

2. 點樣由香港去最方便

由香港去茅山森林世界有 3 個方法:

方法一: 高鐵直達 (推薦)

香港西九龍站出發, 搭 G7580 次列車到南京南站, 全程 3 小時 12 分鐘。南京南站轉地鐵 S6 號線到句容站 (大約 35 分鐘), 落車再轉的士去園區 (15 分鐘, 大約 RMB 30)。全程港人護照可以直接入閘, 唔需要簽證。

方法二: 飛機 + 陸路

香港飛南京祿口機場, 飛行時間 2 小時 20 分鐘。機場大巴到句容市區 1 小時 15 分鐘, 然後的士去園區。適合假期短嘅朋友, 機票連稅大約 HK$1,800 至 HK$2,800 (旺季)。

方法三: 包車直通

由南京南站包車直接去園區, 5 座車大約 RMB 250, 7 座商務車大約 RMB 380。適合一家大細行李多, 或者時間緊迫嘅朋友。

茅山森林世界 遊客中心 入口

3. 門票 + 隱藏優惠

茅山森林世界門票分三檔:

  • 標準成人票: RMB 198 (港人身份證可享優惠 RMB 168)
  • 兒童票 (1.2-1.4 米): RMB 128
  • 長者票 (60 歲以上): RMB 98
  • 夜場票 (19:00-22:00): RMB 138

園區仲有「漂流 + 園區」套票 RMB 268, 同「兩日無限次入場」套票 RMB 358 (要出示園區住宿發票)。港人朋友記得出示護照或者港澳通行證, 喺窗口可以即場減 RMB 30。

隱藏優惠: 1) 提前 3 日喺攜程買票再減 RMB 20; 2) 攜程鑽石會員再 9 折; 3) 16 人以上團體票再 8 折。

4. 必玩 4 大設施排名

1. 叢林漂流 (★★★★★) — 全園靈魂設施, 1.6 公里礦泉水道, 落差 28 米, 12 分鐘刺激體驗。建議開園即玩, 避開人龍。

2. 魔法黑森林 (★★★★) — 室內光影區, 結合投影、煙霧、激光, 5 個主題場景 (深海、北極、叢林、外星、古堡)。冷氣開放, 夏天避暑一流。

3. Hi 心跳樂園 (★★★★) — 戶外無動力樂園, 有 9 米高滑梯、彈跳床、攀岩牆。3 歲以上小朋友都玩得, 大人可以喺旁邊睇住。

4. 林深見鹿 (★★★) — 半開放式梅花鹿園, 餵食體驗 RMB 10/份, 鹿仔好溫馴, 影相一流。

茅山森林世界 叢林漂流 水道激流
茅山森林世界 梅花鹿 林間

5. 兩日一夜行程

Day 1: 漂流 + 夜光森林

09:00 香港西九龍出發 → 12:30 到達南京南站 → 13:30 句容站 → 14:30 園區酒店 check-in → 15:00 叢林漂流 → 16:30 魔法黑森林 → 18:00 園區晚餐 (茅山道養生菜) → 19:30 夜光森林 → 21:30 返酒店

Day 2: 放空 + 回程

08:00 酒店早餐 → 09:00 Hi 心跳樂園 → 11:00 林深見鹿 → 12:30 午餐 (句容農家菜) → 14:00 出發返南京南 → 17:30 高鐵回港 → 20:45 抵達香港西九龍

6. 周邊美食 (4 間推介)

1. 茅山道養生菜 — 園區內, 主打淮揚菜, 推薦茅山老鵝湯 (RMB 88) 同蘭花豆腐 (RMB 38)。

2. 句容農家菜 — 園區外 2 公里, 鄉土味濃, 推薦土雞煲 (RMB 78) 同野生魚頭湯 (RMB 68)。

3. 句容大酒店中餐廳 — 句容市區, 粵菜淮揚菜混合, 環境企理, 適合家庭聚餐。

4. 園區咖啡廳 — 漂流出口旁, 玩完沖返身, 有簡餐同咖啡, 大約 RMB 50 一位。

茅山森林世界 林蔭步道 早晨

7. 季節性提醒

5-9 月 (旺季): 漂流最佳季節, 建議平日去, 周末人龍可達 1 小時。記得帶拖鞋同替換衫褲。

10-11 月 (秋): 紅葉季, 攝影一流, 但漂流會因天氣暫停, 建議查官網當日通知。

12-3 月 (淡季): 漂流關閉, 但 Hi 心跳樂園同魔法黑森林照常開放, 門票 7 折。夜光森林唔開放。

雨天: 漂流照常 (除非雷暴), 帶輕便雨衣 (園區有售 RMB 15)。

8. FAQ + 聯絡

Q: 港人護照可以直接入場?
A: 可以, 喺窗口出示港澳通行證或者護照即享 RMB 30 優惠。

Q: 帶 BB 車入園 OK?
A: 園區全程無障礙, BB 車同輪椅都推到, 漂流區有 BB 車寄存 (免費)。

Q: 園區有冇 locker?
A: 入口同漂流出口都有, 小櫃 RMB 10, 大櫃 RMB 20, 收現金或者微信支付。

Q: 點聯絡園區?
電話: 0511-8727 8888 (9:00-18:00)
微信公眾號: 茅山森林世界

]]>
https://galvoxstar.com/maoshan-forest-jiangsu-hk-weekend-guide-2/feed/ 0
茅山森林世界叢林漂流 港人江蘇週末遊 親子最啱攻略 https://galvoxstar.com/maoshan-forest-jiangsu-hk-weekend-guide/ https://galvoxstar.com/maoshan-forest-jiangsu-hk-weekend-guide/#respond Wed, 10 Jun 2026 17:34:50 +0000 https://galvoxstar.com/maoshan-forest-jiangsu-hk-weekend-guide/ 如果想搵一個由香港出發 3 個鐘就玩到、又有森林、又有水、又有小朋友放電設施嘅短途目的地, 江蘇句容茅山森林世界絕對係 2026 年首選。叢林漂流水道喺亞熱帶林木之間穿過, 大人細路都玩得, 兩日一夜最啱。

茅山森林世界 漂流水道 林蔭大道

1. 點解 2026 茅山森林世界值得一去

茅山森林世界位於江蘇句容市, 占地 12 平方公里, 係華東最大型森林主題樂園之一。叢林漂流全長 1.6 公里, 落差 28 米, 採用礦泉水恆溫供水, 夏天水溫保持 22 度, 唔會太凍。水道穿過 6 段原生態林蔭, 沿途有 4 個隧道同 2 個急降, 大人細路坐救生衣, 全程大約 12 分鐘, 刺激但安全。

園區仲有魔法黑森林光影區、Hi 心跳樂園同林深見鹿區, 玩法多樣。2026 年新開嘅「夜光森林」7 月至 8 月限定, 晚上 7 點開園, LED 燈雕同投影令成個森林變成童話世界, 適合情侶或者一家大細夜晚去。

2. 點樣由香港去最方便

由香港去茅山森林世界有 3 個方法:

方法一: 高鐵直達 (推薦)

香港西九龍站出發, 搭 G7580 次列車到南京南站, 全程 3 小時 12 分鐘。南京南站轉地鐵 S6 號線到句容站 (大約 35 分鐘), 落車再轉的士去園區 (15 分鐘, 大約 RMB 30)。全程港人護照可以直接入閘, 唔需要簽證。

方法二: 飛機 + 陸路

香港飛南京祿口機場, 飛行時間 2 小時 20 分鐘。機場大巴到句容市區 1 小時 15 分鐘, 然後的士去園區。適合假期短嘅朋友, 機票連稅大約 HK$1,800 至 HK$2,800 (旺季)。

方法三: 包車直通

由南京南站包車直接去園區, 5 座車大約 RMB 250, 7 座商務車大約 RMB 380。適合一家大細行李多, 或者時間緊迫嘅朋友。

茅山森林世界 遊客中心 入口

3. 門票 + 隱藏優惠

茅山森林世界門票分三檔:

  • 標準成人票: RMB 198 (港人身份證可享優惠 RMB 168)
  • 兒童票 (1.2-1.4 米): RMB 128
  • 長者票 (60 歲以上): RMB 98
  • 夜場票 (19:00-22:00): RMB 138

園區仲有「漂流 + 園區」套票 RMB 268, 同「兩日無限次入場」套票 RMB 358 (要出示園區住宿發票)。港人朋友記得出示護照或者港澳通行證, 喺窗口可以即場減 RMB 30。

隱藏優惠: 1) 提前 3 日喺攜程買票再減 RMB 20; 2) 攜程鑽石會員再 9 折; 3) 16 人以上團體票再 8 折。

4. 必玩 4 大設施排名

1. 叢林漂流 (★★★★★) — 全園靈魂設施, 1.6 公里礦泉水道, 落差 28 米, 12 分鐘刺激體驗。建議開園即玩, 避開人龍。

2. 魔法黑森林 (★★★★) — 室內光影區, 結合投影、煙霧、激光, 5 個主題場景 (深海、北極、叢林、外星、古堡)。冷氣開放, 夏天避暑一流。

3. Hi 心跳樂園 (★★★★) — 戶外無動力樂園, 有 9 米高滑梯、彈跳床、攀岩牆。3 歲以上小朋友都玩得, 大人可以喺旁邊睇住。

4. 林深見鹿 (★★★) — 半開放式梅花鹿園, 餵食體驗 RMB 10/份, 鹿仔好溫馴, 影相一流。

茅山森林世界 叢林漂流 水道激流
茅山森林世界 梅花鹿 林間

5. 兩日一夜行程

Day 1: 漂流 + 夜光森林

09:00 香港西九龍出發 → 12:30 到達南京南站 → 13:30 句容站 → 14:30 園區酒店 check-in → 15:00 叢林漂流 → 16:30 魔法黑森林 → 18:00 園區晚餐 (茅山道養生菜) → 19:30 夜光森林 → 21:30 返酒店

Day 2: 放空 + 回程

08:00 酒店早餐 → 09:00 Hi 心跳樂園 → 11:00 林深見鹿 → 12:30 午餐 (句容農家菜) → 14:00 出發返南京南 → 17:30 高鐵回港 → 20:45 抵達香港西九龍

6. 周邊美食 (4 間推介)

1. 茅山道養生菜 — 園區內, 主打淮揚菜, 推薦茅山老鵝湯 (RMB 88) 同蘭花豆腐 (RMB 38)。

2. 句容農家菜 — 園區外 2 公里, 鄉土味濃, 推薦土雞煲 (RMB 78) 同野生魚頭湯 (RMB 68)。

3. 句容大酒店中餐廳 — 句容市區, 粵菜淮揚菜混合, 環境企理, 適合家庭聚餐。

4. 園區咖啡廳 — 漂流出口旁, 玩完沖返身, 有簡餐同咖啡, 大約 RMB 50 一位。

茅山森林世界 林蔭步道 早晨

7. 季節性提醒

5-9 月 (旺季): 漂流最佳季節, 建議平日去, 周末人龍可達 1 小時。記得帶拖鞋同替換衫褲。

10-11 月 (秋): 紅葉季, 攝影一流, 但漂流會因天氣暫停, 建議查官網當日通知。

12-3 月 (淡季): 漂流關閉, 但 Hi 心跳樂園同魔法黑森林照常開放, 門票 7 折。夜光森林唔開放。

雨天: 漂流照常 (除非雷暴), 帶輕便雨衣 (園區有售 RMB 15)。

8. FAQ + 聯絡

Q: 港人護照可以直接入場?
A: 可以, 喺窗口出示港澳通行證或者護照即享 RMB 30 優惠。

Q: 帶 BB 車入園 OK?
A: 園區全程無障礙, BB 車同輪椅都推到, 漂流區有 BB 車寄存 (免費)。

Q: 園區有冇 locker?
A: 入口同漂流出口都有, 小櫃 RMB 10, 大櫃 RMB 20, 收現金或者微信支付。

Q: 點聯絡園區?
電話: 0511-8727 8888 (9:00-18:00)
微信公眾號: 茅山森林世界

]]>
https://galvoxstar.com/maoshan-forest-jiangsu-hk-weekend-guide/feed/ 0
【多哈】卡塔爾 5 日親子遊:沙漠 adventure x 海濱長廊 x 阿拉伯美食 https://galvoxstar.com/doha-qatar-5%e6%97%a5%e8%a6%aa%e5%ad%90%e9%81%8a/ https://galvoxstar.com/doha-qatar-5%e6%97%a5%e8%a6%aa%e5%ad%90%e9%81%8a/#respond Tue, 09 Jun 2026 06:41:24 +0000 https://galvoxstar.com/doha-qatar-5%e6%97%a5%e8%a6%aa%e5%ad%90%e9%81%8a/ 測試內容。多哈( Doha )係卡塔爾首都,係中東地區親子遊嘅隱藏寶藏。直航約 8 小時,時差僅慢 4 小時,城市乾淨安全,適合一家大細。

Day 1 抵達多哈,游覽海濱長廊 Corniche;Day 2 參觀伊斯蘭藝術博物館;Day 3 沙漠衝沙;Day 4 Villaggio Mall;Day 5 瓦奇夫市集購物。

實用資訊:卡塔爾航空直航,機場距離市中心 8 公里,市內建議包車或參加一日遊。

]]>
https://galvoxstar.com/doha-qatar-5%e6%97%a5%e8%a6%aa%e5%ad%90%e9%81%8a/feed/ 0
長白山天池親子遊避坑指南:6 大雷區+最佳玩法,4 日 3 夜攻略 https://galvoxstar.com/changbaishan-tianchi-parenting/ https://galvoxstar.com/changbaishan-tianchi-parenting/#respond Mon, 08 Jun 2026 12:41:11 +0000 https://galvoxstar.com/?p=2411 長白山天池:親子避坑深度遊攻略

講到東北 2024 年最 hit 嘅親子深度遊,長白山天池絕對係首選。中朝邊境上嘅休眠火山,山頂有神秘天池,風景一流,人均 3000 起 4 日 3 夜。但呢度有 6 大雷區,新手父母一定要睇呢篇攻略先。

cover

雷區 1:北坡 vs 西坡 vs 南坡

長白山有 3 個坡,新手父母一定要揀啱:

  • 西坡(撫鬆):景區最靚,有高山花園+梯子河,但要爬 1442 級樓梯,唔適合帶 5 歲以下
  • 北坡(二道白河):最熱鬧,設施完善,瀑布+溫泉+小天池,有纜車,適合家庭
  • 南坡(長白):最原始,中朝邊境,需要邊防證,新手唔建議
推薦帶娃去北坡,設施完善。

poi 1

雷區 2:天池成日睇唔到

天池成日被雲霧遮住,平均只有 30% 機會見到。要增加見到天池嘅機會:

  • 7-8 月去:晴天率高
  • 早上 9 點前到:下午多雲
  • 北坡去:北坡觀景台最高,睇到機會最大
  • 連續去 2 日:增加見到嘅機會
  • 睇實景區天氣:景區有「天池指數」APP
見唔到都唔使灰心,瀑布+溫泉+小天池一樣靚。

amap poi 1

雷區 3:酒店揀錯位置

長白山有 2 大酒店區:

  • 二道白河鎮(北坡):離景區 30 分鐘車程,酒店選擇多,人均 500-1500
  • 萬達度假區(西坡):離景區 1 小時車程,度假酒店,人均 1500-3000
推薦帶娃住二道白河,方便+實惠;想住靚酒店就揀萬達

雷區 4:唔識揀交通工具

推薦 3 種交通方式:

  • 飛機:飛長白山機場(各機場),機場大巴直達二道白河(1.5 小時)
  • 高鐵:長白山高鐵站,直達二道白河(30 分鐘)
  • 租車:機場租車自駕(豐田 RAV4,800 元/日)
推薦高鐵+租車,最方便最實惠。

雷區 5:著錯衫

長白山 6-8 月日間 20°C,夜晚 5-10°C,山頂 0-5°C。必備:

  • 羽絨(山頂用)
  • 保暖內衣(夜晚用)
  • 防曬+太陽鏡(紫外線強)
  • 雨具(午後多雷雨)
  • 防滑鞋(山路濕滑)

map

雷區 6:食錯嘢

長白山餐飲有 3 大伏:

  • 景區入面食嘢:貴+難食,人均 200 起
  • 朝鮮族表演餐:推銷酒,伏味濃
  • 野菌火鍋:有中毒風險,小心
推薦去二道白河鎮食地道東北菜,人均 80 食到飽;推薦菜:鐵鍋燉、鍋包肉、殺猪菜、酸菜白肉。

小提醒:帶娃去北坡,2 日 1 夜就夠;高山反應輕微,慢慢行;中朝邊境唔好越界;帶定兒童暈車藥(山路多彎);景區有哺乳室/育嬰室。

關鍵詞:長白山天池、親子避坑攻略、長白山 4 日 3 夜、帶娃遊東北。

]]>
https://galvoxstar.com/changbaishan-tianchi-parenting/feed/ 0
茅山森林世界度假村深度遊:親子森林漂流+竹林山居,週末隱世首選 https://galvoxstar.com/maoshan-forest-resort/ https://galvoxstar.com/maoshan-forest-resort/#respond Mon, 08 Jun 2026 12:41:08 +0000 https://galvoxstar.com/?p=2432 茅山森林世界:被竹林包圍嘅隱世度假村

講到江蘇最適合親子嘅森林度假,茅山森林世界度假村(位於句容)絕對係 2024 年最 hit 之一。整個度假村藏身喺 1.5 萬畝嘅原始森林入面,主打「回歸自然」概念,空氣清新到好似行入咗一個大型負離子機,周末過嚟真係「呼吸都覺得健康咗」。

cover

竹林山居:森林入面嘅奢華帳篷住宿

度假村最具特色嘅住宿係「竹林山居」系列,主打森林系帳篷別墅同埋樹屋。每間別墅都有獨立露台,推開窗就見到成片竹林,早晨有鳥聲做鬧鐘,晚上仲可以睇到漫天星空。最 hit 嘅係「星空帳篷房」,個營頂係透明,瞓住覺都可以睇星,超浪漫。

  • 竹林大床房(40 ㎡):落地玻璃對竹林,人均 600 起
  • 家庭樹屋(80 ㎡,2 房):小朋友當「樹屋主人」
  • 星空帳篷(35 ㎡):透明頂睇星,情侶首選

poi 1

叢林漂流+林深見鹿:親子必玩 3 大設施

度假村最大賣點係叢林漂流(夏季限定),全程 1.5 公里沿住山澗落山,水流唔激但風景一流,3 歲以上都玩得。鍾意動物嘅就去林深見鹿親子樂園,可以餵梅花鹿、小馬、羊駝,小朋友最愛。玩到攰仲可以去仙姑村行吓,呢條古村保留咗好多清末民初建築,影相一流。

amap poi 1

山野餐飲:竹林餐廳 + 山下農家菜

度假村內有「竹林餐廳」,主打本地山野食材,推薦:茅山老鵝、句容草雞蛋、野山菌湯,人均 150 食到飽。想試地道啲可以落山去仙姑村農家樂(AMap 搜),再平一半,人均 80,推薦手打魚丸、農家豆腐、茅山茶葉蛋。

amap food 1

深度行程:2 日 1 夜最佳玩法

Day 1:中午到 → check-in 竹林山居 → 午餐 → 林深見鹿餵動物 → 叢林漂流 → 民宿晚餐 → 露台睇星。Day 2:早餐 → 仙姑村行山 → 午餐 → 下午回程。整個 trip 唔趕時間,真正做到親子深度遊。

map

小提醒:叢林漂流只喺 6-9 月開放,其他季節關閉;5-6 月蚊多,記得帶定蚊怕水同防曬。自駕最方便,景區有 500 個車位。

關鍵詞:茅山森林世界、句容親子酒店、森林漂流、週末隱世 staycation。

]]>
https://galvoxstar.com/maoshan-forest-resort/feed/ 0
茅山叢林漂流攻略:親子森林漂流首選,人均 200 一票玩足 4 小時 https://galvoxstar.com/maoshan-jungle-drift/ https://galvoxstar.com/maoshan-jungle-drift/#respond Mon, 08 Jun 2026 12:40:53 +0000 https://galvoxstar.com/?p=2535 茅山叢林漂流:親子最 hit 嘅森林漂流

講到江蘇 2024 年最 hit 嘅親子漂流,茅山叢林漂流(位於句容)絕對係首選。全程 1.5 公里沿住山澗落山,水流唔激但風景一流,3 歲以上都玩得,人均 200 一票玩足 4 小時,週末過嚟親子放電一流。

cover

漂流玩法:3 大段 + 12 個激流位

漂流全程 1.5 公里,分 3 段:

  • 森林段(500 米):兩邊都係竹林,風景一流,水流平緩
  • 激流段(500 米):12 個激流位,成身濕透,刺激一流
  • 平緩段(500 米):水流平,可以慢慢睇風景
每艘艇 2-3 人,全程約 30-40 分鐘,有救生衣+頭盔,安全措施齊全。

poi 1

必備裝備 + 注意事項

必備清單:

  • 拖鞋/防滑鞋:上落艇會跣親
  • 替換衫褲:成身濕透一定要換
  • 防水袋:電話銀紙要保護好
  • 防曬:半日喺戶外要搽防曬
  • 毛巾:景區入口有沖身房
景區會俾你一個防水袋(免費),可以放手機銀紙;沖身房 10 元一次,有熱水。

amap poi 1

周邊 3 大景點:茅山森林世界、仙姑村、林深見鹿

漂流附近 3 個必去景點:

  • 茅山森林世界度假村(步行 5 分鐘):竹林山居住宿+親子樂園
  • 仙姑村(車程 5 分鐘):古村建築群,影相一流
  • 林深見鹿(步行 3 分鐘):餵梅花鹿+小馬,小朋友最愛
漂流 + 林深見鹿,半日玩完,剛剛好。

餐廳:景區餐廳 vs 仙姑村農家

景區餐廳主打簡餐,人均 80 食到飽,推薦:茅山老鵝煲、竹筒飯、句容草雞蛋。想食地道啲可以行去仙姑村農家樂(AMap 搜),推薦:手打魚丸、農家豆腐、茅山茶葉蛋,人均 70 食到飽。

map

小提醒:漂流只喺 6-9 月開放,其他季節關閉;5-6 月蚊多,記得帶蚊怕水;景區有免費車位 500 個,但旺季會爆,建議早 9 點到;漂流後成身濕,記得帶替換衫褲。

關鍵詞:茅山叢林漂流、句容親子漂流、森林漂流推薦、江蘇夏季玩水。

]]>
https://galvoxstar.com/maoshan-jungle-drift/feed/ 0
個仔話「我想去恐龍公園」,我諗住又要搭飛機 — 點知大埔就有 https://galvoxstar.com/%e5%80%8b%e4%bb%94%e8%a9%b1%e3%80%8c%e6%88%91%e6%83%b3%e5%8e%bb%e6%81%90%e9%be%8d%e5%85%ac%e5%9c%92%e3%80%8d%ef%bc%8c%e6%88%91%e8%ab%97%e4%bd%8f%e5%8f%88%e8%a6%81%e6%90%ad%e9%a3%9b%e6%a9%9f/ https://galvoxstar.com/%e5%80%8b%e4%bb%94%e8%a9%b1%e3%80%8c%e6%88%91%e6%83%b3%e5%8e%bb%e6%81%90%e9%be%8d%e5%85%ac%e5%9c%92%e3%80%8d%ef%bc%8c%e6%88%91%e8%ab%97%e4%bd%8f%e5%8f%88%e8%a6%81%e6%90%ad%e9%a3%9b%e6%a9%9f/#respond Fri, 05 Jun 2026 11:13:36 +0000 https://galvoxstar.com/?p=847 個仔話「我想去恐龍公園」,我諗住又要搭飛機 — 點知大埔就有

上個週末阿仔睇到廣告,死唔放過我話要去恐龍水上樂園。我即刻諗:又係咪要飛去泰國嗰啲?點知一查,大美督,搭港鐵到「大埔墟」轉巴士就到,由九龍出發都係個幾鐘。

6月13號開季,TLCBBQ 嘅恐龍水上樂園,4 萬呎場地,五個恐龍主題水區——我承認,入到去我自己仲興奮過個仔。

🦖 令我想返細個嘅 3 個位:
1⃣ 霸王龍充氣滑梯 — 3 層樓高,由恐龍個口滑落嚟,細路尖叫大人偷笑
2⃣ 泡泡大戰區 — 唔知幾時噴出嚟嘅綿密泡泡,成班細路追住跑,大人企埋一邊影相影到手軟
3⃣ 長頸龍彈床 — 彈起嗰下真係會以為自己飛緊

🍖 重點:包燒烤放題!
玩完水沖完涼,行去隔離就係燒烤區。任食輕食甜品 + 正宗港式燒烤。我同老婆傾咗:$287 一位包埋燒烤,即係玩水 + 食飯一條龍,仲平過去酒店食一餐自助餐。

📍 大埔汀角路 202 號(TLCBBQ)
🚗 大埔墟站轉 75K / 275R 巴士,或者自己揸車有免費泊車
🕐 $287 起包入場 + 燒烤放題

💡 爸媽實用 tips:
• 帶多套衫 — 細路 100% 會濕到透
• 塗好防曬再入場,部分區域有遮陽但戶外為主
• 3 歲以下有嬰幼兒專區,唔使擔心大細路撞到

⚠ 6月13號先開季,首兩個週末一定爆,建議平日去或者提早網上訂票。

📌 訂票優惠連結見留言區👇

#恐龍水上樂園 #大美督 #大埔好去處 #香港親子 #夏日好去處 #TLCBBQ #恐龍主題 #燒烤放題 #香港玩水

📱 原文:Facebook 帖文 | 由 請假去旅行 Travel Hacker hk 自動匯入

]]>
https://galvoxstar.com/%e5%80%8b%e4%bb%94%e8%a9%b1%e3%80%8c%e6%88%91%e6%83%b3%e5%8e%bb%e6%81%90%e9%be%8d%e5%85%ac%e5%9c%92%e3%80%8d%ef%bc%8c%e6%88%91%e8%ab%97%e4%bd%8f%e5%8f%88%e8%a6%81%e6%90%ad%e9%a3%9b%e6%a9%9f/feed/ 0
見到長隆野生動物世界雙人票有新價,幾適合想帶小朋友去廣州玩兩日一夜嘅人留意。 https://galvoxstar.com/%e8%a6%8b%e5%88%b0%e9%95%b7%e9%9a%86%e9%87%8e%e7%94%9f%e5%8b%95%e7%89%a9%e4%b8%96%e7%95%8c%e9%9b%99%e4%ba%ba%e7%a5%a8%e6%9c%89%e6%96%b0%e5%83%b9%ef%bc%8c%e5%b9%be%e9%81%a9%e5%90%88%e6%83%b3%e5%b8%b6/ https://galvoxstar.com/%e8%a6%8b%e5%88%b0%e9%95%b7%e9%9a%86%e9%87%8e%e7%94%9f%e5%8b%95%e7%89%a9%e4%b8%96%e7%95%8c%e9%9b%99%e4%ba%ba%e7%a5%a8%e6%9c%89%e6%96%b0%e5%83%b9%ef%bc%8c%e5%b9%be%e9%81%a9%e5%90%88%e6%83%b3%e5%b8%b6/#respond Wed, 03 Jun 2026 02:42:00 +0000 https://galvoxstar.com/?p=873
呢款雙人票原價 HK$820.00,而家見到優惠價 HK$523.00;今次中國內地景點活動寫住指定產品高達20%優惠,部分券仲有 94 折/每單最多減 HK$32,實際以結帳頁為準。

我自己會建議先夾好入園日子同交通,再睇清即時價、入場日期同退改條款。

💬 留言睇詳情/連結

📌 圖片及資料屬參考性質,價格以實時查詢為準

#長隆野生動物世界 #廣州親子遊 #中國內地優惠 #門票優惠

📱 原文:Facebook 帖文 | 由 請假去旅行 Travel Hacker hk 自動匯入

]]>
https://galvoxstar.com/%e8%a6%8b%e5%88%b0%e9%95%b7%e9%9a%86%e9%87%8e%e7%94%9f%e5%8b%95%e7%89%a9%e4%b8%96%e7%95%8c%e9%9b%99%e4%ba%ba%e7%a5%a8%e6%9c%89%e6%96%b0%e5%83%b9%ef%bc%8c%e5%b9%be%e9%81%a9%e5%90%88%e6%83%b3%e5%b8%b6/feed/ 0
🌊 江蘇隱藏版森林漂流!大人細路都玩到癲 https://galvoxstar.com/%f0%9f%8c%8a-%e6%b1%9f%e8%98%87%e9%9a%b1%e8%97%8f%e7%89%88%e6%a3%ae%e6%9e%97%e6%bc%82%e6%b5%81%ef%bc%81%e5%a4%a7%e4%ba%ba%e7%b4%b0%e8%b7%af%e9%83%bd%e7%8e%a9%e5%88%b0%e7%99%b2/ https://galvoxstar.com/%f0%9f%8c%8a-%e6%b1%9f%e8%98%87%e9%9a%b1%e8%97%8f%e7%89%88%e6%a3%ae%e6%9e%97%e6%bc%82%e6%b5%81%ef%bc%81%e5%a4%a7%e4%ba%ba%e7%b4%b0%e8%b7%af%e9%83%bd%e7%8e%a9%e5%88%b0%e7%99%b2/#respond Tue, 02 Jun 2026 12:31:40 +0000 https://galvoxstar.com/?p=894 江蘇隱藏版森林漂流!大人細路都玩到癲

講起漂流,大部分人只諗起廣東或者貴州,但原來江蘇茅山都有超正嘅森林漂流!穿梭住竹林同溪澗之間,水花四濺超消暑,最啱夏天去玩!

茅山森林世界唔只得漂流,成個度假區大到你玩唔完。魔法黑森林超級打卡able,行入去好似入咗童話世界;仲有林深見鹿區可以近距離餵鹿,小朋友一定鍾意到唔肯走!心跳樂園入面嘅高空項目就啱晒追求刺激嘅朋友,玻璃棧道望落去真係會腳軟。

🏆 玩咩好:
• 叢林漂流 — 穿梭竹林溪澗,消暑首選
• 魔法黑森林 — 影相打卡超靚,好似入咗童話
• 林深見鹿 — 近距離餵鹿互動,小朋友最愛
• Hi心跳樂園 — 高空項目+玻璃棧道,刺激到你尖叫

💡 小貼士:漂流記得帶替換衫同防水袋!夏天週末人流多,建議平日去或者朝早9點入場先玩漂流,下晝再慢慢打卡。

💬 留言睇詳情/連結
📌 圖片及資料屬參考性質,價格以實時查詢為準

🏷 #茅山森林世界 #江蘇旅行 #森林漂流 #夏日消暑 #親子旅行 #南京周邊遊 #常州旅遊 #週末短途 #打卡熱點 #戶外活動

📱 原文:Facebook 帖文 | 由 請假去旅行 Travel Hacker hk 自動匯入

]]>
https://galvoxstar.com/%f0%9f%8c%8a-%e6%b1%9f%e8%98%87%e9%9a%b1%e8%97%8f%e7%89%88%e6%a3%ae%e6%9e%97%e6%bc%82%e6%b5%81%ef%bc%81%e5%a4%a7%e4%ba%ba%e7%b4%b0%e8%b7%af%e9%83%bd%e7%8e%a9%e5%88%b0%e7%99%b2/feed/ 0
# 【北京親子遊】南宮五洲植物樂園 🎯 行程指南 https://galvoxstar.com/%e3%80%90%e5%8c%97%e4%ba%ac%e8%a6%aa%e5%ad%90%e9%81%8a%e3%80%91%e5%8d%97%e5%ae%ae%e4%ba%94%e6%b4%b2%e6%a4%8d%e7%89%a9%e6%a8%82%e5%9c%92-%f0%9f%8e%af-%e8%a1%8c%e7%a8%8b%e6%8c%87%e5%8d%97/ https://galvoxstar.com/%e3%80%90%e5%8c%97%e4%ba%ac%e8%a6%aa%e5%ad%90%e9%81%8a%e3%80%91%e5%8d%97%e5%ae%ae%e4%ba%94%e6%b4%b2%e6%a4%8d%e7%89%a9%e6%a8%82%e5%9c%92-%f0%9f%8e%af-%e8%a1%8c%e7%a8%8b%e6%8c%87%e5%8d%97/#respond Sun, 31 May 2026 09:39:35 +0000 https://galvoxstar.com/?p=955

📚 相關推薦

]]>
https://galvoxstar.com/%e3%80%90%e5%8c%97%e4%ba%ac%e8%a6%aa%e5%ad%90%e9%81%8a%e3%80%91%e5%8d%97%e5%ae%ae%e4%ba%94%e6%b4%b2%e6%a4%8d%e7%89%a9%e6%a8%82%e5%9c%92-%f0%9f%8e%af-%e8%a1%8c%e7%a8%8b%e6%8c%87%e5%8d%97/feed/ 0