{"id":1266,"date":"2026-04-27T05:18:22","date_gmt":"2026-04-27T05:18:22","guid":{"rendered":"https:\/\/elyspace.com\/blog\/?p=1266"},"modified":"2026-04-27T05:18:22","modified_gmt":"2026-04-27T05:18:22","slug":"how-to-make-own-wordpress-template-for-travel-website","status":"publish","type":"post","link":"https:\/\/elyspace.com\/blog\/how-to-make-own-wordpress-template-for-travel-website\/","title":{"rendered":"How To Make Own WordPress Template For Travel Website"},"content":{"rendered":"\n<p>Below is <strong>one possible<\/strong> complete WordPress theme structure and code that:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Registers a custom post type called \u201cTours\u201d (or \u201cPackages\u201d) with relevant meta fields.<\/li>\n\n\n\n<li>Renames the original Thrillophilia classes to new <strong>ElySpace<\/strong> classes (e.g., <code>ElySpace_HandpickedCard__...<\/code>).<\/li>\n\n\n\n<li>Replaces references to <strong>Thrillophilia<\/strong> with <strong>ElySpaceTravel<\/strong>.<\/li>\n\n\n\n<li>Integrates basic <strong>Elementor support<\/strong> so you can build and edit pages with Elementor.<\/li>\n\n\n\n<li>Makes the HTML \u201cpackage listings\u201d dynamic by pulling data from the custom post type.<\/li>\n\n\n\n<li>Provides a <strong>theme settings<\/strong> page (using standard WordPress options API) where you can add or manage certain text dynamically if desired.<\/li>\n<\/ol>\n\n\n\n<p>This is a <strong>starter\/foundation<\/strong> theme. You can refine, reorganize, and expand as needed.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Folder &amp; File Structure<\/h1>\n\n\n\n<pre class=\"wp-block-code\"><code>elyspace-travel-landing\/\n\u251c\u2500\u2500 inc\/\n\u2502   \u251c\u2500\u2500 custom-post-types.php     \/\/ CPT (Tours\/Packages) registration\n\u2502   \u251c\u2500\u2500 custom-fields.php         \/\/ Optional: For custom meta fields (ACF or custom)\n\u2502   \u251c\u2500\u2500 theme-settings-page.php   \/\/ Optional: Admin page to manage theme settings\n\u2502\n\u251c\u2500\u2500 template-parts\/\n\u2502   \u251c\u2500\u2500 hero.php                  \/\/ Example partial for Hero section\n\u2502   \u251c\u2500\u2500 packages-loop.php         \/\/ Listing of packages (dynamic from CPT)\n\u2502   \u2514\u2500\u2500 footer-content.php        \/\/ Example partial for the custom Footer content\n\u2502\n\u251c\u2500\u2500 footer.php\n\u251c\u2500\u2500 front-page.php                \/\/ Landing\/Home page template\n\u251c\u2500\u2500 functions.php\n\u251c\u2500\u2500 header.php\n\u251c\u2500\u2500 screenshot.png                \/\/ Theme screenshot (shown in WP Admin)\n\u251c\u2500\u2500 single-tour.php               \/\/ Single \"Tour\" custom post type template\n\u251c\u2500\u2500 archive-tour.php              \/\/ Archive listing for \"Tours\" (optional)\n\u251c\u2500\u2500 page.php                      \/\/ Default page template\n\u251c\u2500\u2500 style.css                     \/\/ Main theme stylesheet\n\u2514\u2500\u2500 readme.txt                    \/\/ Optional instructions\n<\/code><\/pre>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>Note<\/strong>: The names and structure are flexible. Adjust them to fit your workflow.<\/p>\n<\/blockquote>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">1. <code>style.css<\/code> (Required Theme Header + Global Styles)<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>\/*\nTheme Name: ElySpace Travel Landing\nTheme URI:  https:\/\/elyspace.com\/web-design\nAuthor:     ElySpace\nAuthor URI: https:\/\/elyspace.com\/web-design\nDescription: A modern WordPress theme optimized for travel business landing pages focusing on Kashmir tours.\nVersion:    1.0\nText Domain: elyspace-travel-landing\n*\/\n\n\/* Basic resets and global styles *\/\nbody {\n  margin: 0;\n  font-family: 'Open Sans', sans-serif;\n  color: #333;\n  background-color: #fff;\n}\n\na {\n  text-decoration: none;\n  color: inherit;\n}\n\n\/* Example gradient for backgrounds *\/\n.elyspace-gradient-bg {\n  background: linear-gradient(135deg, #00B4DB 0%, #0083B0 100%);\n}\n\n\/* Hero Section Classes *\/\n.ElySpaceHero_section {\n  position: relative;\n  text-align: center;\n  color: #fff;\n  padding: 80px 20px;\n  background-size: cover;\n  background-position: center;\n}\n\n.ElySpaceHero_heading {\n  font-size: 48px;\n  margin-bottom: 20px;\n}\n\n.ElySpaceHero_subheading {\n  font-size: 24px;\n  margin-bottom: 30px;\n}\n\n.ElySpaceHero_button {\n  background-color: #ff7e5f;\n  border: none;\n  padding: 15px 30px;\n  border-radius: 4px;\n  cursor: pointer;\n  font-size: 16px;\n}\n\n\/* Example classes for packages listing *\/\n.ElySpacePackages_wrapper {\n  margin: 40px 0;\n}\n\n.ElySpace_packageCard {\n  border: 1px solid #eee;\n  padding: 16px;\n  border-radius: 6px;\n  margin-bottom: 24px;\n  background: #fff;\n  box-shadow: 0 2px 4px rgba(0,0,0,0.1);\n}\n\n.ElySpace_packageCard img {\n  width: 100%;\n  border-radius: 4px;\n}\n\n.ElySpace_packageCard-title {\n  font-size: 20px;\n  font-weight: 600;\n  margin: 12px 0 8px 0;\n}\n\n.ElySpace_packageCard-meta {\n  font-size: 14px;\n  color: #777;\n  margin-bottom: 8px;\n}\n\n.ElySpace_packageCard-price {\n  font-size: 18px;\n  color: #f37002;\n  font-weight: bold;\n}\n\n.ElySpace_packageCard-oldprice {\n  text-decoration: line-through;\n  margin-left: 10px;\n  font-size: 16px;\n  color: #999;\n}\n\n.ElySpace_packageCard-actions {\n  margin-top: 12px;\n}\n\n.ElySpace_packageCard-actions button {\n  background-color: #f37002;\n  color: #fff;\n  border: 0;\n  padding: 10px 20px;\n  border-radius: 4px;\n  cursor: pointer;\n}\n\n\/* Footer Classes *\/\n.ElySpaceFooter_wrapper {\n  background-color: #222;\n  color: #aaa;\n  padding: 40px 20px;\n  text-align: center;\n}\n\n.ElySpaceFooter_heading {\n  color: #fff;\n  font-size: 18px;\n  margin-bottom: 20px;\n}\n\n.ElySpaceFooter_link {\n  display: block;\n  color: #ccc;\n  margin: 4px 0;\n}\n\n.ElySpaceFooter_link:hover {\n  color: #fff;\n}\n\n.ElySpaceFooter_logo img {\n  max-width: 200px;\n}\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">2. <code>functions.php<\/code> (Theme Setup, Enqueue, CPT Includes, Admin Notice)<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?php\n\/**\n * Main functions for ElySpace Travel Landing Theme\n *\/\n\nif (!defined('ABSPATH')) {\n    exit; \/\/ Exit if accessed directly\n}\n\nadd_action('after_setup_theme', 'elyspace_travel_landing_setup');\nfunction elyspace_travel_landing_setup() {\n    \/\/ Enable support for site title tag\n    add_theme_support('title-tag');\n    \n    \/\/ Enable featured images\n    add_theme_support('post-thumbnails');\n\n    \/\/ Support Elementor\n    add_theme_support('elementor');\n    \n    \/\/ Register primary menu\n    register_nav_menus(&#91;\n        'primary' =&gt; __('Primary Menu', 'elyspace-travel-landing'),\n    ]);\n}\n\n\/\/ Enqueue Theme Scripts &amp; Styles\nadd_action('wp_enqueue_scripts', 'elyspace_travel_landing_enqueue_assets');\nfunction elyspace_travel_landing_enqueue_assets() {\n    \/\/ Main stylesheet\n    wp_enqueue_style('elyspace-main-style', get_stylesheet_uri(), &#91;], '1.0');\n    \/\/ Optionally enqueue scripts or additional CSS here\n}\n\n\/\/ Include custom post types file\nrequire_once get_template_directory() . '\/inc\/custom-post-types.php';\n\n\/\/ Optionally include custom fields or ACF config\nrequire_once get_template_directory() . '\/inc\/custom-fields.php';\n\n\/\/ Optionally include theme settings page\nrequire_once get_template_directory() . '\/inc\/theme-settings-page.php';\n\n\/\/ Admin notice upon activation\nadd_action('admin_notices', 'elyspace_travel_landing_admin_notice');\nfunction elyspace_travel_landing_admin_notice() {\n    $theme = wp_get_theme();\n    if ($theme-&gt;get('Name') === 'ElySpace Travel Landing') {\n        ?&gt;\n        &lt;div class=\"notice notice-success is-dismissible\"&gt;\n            &lt;p&gt;\n                &lt;?php echo __('Welcome to the ElySpace Travel Landing Theme!', 'elyspace-travel-landing'); ?&gt;\n                &lt;br&gt;\n                &lt;?php echo __('Thanks for choosing our theme. Visit', 'elyspace-travel-landing'); ?&gt; \n                &lt;a href=\"https:\/\/elyspace.com\/web-design\" target=\"_blank\"&gt;ElySpace&lt;\/a&gt; \n                &lt;?php echo __('for more details or support.', 'elyspace-travel-landing'); ?&gt;\n            &lt;\/p&gt;\n        &lt;\/div&gt;\n        &lt;?php\n    }\n}\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">3. <code>inc\/custom-post-types.php<\/code> (Register the \u201cTour\u201d CPT)<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?php\n\/**\n * Register Custom Post Type for Tours\/Packages\n *\/\n\nif (!defined('ABSPATH')) {\n    exit;\n}\n\n\/\/ CPT: Tour (Packages)\nfunction elyspace_register_tour_cpt() {\n    $labels = &#91;\n        'name'               =&gt; __('Tours', 'elyspace-travel-landing'),\n        'singular_name'      =&gt; __('Tour', 'elyspace-travel-landing'),\n        'add_new'            =&gt; __('Add New Tour', 'elyspace-travel-landing'),\n        'add_new_item'       =&gt; __('Add New Tour', 'elyspace-travel-landing'),\n        'edit_item'          =&gt; __('Edit Tour', 'elyspace-travel-landing'),\n        'new_item'           =&gt; __('New Tour', 'elyspace-travel-landing'),\n        'view_item'          =&gt; __('View Tour', 'elyspace-travel-landing'),\n        'search_items'       =&gt; __('Search Tours', 'elyspace-travel-landing'),\n        'not_found'          =&gt; __('No Tours found', 'elyspace-travel-landing'),\n        'not_found_in_trash' =&gt; __('No Tours found in Trash', 'elyspace-travel-landing'),\n        'menu_name'          =&gt; __('Tours', 'elyspace-travel-landing'),\n    ];\n\n    $args = &#91;\n        'label'               =&gt; __('Tours', 'elyspace-travel-landing'),\n        'labels'              =&gt; $labels,\n        'description'         =&gt; __('Kashmir travel packages, curated by ElySpaceTravel', 'elyspace-travel-landing'),\n        'public'              =&gt; true,\n        'has_archive'         =&gt; true,\n        'menu_icon'           =&gt; 'dashicons-palmtree',\n        'rewrite'             =&gt; &#91;'slug' =&gt; 'tours'],\n        'supports'            =&gt; &#91;'title', 'editor', 'thumbnail', 'excerpt'],\n        'show_in_rest'        =&gt; true,\n    ];\n    register_post_type('tour', $args);\n}\nadd_action('init', 'elyspace_register_tour_cpt');\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">4. <code>inc\/custom-fields.php<\/code> (Optional \u2013 Custom Fields for Price, Old Price, Duration, etc.)<\/h2>\n\n\n\n<p>If you use <a href=\"https:\/\/www.advancedcustomfields.com\/\" target=\"_blank\" rel=\"noopener\">ACF<\/a> or another fields plugin, you can skip custom code. Otherwise, here\u2019s <strong>a basic approach<\/strong> using WordPress\u2019s native custom fields or the [Settings API]. For brevity, this example only shows how you might set up meta boxes for price\/duration. You\u2019d expand as needed.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?php\n\/**\n * Basic example of adding custom meta boxes for Tours.\n *\/\n\nif (!defined('ABSPATH')) {\n    exit;\n}\n\nfunction elyspace_tour_add_meta_box() {\n    add_meta_box(\n        'elyspace_tour_meta',\n        __('Tour Details', 'elyspace-travel-landing'),\n        'elyspace_tour_meta_box_callback',\n        'tour',\n        'side',\n        'default'\n    );\n}\nadd_action('add_meta_boxes', 'elyspace_tour_add_meta_box');\n\nfunction elyspace_tour_meta_box_callback($post) {\n    wp_nonce_field(basename(__FILE__), 'elyspace_tour_nonce');\n\n    $saved_price      = get_post_meta($post-&gt;ID, '_elyspace_tour_price', true);\n    $saved_old_price  = get_post_meta($post-&gt;ID, '_elyspace_tour_old_price', true);\n    $saved_duration   = get_post_meta($post-&gt;ID, '_elyspace_tour_duration', true);\n    \n    ?&gt;\n    &lt;p&gt;\n        &lt;label for=\"elyspace_tour_price\"&gt;&lt;?php _e('Price (INR):', 'elyspace-travel-landing'); ?&gt;&lt;\/label&gt;&lt;br&gt;\n        &lt;input type=\"number\" name=\"elyspace_tour_price\" id=\"elyspace_tour_price\" value=\"&lt;?php echo esc_attr($saved_price); ?&gt;\" style=\"width:100%;\"&gt;\n    &lt;\/p&gt;\n    &lt;p&gt;\n        &lt;label for=\"elyspace_tour_old_price\"&gt;&lt;?php _e('Old Price (INR):', 'elyspace-travel-landing'); ?&gt;&lt;\/label&gt;&lt;br&gt;\n        &lt;input type=\"number\" name=\"elyspace_tour_old_price\" id=\"elyspace_tour_old_price\" value=\"&lt;?php echo esc_attr($saved_old_price); ?&gt;\" style=\"width:100%;\"&gt;\n    &lt;\/p&gt;\n    &lt;p&gt;\n        &lt;label for=\"elyspace_tour_duration\"&gt;&lt;?php _e('Duration (e.g., 6 days &amp; 5 nights):', 'elyspace-travel-landing'); ?&gt;&lt;\/label&gt;&lt;br&gt;\n        &lt;input type=\"text\" name=\"elyspace_tour_duration\" id=\"elyspace_tour_duration\" value=\"&lt;?php echo esc_attr($saved_duration); ?&gt;\" style=\"width:100%;\"&gt;\n    &lt;\/p&gt;\n    &lt;?php\n}\n\nfunction elyspace_tour_save_meta($post_id) {\n    \/\/ Verify nonce\n    if (!isset($_POST&#91;'elyspace_tour_nonce']) || !wp_verify_nonce($_POST&#91;'elyspace_tour_nonce'], basename(__FILE__))) {\n        return;\n    }\n    \/\/ Bail if auto saving\n    if (defined('DOING_AUTOSAVE') &amp;&amp; DOING_AUTOSAVE) {\n        return;\n    }\n    \/\/ Check permissions\n    if (isset($_POST&#91;'post_type']) &amp;&amp; 'tour' === $_POST&#91;'post_type']) {\n        if (!current_user_can('edit_post', $post_id)) {\n            return;\n        }\n    }\n\n    \/\/ Save each field\n    $fields = &#91;\n        'elyspace_tour_price'     =&gt; '_elyspace_tour_price',\n        'elyspace_tour_old_price' =&gt; '_elyspace_tour_old_price',\n        'elyspace_tour_duration'  =&gt; '_elyspace_tour_duration',\n    ];\n    foreach ($fields as $field_form =&gt; $field_meta) {\n        if (isset($_POST&#91;$field_form])) {\n            update_post_meta($post_id, $field_meta, sanitize_text_field($_POST&#91;$field_form]));\n        }\n    }\n}\nadd_action('save_post', 'elyspace_tour_save_meta');\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">5. <code>inc\/theme-settings-page.php<\/code> (Optional \u2013 Simple Admin Page for Additional Theme Settings)<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?php\n\/**\n * Example theme settings page for ElySpace Travel Landing\n *\/\n\nif (!defined('ABSPATH')) {\n    exit;\n}\n\n\/\/ Create a new submenu under Appearance\nadd_action('admin_menu', 'elyspace_travel_landing_theme_settings_menu');\nfunction elyspace_travel_landing_theme_settings_menu() {\n    add_theme_page(\n        __('ElySpace Theme Settings', 'elyspace-travel-landing'), \n        __('ElySpace Settings', 'elyspace-travel-landing'), \n        'manage_options', \n        'elyspace-theme-settings', \n        'elyspace_travel_landing_render_settings_page'\n    );\n}\n\nfunction elyspace_travel_landing_render_settings_page() {\n    ?&gt;\n    &lt;div class=\"wrap\"&gt;\n        &lt;h1&gt;&lt;?php _e('ElySpace Travel Landing Settings', 'elyspace-travel-landing'); ?&gt;&lt;\/h1&gt;\n        &lt;form method=\"post\" action=\"options.php\"&gt;\n            &lt;?php\n                settings_fields('elyspace_theme_settings_group');\n                do_settings_sections('elyspace-theme-settings');\n                submit_button();\n            ?&gt;\n        &lt;\/form&gt;\n    &lt;\/div&gt;\n    &lt;?php\n}\n\n\/\/ Register a setting to store custom text or disclaimers\nadd_action('admin_init', 'elyspace_travel_landing_register_settings');\nfunction elyspace_travel_landing_register_settings() {\n    register_setting('elyspace_theme_settings_group', 'elyspace_footer_disclaimer');\n    \n    add_settings_section(\n        'elyspace_theme_settings_section', \n        __('Footer Disclaimer', 'elyspace-travel-landing'), \n        '__return_false', \n        'elyspace-theme-settings'\n    );\n    \n    add_settings_field(\n        'elyspace_footer_disclaimer',\n        __('Footer Disclaimer Text', 'elyspace-travel-landing'),\n        'elyspace_footer_disclaimer_field_html',\n        'elyspace-theme-settings',\n        'elyspace_theme_settings_section'\n    );\n}\n\n\/\/ Callback for the text field\nfunction elyspace_footer_disclaimer_field_html() {\n    $value = get_option('elyspace_footer_disclaimer', '');\n    echo '&lt;textarea style=\"width: 100%; height: 80px;\" name=\"elyspace_footer_disclaimer\"&gt;' . esc_textarea($value) . '&lt;\/textarea&gt;';\n}\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">6. <code>header.php<\/code><\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?php\n\/**\n * Theme header\n *\/\n?&gt;&lt;!DOCTYPE html&gt;\n&lt;html &lt;?php language_attributes(); ?&gt;&gt;\n&lt;head&gt;\n    &lt;meta charset=\"&lt;?php bloginfo('charset'); ?&gt;\"&gt;\n    &lt;meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" &gt;\n    &lt;?php wp_head(); ?&gt;\n&lt;\/head&gt;\n&lt;body &lt;?php body_class(); ?&gt;&gt;\n&lt;?php wp_body_open(); ?&gt;\n\n&lt;header class=\"ElySpace_header\"&gt;\n    &lt;div class=\"ElySpace_header-inner\" style=\"padding:10px 20px;\"&gt;\n        &lt;div class=\"ElySpace_header-logo\"&gt;\n            &lt;?php if (has_custom_logo()) {\n                the_custom_logo();\n            } else { ?&gt;\n                &lt;a href=\"&lt;?php echo esc_url(home_url('\/')); ?&gt;\" class=\"site-title\"&gt;\n                    &lt;?php bloginfo('name'); ?&gt;\n                &lt;\/a&gt;\n            &lt;?php } ?&gt;\n        &lt;\/div&gt;\n        &lt;nav class=\"ElySpace_header-menu\"&gt;\n            &lt;?php\n            wp_nav_menu(&#91;\n                'theme_location' =&gt; 'primary',\n                'container'      =&gt; false,\n                'menu_class'     =&gt; 'ElySpace_primary-menu',\n            ]);\n            ?&gt;\n        &lt;\/nav&gt;\n    &lt;\/div&gt;\n&lt;\/header&gt;\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">7. <code>footer.php<\/code><\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?php\n\/**\n * Theme footer\n *\/\n?&gt;\n&lt;footer class=\"ElySpaceFooter_wrapper\"&gt;\n    &lt;div class=\"ElySpaceFooter_logo\"&gt;\n        &lt;a href=\"&lt;?php echo esc_url(home_url('\/')); ?&gt;\"&gt;\n            &lt;!-- Replace with your own brand\/logo --&gt;\n            &lt;img src=\"&lt;?php echo esc_url(get_template_directory_uri() . '\/assets\/images\/elyspace-logo-white.png'); ?&gt;\" alt=\"ElySpaceTravel Logo\"&gt;\n        &lt;\/a&gt;\n    &lt;\/div&gt;\n\n    &lt;div class=\"ElySpaceFooter_heading\"&gt;&lt;?php _e('ABOUT ELYSPACETRAVEL', 'elyspace-travel-landing'); ?&gt;&lt;\/div&gt;\n    &lt;a class=\"ElySpaceFooter_link\" href=\"#\" target=\"_blank\"&gt;&lt;?php _e('ABOUT US', 'elyspace-travel-landing'); ?&gt;&lt;\/a&gt;\n    &lt;a class=\"ElySpaceFooter_link\" href=\"#\" target=\"_blank\"&gt;&lt;?php _e('WE ARE HIRING', 'elyspace-travel-landing'); ?&gt;&lt;\/a&gt;\n    &lt;a class=\"ElySpaceFooter_link\" href=\"#\" target=\"_blank\"&gt;&lt;?php _e('TERMS &amp; CONDITIONS', 'elyspace-travel-landing'); ?&gt;&lt;\/a&gt;\n    &lt;a class=\"ElySpaceFooter_link\" href=\"#\" target=\"_blank\"&gt;&lt;?php _e('PRIVACY POLICY', 'elyspace-travel-landing'); ?&gt;&lt;\/a&gt;\n    &lt;a class=\"ElySpaceFooter_link\" href=\"#\" target=\"_blank\"&gt;&lt;?php _e('SUPPORT', 'elyspace-travel-landing'); ?&gt;&lt;\/a&gt;\n\n    &lt;p style=\"margin-top:20px;\"&gt;\n        &lt;?php\n            $disclaimer = get_option('elyspace_footer_disclaimer', '');\n            if (!empty($disclaimer)) {\n                echo wp_kses_post($disclaimer);\n            } else {\n                _e('\u00a9 2025 ElySpaceTravel. All rights reserved.', 'elyspace-travel-landing');\n            }\n        ?&gt;\n    &lt;\/p&gt;\n&lt;\/footer&gt;\n\n&lt;?php wp_footer(); ?&gt;\n&lt;\/body&gt;\n&lt;\/html&gt;\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">8. <code>template-parts\/hero.php<\/code> (Example Hero Section Partial)<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?php\n\/**\n * Hero Section Partial\n *\/\n$hero_background_image = get_template_directory_uri() . '\/assets\/images\/default-hero-bg.jpg'; \/\/ Fallback image\n?&gt;\n&lt;section class=\"ElySpaceHero_section\" style=\"background-image: url('&lt;?php echo esc_url($hero_background_image); ?&gt;');\"&gt;\n    &lt;h1 class=\"ElySpaceHero_heading\"&gt;&lt;?php echo esc_html(get_theme_mod('hero_heading', 'Experience the Magic of Kashmir')); ?&gt;&lt;\/h1&gt;\n    &lt;p class=\"ElySpaceHero_subheading\"&gt;&lt;?php echo esc_html(get_theme_mod('hero_subheading', 'Unforgettable Kashmir Tours')); ?&gt;&lt;\/p&gt;\n    &lt;button class=\"ElySpaceHero_button\" onclick=\"window.location.href='#packages';\"&gt;\n        &lt;?php _e('Explore Our Tours', 'elyspace-travel-landing'); ?&gt;\n    &lt;\/button&gt;\n&lt;\/section&gt;\n<\/code><\/pre>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>You could also use <strong>Elementor<\/strong> to design your Hero section. This partial is just a fallback.<\/p>\n<\/blockquote>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">9. <code>template-parts\/packages-loop.php<\/code> (Dynamic Listing of Tours)<\/h2>\n\n\n\n<p>Here we adapt the original snippet (with \u201cHandPickedProductCard\u201d etc.) to new classes (<code>ElySpaceHandpickedCard_...<\/code>) and make it dynamic with a WP query. The HTML is <strong>simplified<\/strong>; you can adapt the complex snippet exactly as you wish. The crucial part is we\u2019re <strong>looping<\/strong> over custom post type data.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?php\n\/**\n * Packages (Tours) Loop\n *\/\n\n\/\/ Example query \u2013 fetch published tours\n$args = &#91;\n    'post_type'      =&gt; 'tour',\n    'posts_per_page' =&gt; 6,\n];\n$query = new WP_Query($args);\n?&gt;\n\n&lt;div class=\"ElySpacePackages_wrapper\" id=\"packages\"&gt;\n    &lt;h2 style=\"text-align:center;\"&gt;Staff &lt;span&gt;Handpicked&lt;\/span&gt; \u2013 Curated with expertise&lt;\/h2&gt;\n    &lt;div class=\"ElySpacePackages_grid\" style=\"display:flex; flex-wrap:wrap; gap:20px;\"&gt;\n\n    &lt;?php if ($query-&gt;have_posts()) : ?&gt;\n        &lt;?php while ($query-&gt;have_posts()) : $query-&gt;the_post(); \n            \/\/ Get custom fields\n            $price      = get_post_meta(get_the_ID(), '_elyspace_tour_price', true);\n            $old_price  = get_post_meta(get_the_ID(), '_elyspace_tour_old_price', true);\n            $duration   = get_post_meta(get_the_ID(), '_elyspace_tour_duration', true);\n        ?&gt;\n            &lt;div class=\"ElySpace_packageCard\" style=\"flex:1 1 calc(33% - 20px); min-width:300px;\"&gt;\n                &lt;?php if (has_post_thumbnail()) : ?&gt;\n                    &lt;div class=\"ElySpace_packageCard-img\"&gt;\n                        &lt;a href=\"&lt;?php the_permalink(); ?&gt;\"&gt;\n                            &lt;?php the_post_thumbnail('medium_large'); ?&gt;\n                        &lt;\/a&gt;\n                    &lt;\/div&gt;\n                &lt;?php endif; ?&gt;\n                \n                &lt;div class=\"ElySpace_packageCard-content\"&gt;\n                    &lt;?php if (!empty($duration)) : ?&gt;\n                        &lt;div class=\"ElySpace_packageCard-meta\"&gt;\n                            &lt;?php echo esc_html($duration); ?&gt;\n                        &lt;\/div&gt;\n                    &lt;?php endif; ?&gt;\n                    \n                    &lt;h3 class=\"ElySpace_packageCard-title\"&gt;\n                        &lt;a href=\"&lt;?php the_permalink(); ?&gt;\"&gt;&lt;?php the_title(); ?&gt;&lt;\/a&gt;\n                    &lt;\/h3&gt;\n                    \n                    &lt;div class=\"ElySpace_packageCard-price\"&gt;\n                        &lt;?php if (!empty($price)) : ?&gt;\n                            &lt;?php echo __('INR ', 'elyspace-travel-landing') . esc_html($price); ?&gt;\n                        &lt;?php endif; ?&gt;\n                        &lt;?php if (!empty($old_price)) : ?&gt;\n                            &lt;span class=\"ElySpace_packageCard-oldprice\"&gt;\n                                &lt;?php echo __('INR ', 'elyspace-travel-landing') . esc_html($old_price); ?&gt;\n                            &lt;\/span&gt;\n                        &lt;?php endif; ?&gt;\n                    &lt;\/div&gt;\n                    \n                    &lt;div class=\"ElySpace_packageCard-actions\"&gt;\n                        &lt;button onclick=\"window.location.href='tel:+918046287598'\"&gt;\n                            &lt;?php _e('Request Callback', 'elyspace-travel-landing'); ?&gt;\n                        &lt;\/button&gt;\n                    &lt;\/div&gt;\n                &lt;\/div&gt;\n            &lt;\/div&gt;\n        &lt;?php endwhile; wp_reset_postdata(); ?&gt;\n    &lt;?php else : ?&gt;\n        &lt;p&gt;&lt;?php _e('No tours found.', 'elyspace-travel-landing'); ?&gt;&lt;\/p&gt;\n    &lt;?php endif; ?&gt;\n    \n    &lt;\/div&gt;\n&lt;\/div&gt;\n<\/code><\/pre>\n\n\n\n<p><strong>Tip<\/strong>: If you want the <strong>exact<\/strong> markup from your large snippet, just rename those classes. The key difference is we\u2019re pulling data from the WP database instead of hardcoding.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">10. <code>front-page.php<\/code> (Landing Page Template)<\/h2>\n\n\n\n<p>This page pulls in the hero partial and packages loop partial. If you set a <strong>static front page<\/strong> in WP Settings \u2192 Reading, WordPress will use <code>front-page.php<\/code> for the homepage.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?php\n\/**\n * Front Page Template\n *\/\nget_header(); ?&gt;\n\n&lt;!-- Hero Section Partial (fallback) --&gt;\n&lt;?php get_template_part('template-parts\/hero'); ?&gt;\n\n&lt;!-- Optional: Additional content built with Elementor or manually below --&gt;\n&lt;div class=\"container\" style=\"max-width:1200px; margin:auto; padding:40px 0;\"&gt;\n    &lt;!-- Packages Loop Partial --&gt;\n    &lt;?php get_template_part('template-parts\/packages-loop'); ?&gt;\n&lt;\/div&gt;\n\n&lt;?php get_footer();\n<\/code><\/pre>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>If you want to build the entire page in <strong>Elementor<\/strong>, just create a new Page (\u201cHome\u201d), edit with Elementor, and set that page as the <strong>Front Page<\/strong> in WP. This <code>front-page.php<\/code> can remain as a fallback or minimal template.<\/p>\n<\/blockquote>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">11. <code>single-tour.php<\/code> (Single Tour Template)<\/h2>\n\n\n\n<p>Optional single view for a Tour. This can also be edited with Elementor if you allow editing of custom post types in Elementor settings.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?php\n\/**\n * Single Tour Template\n *\/\nget_header(); ?&gt;\n\n&lt;div class=\"container\" style=\"max-width:1000px; margin:auto; padding:40px;\"&gt;\n    &lt;?php if (have_posts()) : while (have_posts()) : the_post(); ?&gt;\n    \n        &lt;h1&gt;&lt;?php the_title(); ?&gt;&lt;\/h1&gt;\n        \n        &lt;?php if (has_post_thumbnail()) : ?&gt;\n            &lt;div&gt;&lt;?php the_post_thumbnail('large'); ?&gt;&lt;\/div&gt;\n        &lt;?php endif; ?&gt;\n\n        &lt;?php \n            $price      = get_post_meta(get_the_ID(), '_elyspace_tour_price', true);\n            $old_price  = get_post_meta(get_the_ID(), '_elyspace_tour_old_price', true);\n            $duration   = get_post_meta(get_the_ID(), '_elyspace_tour_duration', true);\n        ?&gt;\n        &lt;p&gt;&lt;strong&gt;&lt;?php _e('Duration:', 'elyspace-travel-landing'); ?&gt;&lt;\/strong&gt; &lt;?php echo esc_html($duration); ?&gt;&lt;\/p&gt;\n        &lt;p&gt;\n            &lt;strong&gt;&lt;?php _e('Price:', 'elyspace-travel-landing'); ?&gt;&lt;\/strong&gt;\n            &lt;?php if (!empty($price)) : ?&gt;\n                &lt;?php echo __('INR ', 'elyspace-travel-landing') . esc_html($price); ?&gt;\n            &lt;?php endif; ?&gt;\n            &lt;?php if (!empty($old_price)) : ?&gt;\n                &lt;span style=\"text-decoration:line-through; margin-left:10px;\"&gt;\n                    &lt;?php echo __('INR ', 'elyspace-travel-landing') . esc_html($old_price); ?&gt;\n                &lt;\/span&gt;\n            &lt;?php endif; ?&gt;\n        &lt;\/p&gt;\n        \n        &lt;div&gt;\n            &lt;?php the_content(); ?&gt;\n        &lt;\/div&gt;\n        \n        &lt;button style=\"margin-top:20px;\" onclick=\"window.location.href='tel:+918046287598'\"&gt;\n            &lt;?php _e('Request Callback', 'elyspace-travel-landing'); ?&gt;\n        &lt;\/button&gt;\n    \n    &lt;?php endwhile; endif; ?&gt;\n&lt;\/div&gt;\n\n&lt;?php get_footer();\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">12. <code>archive-tour.php<\/code> (Optional Archive for \u201cTours\u201d)<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?php\n\/**\n * Archive listing for Tour CPT\n *\/\nget_header(); ?&gt;\n\n&lt;div class=\"container\" style=\"max-width:1200px; margin:auto; padding:40px;\"&gt;\n    &lt;h1&gt;&lt;?php post_type_archive_title(); ?&gt;&lt;\/h1&gt;\n    &lt;?php if (have_posts()) : ?&gt;\n        &lt;div style=\"display:flex; flex-wrap:wrap; gap:20px;\"&gt;\n            &lt;?php while (have_posts()) : the_post(); \n                $price     = get_post_meta(get_the_ID(), '_elyspace_tour_price', true);\n                $old_price = get_post_meta(get_the_ID(), '_elyspace_tour_old_price', true);\n                $duration  = get_post_meta(get_the_ID(), '_elyspace_tour_duration', true);\n                ?&gt;\n                &lt;div style=\"border:1px solid #ddd; padding:16px; width:30%;\"&gt;\n                    &lt;a href=\"&lt;?php the_permalink(); ?&gt;\"&gt;&lt;?php the_post_thumbnail('medium'); ?&gt;&lt;\/a&gt;\n                    &lt;h3&gt;&lt;a href=\"&lt;?php the_permalink(); ?&gt;\"&gt;&lt;?php the_title(); ?&gt;&lt;\/a&gt;&lt;\/h3&gt;\n                    &lt;p&gt;&lt;?php echo esc_html($duration); ?&gt;&lt;\/p&gt;\n                    &lt;p&gt;\n                        &lt;strong&gt;&lt;?php _e('Price: ', 'elyspace-travel-landing'); ?&gt;&lt;\/strong&gt;\n                        &lt;?php if ($price) {\n                            echo 'INR ' . esc_html($price);\n                        } ?&gt;\n                        &lt;?php if ($old_price) {\n                            echo '&lt;span style=\"text-decoration: line-through; margin-left:10px;\"&gt;INR ' . esc_html($old_price) . '&lt;\/span&gt;';\n                        } ?&gt;\n                    &lt;\/p&gt;\n                &lt;\/div&gt;\n            &lt;?php endwhile; ?&gt;\n        &lt;\/div&gt;\n        \n        &lt;div style=\"margin-top:20px;\"&gt;\n            &lt;?php the_posts_pagination(); ?&gt;\n        &lt;\/div&gt;\n    &lt;?php else : ?&gt;\n        &lt;p&gt;&lt;?php _e('No tours found.', 'elyspace-travel-landing'); ?&gt;&lt;\/p&gt;\n    &lt;?php endif; ?&gt;\n&lt;\/div&gt;\n\n&lt;?php get_footer();\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">How to Make it All Work:<\/h1>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Zip<\/strong> the entire <code>elyspace-travel-landing\/<\/code> folder (with all files inside).<\/li>\n\n\n\n<li><strong>Install<\/strong> in WordPress (Appearance \u2192 Themes \u2192 Add New \u2192 Upload Theme).<\/li>\n\n\n\n<li><strong>Activate<\/strong> the theme.<\/li>\n\n\n\n<li>Go to <strong>Settings \u2192 Reading<\/strong> and set \u201cFront page displays\u201d to a <strong>Static page<\/strong> (which uses <code>front-page.php<\/code>). Or create a new page and design with Elementor.<\/li>\n\n\n\n<li>Add your tours under <strong>Tours<\/strong> in WP Admin. Fill in custom fields (price, old price, duration).<\/li>\n\n\n\n<li>Adjust the partial templates or styles to match the exact design from your snippet if needed.<\/li>\n\n\n\n<li>(Optional) Use the <strong>Theme Settings<\/strong> page in \u201cAppearance \u2192 ElySpace Settings\u201d to add a custom footer disclaimer or any other dynamic text you want.<\/li>\n\n\n\n<li>If you want to build with Elementor:\n<ul class=\"wp-block-list\">\n<li>Go to <strong>Elementor \u2192 Settings<\/strong> \u2192 \u201cPost Types\u201d and enable \u201ctour,\u201d if you want to edit single tour pages with Elementor.<\/li>\n\n\n\n<li>Create or edit any Page with Elementor and design visually. The theme\u2019s CSS will remain as fallback.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Final Notes<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>The <strong>classes<\/strong> in your original snippet (<code>HandPickedProductCard_<\/code>, <code>ProductCarousel_<\/code>, etc.) have been replaced with simpler <strong>ElySpace_<\/strong> classes in our example. If you want to preserve 1:1 styling from your reference code, <strong>copy\/paste<\/strong> your existing HTML structure and rename the classes to avoid conflict.<\/li>\n\n\n\n<li>By default, the data is now <strong>dynamic<\/strong>: you add\/edit tours in the WordPress admin, and the front-end displays them accordingly.<\/li>\n\n\n\n<li>This theme includes the minimal building blocks for a <strong>Kashmir landing page<\/strong> with a hero, dynamic tours, a custom footer, and <strong>Elementor<\/strong> compatibility.<\/li>\n\n\n\n<li>For more advanced \u201ccarousel\u201d behavior, you can integrate <a href=\"https:\/\/kenwheeler.github.io\/slick\/\" target=\"_blank\" rel=\"noopener\">Slick Slider<\/a> or <a href=\"https:\/\/swiperjs.com\/\" target=\"_blank\" rel=\"noopener\">Swiper.js<\/a> and turn the package listing into a true carousel.<\/li>\n<\/ul>\n\n\n\n<p>Use this as a <strong>starter<\/strong> and expand to match your exact design references. You now have:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>A <strong>complete WordPress theme<\/strong> folder &amp; file structure.<\/li>\n\n\n\n<li><strong>Elementor support<\/strong> out of the box.<\/li>\n\n\n\n<li>A <strong>dynamic<\/strong> approach via a custom post type and meta fields.<\/li>\n\n\n\n<li>A placeholders for your <strong>custom Hero, Footer, and package listing<\/strong> design.<\/li>\n<\/ol>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Below is one possible complete WordPress theme structure and code that: This is a starter\/foundation theme. You can refine, reorganize, and expand as needed. Folder &amp; File Structure Note: The names and structure are flexible. Adjust them to fit your workflow. 1. style.css (Required Theme Header + Global Styles) 2. functions.php (Theme Setup, Enqueue, CPT [&hellip;]<\/p>\n","protected":false},"author":6,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1],"tags":[],"class_list":["post-1266","post","type-post","status-publish","format-standard","hentry","category-client-stories"],"acf":[],"_links":{"self":[{"href":"https:\/\/elyspace.com\/blog\/wp-json\/wp\/v2\/posts\/1266","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/elyspace.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/elyspace.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/elyspace.com\/blog\/wp-json\/wp\/v2\/users\/6"}],"replies":[{"embeddable":true,"href":"https:\/\/elyspace.com\/blog\/wp-json\/wp\/v2\/comments?post=1266"}],"version-history":[{"count":1,"href":"https:\/\/elyspace.com\/blog\/wp-json\/wp\/v2\/posts\/1266\/revisions"}],"predecessor-version":[{"id":4665,"href":"https:\/\/elyspace.com\/blog\/wp-json\/wp\/v2\/posts\/1266\/revisions\/4665"}],"wp:attachment":[{"href":"https:\/\/elyspace.com\/blog\/wp-json\/wp\/v2\/media?parent=1266"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/elyspace.com\/blog\/wp-json\/wp\/v2\/categories?post=1266"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/elyspace.com\/blog\/wp-json\/wp\/v2\/tags?post=1266"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}