set_404(); status_header(404); get_template_part(404); exit; } // Document title and meta tags are handled by Yatra\Managers\SEOManager (document_title + wp_head). yatra_get_header(); // Calculate pricing data using helper functions $pricing_data = yatra_single_trip_calculate_base_price($trip); $base_price = $pricing_data['base_price']; $has_availability = $pricing_data['has_availability']; $has_traveler_pricing = $pricing_data['has_traveler_pricing']; $pricing_type = $pricing_data['pricing_type']; // Get group discounts data $group_discounts = yatra_single_trip_get_group_discounts($trip->id); // Prepare variables for templates $destinations = isset($trip->destinations) ? $trip->destinations : []; $activities = isset($trip->activities) ? $trip->activities : []; $trip_categories = isset($trip->trip_categories) ? $trip->trip_categories : []; // Set up global itinerary gallery data for modal (simple URL array like hero) global $yatra_itinerary_gallery_images; $yatra_itinerary_gallery_images = []; $itinerary_days = $trip->getItineraryDays(); if (!empty($itinerary_days)) { foreach ($itinerary_days as $day) { if (!empty($day['entries'])) { foreach ($day['entries'] as $entry) { // Add gallery images if (!empty($entry['gallery']) && is_array($entry['gallery'])) { foreach ($entry['gallery'] as $media) { // Always use full-size URL for gallery popup $yatra_itinerary_gallery_images[] = $media['url'] ?? ''; } } // Add video thumbnail if (!empty($entry['video_url'])) { $video_url = esc_url($entry['video_url']); $video_id = ''; $thumbnail_url = ''; // Extract video ID and thumbnail if (strpos($video_url, 'youtube.com') !== false || strpos($video_url, 'youtu.be') !== false) { // YouTube thumbnail extraction preg_match('/(?:youtube\.com\/watch\?v=|youtu\.be\/|youtube\.com\/embed\/)([^&\n?#]+)/', $video_url, $matches); $video_id = $matches[1] ?? ''; $thumbnail_url = "https://img.youtube.com/vi/{$video_id}/maxresdefault.jpg"; } elseif (strpos($video_url, 'vimeo.com') !== false) { // Vimeo thumbnail extraction preg_match('#vimeo\.com\/.*?(\d+)#', $video_url, $matches); $video_id = $matches[1] ?? ''; if ($video_id) { // Get Vimeo thumbnail via oEmbed API $oembed_url = "https://vimeo.com/api/oembed.json?url=" . urlencode($video_url); $response = wp_remote_get($oembed_url); if (!is_wp_error($response) && wp_remote_retrieve_response_code($response) === 200) { $body = wp_remote_retrieve_body($response); $data = json_decode($body, true); if ($data && isset($data['thumbnail_url'])) { $thumbnail_url = $data['thumbnail_url']; } } // Fallback if API fails if (empty($thumbnail_url)) { $thumbnail_url = 'https://i.vimeocdn.com/video/' . $video_id . '_640.jpg'; } } } if ($thumbnail_url) { $yatra_itinerary_gallery_images[] = $thumbnail_url; } } } } } } ?> getDownloadableItems(); if (!empty($downloads)): ?>
$trip, 'base_price' => $base_price]); ?> $trip, 'trip_categories' => $trip_categories, 'activities' => $activities, 'destinations' => $destinations]); ?> $trip]); ?> getAttributes(); if (!empty($attributes)): ?> $trip]); ?> $trip, 'base_price' => $base_price, 'has_availability' => $has_availability, 'has_traveler_pricing' => $has_traveler_pricing]); ?> $trip]); ?> $trip]); ?>
$trip, 'has_availability' => $has_availability, 'has_traveler_pricing' => $has_traveler_pricing, 'base_price' => $base_price, 'pricing_type' => $pricing_type]); ?>
$trip, 'group_discounts_data' => $group_discounts['group_discounts_data']]); ?> $trip]); ?> getSimilarTrips(); if (!empty($similar_trips)): ?> $trip]); ?>
$trip, 'has_availability' => $has_availability, 'has_traveler_pricing' => $has_traveler_pricing, 'base_price' => $base_price, 'pricing_type' => $pricing_type ]); ?> $trip]); ?>