Changeset 3333158
- Timestamp:
- 07/23/2025 08:31:25 PM (7 months ago)
- Location:
- havenlytics
- Files:
-
- 102 added
- 15 edited
-
assets/banner-1544x500.jpg (modified) (previous)
-
assets/banner-772x250.jpg (modified) (previous)
-
tags/1.0.7 (added)
-
tags/1.0.7/admin (added)
-
tags/1.0.7/admin/assets (added)
-
tags/1.0.7/admin/assets/css (added)
-
tags/1.0.7/admin/assets/css/havenlytics-metabox.css (added)
-
tags/1.0.7/admin/assets/css/leaflet (added)
-
tags/1.0.7/admin/assets/css/leaflet/leaflet.css (added)
-
tags/1.0.7/admin/assets/js (added)
-
tags/1.0.7/admin/assets/js/havenlytics-metabox.js (added)
-
tags/1.0.7/admin/assets/js/leaflet (added)
-
tags/1.0.7/admin/assets/js/leaflet/leaflet.js (added)
-
tags/1.0.7/admin/class-admin-assets.php (added)
-
tags/1.0.7/havenlytics.php (added)
-
tags/1.0.7/includes (added)
-
tags/1.0.7/includes/class-init.php (added)
-
tags/1.0.7/includes/class-meta-fields.php (added)
-
tags/1.0.7/includes/class-post-type.php (added)
-
tags/1.0.7/includes/functions-core.php (added)
-
tags/1.0.7/includes/modals (added)
-
tags/1.0.7/includes/modals/modal-agent.php (added)
-
tags/1.0.7/includes/modals/modal-brochure.php (added)
-
tags/1.0.7/includes/modals/modal-enquiry.php (added)
-
tags/1.0.7/includes/modals/modal-epc.php (added)
-
tags/1.0.7/includes/modals/modal-floorplan.php (added)
-
tags/1.0.7/includes/modals/modal-map.php (added)
-
tags/1.0.7/includes/modals/modal-viewing.php (added)
-
tags/1.0.7/includes/modals/modal-virtual-tour.php (added)
-
tags/1.0.7/languages (added)
-
tags/1.0.7/languages/havenlytics.pot (added)
-
tags/1.0.7/public (added)
-
tags/1.0.7/public/assets (added)
-
tags/1.0.7/public/assets/css (added)
-
tags/1.0.7/public/assets/css/havenlytics-property-featured-carousel.css (added)
-
tags/1.0.7/public/assets/css/havenlytics-property-grid.css (added)
-
tags/1.0.7/public/assets/css/havenlytics-property-list.css (added)
-
tags/1.0.7/public/assets/css/havenlytics-property-popups.css (added)
-
tags/1.0.7/public/assets/css/havenlytics-property-related-carousel.css (added)
-
tags/1.0.7/public/assets/css/havenlytics-property-single.css (added)
-
tags/1.0.7/public/assets/css/havenlytics-property-video.css (added)
-
tags/1.0.7/public/assets/css/havenlytics-root-style.css (added)
-
tags/1.0.7/public/assets/img (added)
-
tags/1.0.7/public/assets/img/layers-2x.png (added)
-
tags/1.0.7/public/assets/img/layers.png (added)
-
tags/1.0.7/public/assets/img/marker-icon.png (added)
-
tags/1.0.7/public/assets/img/no-thumb.png (added)
-
tags/1.0.7/public/assets/img/video-placeholder.png (added)
-
tags/1.0.7/public/assets/js (added)
-
tags/1.0.7/public/assets/js/havenlytics-frontend-popups.js (added)
-
tags/1.0.7/public/assets/js/havenlytics-frontend-scripts.js (added)
-
tags/1.0.7/public/assets/js/havenlytics-map.js (added)
-
tags/1.0.7/public/assets/plugins (added)
-
tags/1.0.7/public/assets/plugins/bootstrap (added)
-
tags/1.0.7/public/assets/plugins/bootstrap/css (added)
-
tags/1.0.7/public/assets/plugins/bootstrap/css/bootstrap.min.css (added)
-
tags/1.0.7/public/assets/plugins/bootstrap/css/leaflet.css (added)
-
tags/1.0.7/public/assets/plugins/bootstrap/js (added)
-
tags/1.0.7/public/assets/plugins/bootstrap/js/bootstrap.bundle.min.js (added)
-
tags/1.0.7/public/assets/plugins/bootstrap/js/leaflet.js (added)
-
tags/1.0.7/public/assets/plugins/fontawesome (added)
-
tags/1.0.7/public/assets/plugins/fontawesome/css (added)
-
tags/1.0.7/public/assets/plugins/fontawesome/css/all.min.css (added)
-
tags/1.0.7/public/assets/plugins/fontawesome/css/fontawesome.min.css (added)
-
tags/1.0.7/public/assets/plugins/fontawesome/webfonts (added)
-
tags/1.0.7/public/assets/plugins/fontawesome/webfonts/fa-brands-400.ttf (added)
-
tags/1.0.7/public/assets/plugins/fontawesome/webfonts/fa-brands-400.woff2 (added)
-
tags/1.0.7/public/assets/plugins/fontawesome/webfonts/fa-regular-400.ttf (added)
-
tags/1.0.7/public/assets/plugins/fontawesome/webfonts/fa-regular-400.woff2 (added)
-
tags/1.0.7/public/assets/plugins/fontawesome/webfonts/fa-solid-900.ttf (added)
-
tags/1.0.7/public/assets/plugins/fontawesome/webfonts/fa-solid-900.woff2 (added)
-
tags/1.0.7/public/assets/plugins/fontawesome/webfonts/fa-v4compatibility.ttf (added)
-
tags/1.0.7/public/assets/plugins/fontawesome/webfonts/fa-v4compatibility.woff2 (added)
-
tags/1.0.7/public/assets/plugins/leaflet (added)
-
tags/1.0.7/public/assets/plugins/leaflet/css (added)
-
tags/1.0.7/public/assets/plugins/leaflet/css/leaflet.css (added)
-
tags/1.0.7/public/assets/plugins/leaflet/js (added)
-
tags/1.0.7/public/assets/plugins/leaflet/js/leaflet.js (added)
-
tags/1.0.7/public/assets/plugins/owl.carouse (added)
-
tags/1.0.7/public/assets/plugins/owl.carouse/css (added)
-
tags/1.0.7/public/assets/plugins/owl.carouse/css/owl.carousel.min.css (added)
-
tags/1.0.7/public/assets/plugins/owl.carouse/js (added)
-
tags/1.0.7/public/assets/plugins/owl.carouse/js/owl.carousel.min.js (added)
-
tags/1.0.7/public/assets/plugins/theia-sticky-sidebar (added)
-
tags/1.0.7/public/assets/plugins/theia-sticky-sidebar/ResizeSensor.js (added)
-
tags/1.0.7/public/assets/plugins/theia-sticky-sidebar/theia-sticky-sidebar.js (added)
-
tags/1.0.7/public/class-frontend-assets.php (added)
-
tags/1.0.7/public/class-frontend.php (added)
-
tags/1.0.7/readme.txt (added)
-
tags/1.0.7/templates (added)
-
tags/1.0.7/templates/hvnly_property-single.php (added)
-
tags/1.0.7/templates/property-card-grid.php (added)
-
tags/1.0.7/templates/property-card-list.php (added)
-
tags/1.0.7/templates/property-card.php (added)
-
tags/1.0.7/uninstall.php (added)
-
trunk/havenlytics.php (modified) (2 diffs)
-
trunk/includes/modals (added)
-
trunk/includes/modals/modal-agent.php (added)
-
trunk/includes/modals/modal-brochure.php (added)
-
trunk/includes/modals/modal-enquiry.php (added)
-
trunk/includes/modals/modal-epc.php (added)
-
trunk/includes/modals/modal-floorplan.php (added)
-
trunk/includes/modals/modal-map.php (added)
-
trunk/includes/modals/modal-viewing.php (added)
-
trunk/includes/modals/modal-virtual-tour.php (added)
-
trunk/public/assets/css/havenlytics-property-featured-carousel.css (modified) (1 diff)
-
trunk/public/assets/css/havenlytics-property-grid.css (modified) (1 diff)
-
trunk/public/assets/css/havenlytics-property-list.css (modified) (2 diffs)
-
trunk/public/assets/css/havenlytics-property-popups.css (modified) (7 diffs)
-
trunk/public/assets/css/havenlytics-root-style.css (modified) (4 diffs)
-
trunk/public/assets/js/havenlytics-frontend-scripts.js (modified) (1 diff)
-
trunk/public/class-frontend.php (modified) (6 diffs)
-
trunk/readme.txt (modified) (3 diffs)
-
trunk/templates/hvnly_property-single.php (modified) (9 diffs)
-
trunk/templates/property-card-grid.php (modified) (1 diff)
-
trunk/templates/property-card-list.php (modified) (1 diff)
-
trunk/templates/property-card.php (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
havenlytics/trunk/havenlytics.php
r3332499 r3333158 1 1 <?php 2 2 /* 3 Plugin Name: Havenlytics – Real Estate & Property Listings3 Plugin Name: Havenlytics – WP Real Estate & Property Listings Directory 4 4 Plugin URI: https://wordpress.org/plugins/havenlytics/ 5 5 Description: A property listing plugin for WordPress that allows users to easily manage and display property listings. 6 Version: 1.0. 66 Version: 1.0.7 7 7 Author: Havenlytics 8 8 Author URI: https://havenlytics.com … … 30 30 31 31 // Define constants 32 define('HVNLY_PROPERTY_VERSION', '1.0. 6');32 define('HVNLY_PROPERTY_VERSION', '1.0.7'); 33 33 define('HVNLY_PROPERTY_URL', plugin_dir_url(__FILE__)); 34 34 define('HVNLY_PROPERTY_PATH', plugin_dir_path(__FILE__)); -
havenlytics/trunk/public/assets/css/havenlytics-property-featured-carousel.css
r3332499 r3333158 223 223 .havenlytics_featured_items-widget .havenlytics_price { 224 224 font-size: var(--havenlytics-priceSize); 225 font-weight: var(--havenlytics-fontWeight- bold);225 font-weight: var(--havenlytics-fontWeight-semibold); 226 226 color: var(--havenlytics-priceColor); 227 227 margin-bottom: 5px; -
havenlytics/trunk/public/assets/css/havenlytics-property-grid.css
r3324509 r3333158 341 341 } 342 342 } 343 343 @media (max-width: 767px) { 344 .havenlytics-property--content { 345 padding: 15px; 346 } 347 .havenlytics-btn-primary { 348 padding: 12px 20px; 349 350 } 351 352 } 344 353 @media (max-width: 576px) { 345 354 .havenlytics-property-gallery { -
havenlytics/trunk/public/assets/css/havenlytics-property-list.css
r3324509 r3333158 542 542 } 543 543 544 @media (max-width: 767px) { 545 .havenlytics-property-content { 546 padding: 15px; 547 } 548 549 .havenlytics-detail-item { 550 display: flex; 551 flex-direction: row; 552 align-items: center; 553 padding: 15px; 554 background: rgba(108, 96, 254, 0.05); 555 border-radius: 15px; 556 transition: all 0.3s; 557 justify-content: space-evenly; 558 } 559 .havenlytics-detail-icon { 560 561 margin-bottom: 0; 562 563 } 564 } 565 544 566 @media (max-width: 576px) { 545 567 .havenlytics-property-title-container { … … 551 573 552 574 .havenlytics-property-content { 553 padding: 25px;575 padding: 15px; 554 576 } 555 577 -
havenlytics/trunk/public/assets/css/havenlytics-property-popups.css
r3325794 r3333158 182 182 /* Form Styles */ 183 183 .havenlytics_popup_form { 184 display: grid; 185 grid-template-columns: 1fr 1fr; 186 gap: 20px; 184 display: block; 187 185 margin-top: 30px; 188 } 186 max-width: 550px; 187 margin: 0px auto; 188 } 189 #havenlytics_popup_enquiry .havenlytics_popup_content p.havenlytics_popup_sub_title, 190 #havenlytics_popup_agent .havenlytics_popup_content p.havenlytics_popup_sub_title, 191 #havenlytics_popup_viewing .havenlytics_popup_content p.havenlytics_popup_sub_title{text-align: center;} 192 193 #havenlytics_popup_enquiry .havenlytics_popup_content .havenlytics_popup_form p br, 194 #havenlytics_popup_agent .havenlytics_popup_content .havenlytics_popup_form p br, 195 #havenlytics_popup_viewing .havenlytics_popup_content .havenlytics_popup_form p br{display: none;} 189 196 190 197 .havenlytics_popup_form_group { … … 509 516 /* ========== Form Layout ========== */ 510 517 .havenlytics_popup_form form { 511 display: flex;518 /* display: flex; 512 519 flex-direction: column; 513 gap: 1.5rem; /* Spacing between each field group*/520 gap: 1.5rem; */ 514 521 } 515 522 … … 534 541 .havenlytics_popup_form select { 535 542 width: 100%; 536 padding: 0.75rem 1rem;543 padding: 1.5rem 1rem !important; 537 544 font-size: 1rem; 538 545 font-family: var(--havenlytics-bodyFont); … … 550 557 .havenlytics_popup_form select:focus { 551 558 outline: none; 552 border-color: var(--havenlytics- primary); /* <- Primary color for focus */559 border-color: var(--havenlytics-secondary) !important; /* <- Primary color for focus */ 553 560 box-shadow: 0 0 0 3px rgba(108, 96, 254, 0.1); 554 561 } … … 556 563 /* ========== Textarea Styling ========== */ 557 564 .havenlytics_popup_form textarea { 558 min-height: 140px;565 height: 100px; 559 566 resize: vertical; 560 567 } … … 572 579 border-radius: var(--havenlytics-btnRadius); 573 580 cursor: pointer; 574 transition: background-color var(--havenlytics-transitionTime); 581 transition: background-color var(--havenlytics-transitionTime); padding: 15px 35px; 575 582 } 576 583 … … 589 596 .havenlytics_popup_form input:valid, 590 597 .havenlytics_popup_form textarea:valid { 591 border-color: var(--havenlytics- success);598 border-color: var(--havenlytics-primary) 592 599 } 593 600 -
havenlytics/trunk/public/assets/css/havenlytics-root-style.css
r3324509 r3333158 71 71 --havenlytics-metaSize: 0.875rem; /* Meta info */ 72 72 --havenlytics-excerptSize: 0.95rem; /* Description */ 73 --havenlytics-labelSize: 0. 8rem; /* Form labels */73 --havenlytics-labelSize: 0.9rem; /* Form labels */ 74 74 75 75 /* ====================== … … 991 991 } 992 992 993 993 @media (max-width: 767px) { 994 .havenlytics-btn-primary { 995 padding: 12px 20px; 996 } 997 } 994 998 995 999 … … 1251 1255 } 1252 1256 1253 .havenlytics_gallery_fancybox_property_button::before {1257 /* .havenlytics_gallery_fancybox_property_button::before { 1254 1258 content: ''; 1255 1259 position: absolute; … … 1261 1265 transition: width 0.5s ease; 1262 1266 z-index: -1; 1263 } 1264 1265 1266 .havenlytics_gallery_fancybox_property_button:hover { 1267 } */ 1268 a.havenlytics_gallery_fancybox_property_button:hover{ 1269 color: var(--havenlytics-bg-white); 1270 } 1271 1272 /* .havenlytics_gallery_fancybox_property_button:hover { 1267 1273 transform: translateY(-3px); 1268 1274 box-shadow: 0 8px 25px rgba(255, 126, 95, 0.6); 1269 } 1270 1271 .havenlytics_gallery_fancybox_property_button:hover::before {1275 } */ 1276 1277 /* .havenlytics_gallery_fancybox_property_button:hover::before { 1272 1278 width: 100%; 1273 } 1279 } */ 1274 1280 1275 1281 .havenlytics_gallery_fancybox_property_button i { -
havenlytics/trunk/public/assets/js/havenlytics-frontend-scripts.js
r3332499 r3333158 594 594 nav: false, 595 595 dots: false, 596 autoplay: false,597 autoplayTimeout: 5000,596 autoplay: true, 597 autoplayTimeout: 10000, 598 598 autoplayHoverPause: true, 599 599 items: 1, -
havenlytics/trunk/public/class-frontend.php
r3322295 r3333158 98 98 99 99 // Featured filter 100 if (!empty($atts['featured']) && $atts['featured'] === 'yes') { 101 $meta_query[] = [ 102 'key' => '_havenlytics_featured', 103 'value' => '1', 104 'compare' => '=' 105 ]; 100 if (isset($atts['featured'])) { 101 if ($atts['featured'] === 'yes') { 102 $meta_query[] = [ 103 'key' => '_havenlytics_property_featured_item', 104 'value' => '1', 105 'compare' => '=' 106 ]; 107 } elseif ($atts['featured'] === 'no') { 108 $meta_query[] = [ 109 'key' => '_havenlytics_property_featured_item', 110 'value' => '1', 111 'compare' => '!=' 112 ]; 113 } 106 114 } 107 115 … … 199 207 $property_id = get_the_ID(); 200 208 $meta_fields = $this->get_property_meta_fields($property_id); 209 $short_description = get_post_meta($property_id, '_havenlytics_short_description', true); 210 $short_info = wp_trim_words($short_description, 18, '...'); 211 201 212 202 213 // Try to load view-specific template first … … 224 235 private function render_grid_card($meta_fields) 225 236 { 237 $property_id = get_the_ID(); 238 $meta_fields = $this->get_property_meta_fields($property_id); 226 239 ?> 227 <div class="heavenlytics-col"> 228 <div class="heavenlytics-property-card"> 229 <div class="heavenlytics-property-card-image"> 230 <?php if ($meta_fields['featured_image']) : ?> 231 <img src="<?php echo esc_url($meta_fields['featured_image']); ?>" alt="<?php the_title_attribute(); ?>"> 240 241 <!-- Property grid --> 242 <div class="col-lg-4 col-md-6"> 243 <div class="havenlytics-property-card-grid"> 244 <div class="havenlytics-property-grid-item"> 245 <div class="havenlytics-property-gallery"> 246 247 <?php 248 // Prepare gallery data 249 $gallery = get_post_meta($property_id, '_havenlytics_gallery', true); 250 $gallery_images = ! empty($gallery) ? explode(',', $gallery) : array(); 251 252 // Show only the featured or default image if 4 or fewer gallery images exist. 253 if (count($gallery_images) <= 3) : 254 255 $featured_image = isset($meta_fields['featured_image']) ? esc_url($meta_fields['featured_image']) : ''; 256 $default_image = isset($meta_fields['default_image']) ? esc_url($meta_fields['default_image']) : ''; 257 258 ?> 259 <a href="<?php echo esc_url(get_the_permalink()); ?>" class="havenlytics-property-img"> 260 <img src="<?php echo esc_url($featured_image ? $featured_image : $default_image); ?>" 261 class="img-fluid" alt="<?php echo esc_attr(get_the_title()); ?>"> 262 </a> 263 264 232 265 <?php else : ?> 233 <img src="<?php echo esc_url($meta_fields['default_image']); ?>" alt="<?php the_title_attribute(); ?>"> 266 267 <div class="havenlytics-carousel-gallery" 268 id="havenlytics-carousel-gallery-<?php echo esc_attr($property_id); ?>"> 269 <div class="havenlytics-carousel-track"> 270 <?php 271 foreach ($gallery_images as $image_id) : 272 $image_url = wp_get_attachment_image_url($image_id, 'large'); 273 ?> 274 <div class="havenlytics-carousel-slide" 275 style="background-image: url('<?php echo esc_url($image_url); ?>');"> 276 </div> 277 <?php endforeach; ?> 278 </div> 279 280 <div class="havenlytics-carousel-nav"> 281 <button class="havenlytics-carousel-nav-btn havenlytics-carousel-prev-btn"> 282 <i class="fas fa-chevron-left"></i> 283 </button> 284 <button class="havenlytics-carousel-nav-btn havenlytics-carousel-next-btn"> 285 <i class="fas fa-chevron-right"></i> 286 </button> 287 </div> 288 289 <div class="havenlytics-carousel-indicators"> 290 <?php foreach ($gallery_images as $index => $image_id) : ?> 291 <div 292 class="havenlytics-carousel-indicator <?php echo (0 === $index) ? 'havenlytics-carousel-active' : ''; ?>"> 293 </div> 294 <?php endforeach; ?> 295 </div> 296 </div> 297 234 298 <?php endif; ?> 235 299 300 301 302 <?php if ($meta_fields['price']) : ?> 303 <?php 304 // Get the currency symbol 305 $currency_sign = $this->get_currency_symbol($property_id); 306 ?> 307 <div class="havenlytics-property-amount"> 308 <h5><span><?php echo esc_html($currency_sign); ?> <?php echo esc_html($meta_fields['price']); ?> 309 </span></h5> 310 </div> 311 <?php endif; ?> 312 313 236 314 <?php if ($meta_fields['status_badge']) : ?> 237 <span class="heavenlytics-property-badge"><?php echo esc_html($meta_fields['status_badge']); ?></span> 315 <div class="havenlytics-property-featured"> 316 <span><?php echo esc_html($meta_fields['status_badge']); ?></span> 317 </div> 238 318 <?php endif; ?> 319 <!-- <div class="new-featured"> 320 <span>New</span> 321 </div> --> 322 <!-- <a href="javascript:void(0)"> 323 <div class="havenlytics-property-favourite havenlytics-property-selected"> 324 <i class="fa-regular fa-heart"></i> 325 </div> 326 </a> --> 327 </div> 328 <div class="havenlytics-property--content"> 329 <?php $this->render_star_feedback($property_id, '_havenlytics_rating_star'); ?> 330 331 <h3 class="havenlytics-property-title"> 332 <a href="<?php echo esc_url(get_the_permalink()); ?>"> 333 <?php echo esc_html(wp_trim_words(get_the_title(), 4, '...')); ?> 334 </a> 335 </h3> 336 337 338 339 <?php if ($meta_fields['city']) : ?> 340 <p class="havenlytics-property-location"> 341 <svg class="custom-icon" width="20px" height="20px" viewBox="0 0 24 24" fill="#6C60FE"> 342 <path 343 d="M12,11.5A2.5,2.5 0 0,1 9.5,9A2.5,2.5 0 0,1 12,6.5A2.5,2.5 0 0,1 14.5,9A2.5,2.5 0 0,1 12,11.5M12,2A7,7 0 0,0 5,9C5,14.25 12,22 12,22C12,22 19,14.25 19,9A7,7 0 0,0 12,2Z" /> 344 </svg> 345 <?php echo esc_html($meta_fields['city']); ?> 346 </p> 347 <?php endif; ?> 348 <?php if (! empty($meta_fields['bedrooms']) || ! empty($meta_fields['bathrooms']) || ! empty($meta_fields['sqft'])) : ?> 349 <ul class="d-flex havenlytics-property-short-details"> 350 <li> 351 352 <?php $this->render_meta_item($meta_fields['bedrooms'], __('Beds', 'havenlytics'), 'beds'); ?> 353 </li> 354 <li> 355 356 <?php $this->render_meta_item($meta_fields['bathrooms'], __('Baths', 'havenlytics'), 'baths'); ?> 357 </li> 358 <li> 359 360 <?php $this->render_meta_item($meta_fields['sqft'], __('sqft', 'havenlytics'), 'sqft'); ?> 361 </li> 362 </ul> 363 <?php endif; ?> 364 365 <ul class="havenlytics-property-category d-flex justify-content-between align-items-center"> 366 <!-- <li class="havenlytics-property-user-info"> 367 <?php 368 // $author_id = get_post_field('post_author', get_the_ID()); 369 // $avatar_url = get_avatar_url($author_id, ['size' => 96]); 370 // $author_name = get_the_author_meta('display_name', $author_id); 371 // $author_url = get_author_posts_url($author_id); 372 // $user_location = get_user_meta($author_id, 'location', true); // Optional custom meta 373 // $user_location = $user_location ? $user_location : esc_html__('Agent', 'havenlytics'); 374 ?> 375 376 <a href="<?php // echo esc_url($author_url); 377 ?>"> 378 <img src="<?php // echo esc_url($avatar_url); 379 ?>" class="img-fluid avatar" 380 alt="<?php // echo esc_attr($author_name); 381 ?>"> 382 </a> 383 <div class="havenlytics-property-user-name"> 384 <a href="<?php //echo esc_url($author_url); 385 ?>"><?php //echo esc_html($author_name); 386 ?></a> 387 <p><?php //echo esc_html($user_location); 388 ?></p> 389 </div> 390 391 </li> --> 392 <li> 393 <a href="<?php the_permalink(); ?>" class="havenlytics-btn-primary havenlytics-btn-style-2"> 394 <?php esc_html_e('View Property', 'havenlytics'); ?> 395 </a> 396 </li> 397 </ul> 398 </div> 239 399 </div> 240 241 <div class="heavenlytics-property-card-content"> 400 </div> 401 </div> 402 <!-- /Property grid --> 403 <?php 404 } 405 406 private function render_list_card($meta_fields) 407 { 408 $property_id = get_the_ID(); 409 $meta_fields = $this->get_property_meta_fields($property_id); 410 $short_description = get_post_meta($property_id, '_havenlytics_short_description', true); 411 $short_info = wp_trim_words($short_description, 18, '...'); 412 ?> 413 <!-- Property card list--> 414 <div class="col-lg-12 col-md-6"> 415 416 <div class="havenlytics-property-card"> 417 <?php 418 $gallery = get_post_meta($property_id, '_havenlytics_gallery', true); 419 $gallery_images = !empty($gallery) ? explode(',', $gallery) : array(); 420 ?> 421 422 <?php if (!empty($gallery_images)) : ?> 423 <div class="havenlytics-property-list-gallery"> 424 <div class="havenlytics-gallery-container"> 425 <div class="havenlytics-gallery-main" 426 style="background-image: url('<?php echo esc_url(wp_get_attachment_image_url($gallery_images[0], 'large')); ?>')"> 427 </div> 428 </div> 429 <div class="havenlytics-thumb-nav havenlytics-thumb-prev"> 430 <i class="fas fa-chevron-left"></i> 431 </div> 432 <div class="havenlytics-thumb-nav havenlytics-thumb-next"> 433 <i class="fas fa-chevron-right"></i> 434 </div> 435 <div class="havenlytics-gallery-thumbnails"> 436 <?php foreach ($gallery_images as $index => $image_id) : 437 $thumb_url = wp_get_attachment_image_url($image_id, 'large'); 438 $is_active = ($index === 0) ? 'active' : ''; 439 ?> 440 <div class="havenlytics-gallery-thumb <?php echo esc_attr($is_active); ?>" 441 data-highres="<?php echo esc_url($thumb_url); ?>" 442 style="background-image: url('<?php echo esc_url($thumb_url); ?>')"> 443 </div> 444 <?php endforeach; ?> 445 </div> 446 <?php if ($meta_fields['status_badge']) : ?> 447 <div class="havenlytics-property-featured"> 448 <span><?php echo esc_html($meta_fields['status_badge']); ?></span> 449 </div> 450 <?php endif; ?> 451 452 <!-- <button class="havenlytics-favorite-btn active"> 453 <i class="fas fa-heart"></i> 454 </button> --> 455 </div> 456 <?php endif; ?> 457 458 <div class="havenlytics-property-content"> 459 <div class="havenlytics-property-header"> 460 <div class="havenlytics-property-title-container"> 461 <h3 class="havenlytics-property-title"> 462 <a href="<?php echo esc_url(get_the_permalink()); ?>"> 463 <?php echo esc_html(wp_trim_words(get_the_title(), 5, '...')); ?> 464 </a> 465 </h3> 466 <?php if ($meta_fields['city']) : ?> 467 <p class="havenlytics-property-location"> 468 <svg class="custom-icon" width="20px" height="20px" viewBox="0 0 24 24" fill="#6C60FE"> 469 <path 470 d="M12,11.5A2.5,2.5 0 0,1 9.5,9A2.5,2.5 0 0,1 12,6.5A2.5,2.5 0 0,1 14.5,9A2.5,2.5 0 0,1 12,11.5M12,2A7,7 0 0,0 5,9C5,14.25 12,22 12,22C12,22 19,14.25 19,9A7,7 0 0,0 12,2Z" /> 471 </svg> 472 <?php echo esc_html($meta_fields['city']); ?> 473 </p> 474 <?php endif; ?> 475 476 </div> 477 478 479 242 480 <?php if ($meta_fields['price']) : ?> 243 <div class="heavenlytics-property-price"><span>$ </span><?php echo esc_html($meta_fields['price']); ?></div> 481 <?php 482 // Get the currency symbol 483 $currency_sign = $this->get_currency_symbol($property_id); 484 ?> 485 <div class="havenlytics-property-price"><?php echo esc_html($currency_sign); ?> 486 <?php echo esc_html($meta_fields['price']); ?></div> 487 244 488 <?php endif; ?> 245 489 246 <h3 class="heavenlytics-property-title"><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h3> 247 248 <?php if ($meta_fields['type_label']) : ?> 249 <div class="heavenlytics-property-type"><?php echo esc_html($meta_fields['type_label']); ?></div> 250 <?php endif; ?> 251 252 <div class="heavenlytics-property-meta"> 253 <?php $this->render_meta_item($meta_fields['bedrooms'], __('Beds', 'havenlytics'), 'beds'); ?> 254 <?php $this->render_meta_item($meta_fields['bathrooms'], __('Baths', 'havenlytics'), 'baths'); ?> 255 <?php $this->render_meta_item($meta_fields['sqft'], __('sqft', 'havenlytics'), 'sqft'); ?> 490 </div> 491 492 <?php $this->render_star_feedback($property_id, '_havenlytics_rating_star'); ?> 493 494 <?php if ($short_info) : ?> 495 <p class="havenlytics-property-description"> 496 <?php echo esc_html($short_info); ?> 497 498 </p> 499 <?php endif; ?> 500 <?php 501 $meta_fields = [ 502 'bedrooms' => get_post_meta($property_id, '_havenlytics_bedrooms', true), 503 'bathrooms' => get_post_meta($property_id, '_havenlytics_bathrooms', true), 504 'sqft' => get_post_meta($property_id, '_havenlytics_sqft', true), 505 'garage' => get_post_meta($property_id, '_havenlytics_garage', true), 506 'year_built' => get_post_meta($property_id, '_havenlytics_year_built', true), 507 ]; 508 509 // Only show section if any meta is not empty 510 if ( 511 !empty($meta_fields['bedrooms']) || 512 !empty($meta_fields['bathrooms']) || 513 !empty($meta_fields['sqft']) || 514 !empty($meta_fields['garage']) || 515 !empty($meta_fields['year_built']) 516 ) : 517 ?> 518 <div class="havenlytics-property-details"> 519 <?php $this->render_meta_list_item($meta_fields['bedrooms'], __('Beds', 'havenlytics'), 'fas fa-bed'); ?> 520 <?php $this->render_meta_list_item($meta_fields['bathrooms'], __('Baths', 'havenlytics'), 'fas fa-bath'); ?> 521 <?php $this->render_meta_list_item($meta_fields['sqft'], __('Sqft', 'havenlytics'), 'fas fa-ruler-combined'); ?> 522 <?php $this->render_meta_list_item($meta_fields['garage'], __('Garage', 'havenlytics'), 'fas fa-car'); ?> 523 <?php $this->render_meta_list_item($meta_fields['year_built'], __('Built', 'havenlytics'), 'fas fa-calendar-alt'); ?> 256 524 </div> 257 258 <div class="heavenlytics-property-excerpt"> 259 <?php echo esc_html(wp_trim_words(get_the_excerpt(), 20)); ?> 260 261 </div> 262 263 <div class="heavenlytics-property-footer"> 264 <?php if ($meta_fields['city']) : ?> 265 <div class="heavenlytics-property-location"> 266 <svg viewBox="0 0 24 24"> 267 <path 268 d="M12,11.5A2.5,2.5 0 0,1 9.5,9A2.5,2.5 0 0,1 12,6.5A2.5,2.5 0 0,1 14.5,9A2.5,2.5 0 0,1 12,11.5M12,2A7,7 0 0,0 5,9C5,14.25 12,22 12,22C12,22 19,14.25 19,9A7,7 0 0,0 12,2Z" /> 269 </svg> 270 <?php echo esc_html($meta_fields['city']); ?> 271 </div> 272 <?php endif; ?> 273 274 <a href="<?php the_permalink(); ?>" class="heavenlytics-property-link"> 275 <?php esc_html_e('View Details', 'havenlytics'); ?> 276 </a> 277 </div> 525 <?php endif; ?> 526 <div class="havenlytics-property-footer"> 527 <?php 528 // // Get the post author ID 529 // $author_id = get_post_field('post_author', get_the_ID()); 530 531 // // Get avatar URL safely 532 // $avatar_url = get_avatar_url($author_id, ['size' => 200]); 533 534 // // Get author name and fallback 535 // $author_name = get_the_author_meta('display_name', $author_id); 536 // $author_name = $author_name ? $author_name : esc_html__('Agent', 'havenlytics'); 537 538 // // Get custom title (optional), fallback if empty 539 // $author_title = get_user_meta($author_id, 'agent_title', true); 540 // $author_title = $author_title ? $author_title : esc_html__('Licensed Real Estate Agent', 'havenlytics'); 541 ?> 542 543 <!-- <div class="havenlytics-agent-info"> 544 <img src="<?php //echo esc_url($avatar_url); 545 ?>" class="havenlytics-agent-avatar" 546 alt="<?php //echo esc_attr($author_name); 547 ?>"> 548 <div class="havenlytics-agent-details"> 549 <div class="havenlytics-agent-name"><?php //echo esc_html($author_name); 550 ?></div> 551 <div class="havenlytics-agent-title"><?php //echo esc_html($author_title); 552 ?></div> 553 </div> 554 </div> --> 555 556 <a href="<?php the_permalink(); ?>" class="havenlytics-btn-primary havenlytics-btn-style-1"> 557 <?php esc_html_e('View Property', 'havenlytics'); ?> 558 </a> 559 </div> 278 560 </div> 561 </div> 562 279 563 </div> 280 </div> 281 <?php 282 } 283 284 private function render_list_card($meta_fields) 285 { 286 ?> 287 <div class="heavenlytics-list-item"> 288 <div class="heavenlytics-property-card"> 289 <div class="heavenlytics-property-card-image"> 290 <?php if ($meta_fields['featured_image']) : ?> 291 <img src="<?php echo esc_url($meta_fields['featured_image']); ?>" alt="<?php the_title_attribute(); ?>"> 292 <?php else : ?> 293 <img src="<?php echo esc_url($meta_fields['default_image']); ?>" alt="<?php the_title_attribute(); ?>"> 294 <?php endif; ?> 295 296 <?php if ($meta_fields['status_badge']) : ?> 297 <span class="heavenlytics-property-badge"><?php echo esc_html($meta_fields['status_badge']); ?></span> 298 <?php endif; ?> 299 </div> 300 301 <div class="heavenlytics-property-card-content"> 302 <div class="heavenlytics-property-header"> 303 <h3 class="heavenlytics-property-title"><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a> 304 </h3> 305 <?php if ($meta_fields['price']) : ?> 306 <div class="heavenlytics-property-price"><span>$ </span><?php echo esc_html($meta_fields['price']); ?> 307 </div> 308 <?php endif; ?> 309 </div> 310 311 <?php if ($meta_fields['type_label']) : ?> 312 <div class="heavenlytics-property-type"><?php echo esc_html($meta_fields['type_label']); ?></div> 313 <?php endif; ?> 314 315 <div class="heavenlytics-property-meta"> 316 <?php $this->render_meta_item($meta_fields['bedrooms'], __('Beds', 'havenlytics'), 'beds'); ?> 317 <?php $this->render_meta_item($meta_fields['bathrooms'], __('Baths', 'havenlytics'), 'baths'); ?> 318 <?php $this->render_meta_item($meta_fields['sqft'], __('sqft', 'havenlytics'), 'sqft'); ?> 319 </div> 320 321 <div class="heavenlytics-property-excerpt"> 322 <?php echo esc_html(wp_trim_words(get_the_excerpt(), 30)); ?> 323 </div> 324 325 <div class="heavenlytics-property-footer"> 326 <?php if ($meta_fields['city']) : ?> 327 <div class="heavenlytics-property-location"> 328 <svg viewBox="0 0 24 24"> 329 <path 330 d="M12,11.5A2.5,2.5 0 0,1 9.5,9A2.5,2.5 0 0,1 12,6.5A2.5,2.5 0 0,1 14.5,9A2.5,2.5 0 0,1 12,11.5M12,2A7,7 0 0,0 5,9C5,14.25 12,22 12,22C12,22 19,14.25 19,9A7,7 0 0,0 12,2Z" /> 331 </svg> 332 <?php echo esc_html($meta_fields['city']); ?> 333 </div> 334 <?php endif; ?> 335 336 <a href="<?php the_permalink(); ?>" class="heavenlytics-property-link"> 337 <?php esc_html_e('View Details', 'havenlytics'); ?> 338 </a> 339 </div> 340 </div> 341 </div> 342 </div> 343 <?php 564 <!-- /Property card list --> 565 <?php 344 566 } 345 567 … … 475 697 476 698 ?> 477 <div class="heavenlytics-property-meta-item">478 <?php echo wp_kses($icons[$icon_type], $allowed_svg_tags); ?>479 <?php echo esc_html($value); ?> <?php echo esc_html($label); ?>480 </div>481 <?php699 <div class="heavenlytics-property-meta-item"> 700 <?php echo wp_kses($icons[$icon_type], $allowed_svg_tags); ?> 701 <?php echo esc_html($value); ?> <?php echo esc_html($label); ?> 702 </div> 703 <?php 482 704 } 483 705 … … 486 708 if (empty($value)) return; 487 709 ?> 488 <div class="havenlytics-detail-item">489 <div class="havenlytics-detail-icon">710 <div class="havenlytics-detail-item"> 711 <div class="havenlytics-detail-icon"> 490 712 <i class="<?php echo esc_attr($icon_class_name); ?>"></i> 713 </div> 714 <div class="havenlytics-detail-value"><?php echo esc_html($value); ?></div> 715 <div class="havenlytics-detail-label"><?php echo esc_html($label); ?></div> 491 716 </div> 492 <div class="havenlytics-detail-value"><?php echo esc_html($value); ?></div> 493 <div class="havenlytics-detail-label"><?php echo esc_html($label); ?></div> 494 </div> 495 <?php 717 <?php 496 718 } 497 719 … … 609 831 { 610 832 ?> 611 <div class="heavenlytics-col heavenlytics-col-12">612 <p><?php esc_html_e('No properties found.', 'havenlytics'); ?></p>613 </div>833 <div class="heavenlytics-col heavenlytics-col-12"> 834 <p><?php esc_html_e('No properties found.', 'havenlytics'); ?></p> 835 </div> 614 836 <?php 615 837 } -
havenlytics/trunk/readme.txt
r3332499 r3333158 1 === Havenlytics – Real Estate & Property Listings===1 === Havenlytics – WP Real Estate & Property Listings Directory === 2 2 Contributors: Havenlytics 3 3 Donate link: https://havenlytics.com … … 6 6 Tested up to: 6.8 7 7 Requires PHP: 7.2 8 Stable tag: 1.0. 68 Stable tag: 1.0.7 9 9 License: GPLv2 or later 10 10 License URI: https://www.gnu.org/licenses/gpl-2.0.html … … 139 139 == Changelog == 140 140 141 = 1.0.7 = 142 * Fixed responsive UI issues across various sections for better mobile experience. 143 * Organized modal templates into a separate folder for better code structure and maintainability. 144 * Added `ABSPATH` check to all standalone PHP files to enhance plugin security. 145 * Implemented featured property filter support within the property shortcode. 146 147 141 148 = 1.0.6 = 142 149 * Introduced dynamic rendering of featured properties in the single property widget carousel. -
havenlytics/trunk/templates/hvnly_property-single.php
r3332499 r3333158 120 120 ?> 121 121 122 <div class="container"> 123 <!-- Property Gallery with Prefix --> 124 <div class="havenlytics_property_single"> 125 <div class="property-gallery"> 126 <?php if (!empty($gallery_images)) : ?> 127 <div class="gallery-main"> 128 <?php foreach ($gallery_images as $index => $image_id) : ?> 129 <div class="gallery-slide <?php echo $index === 0 ? 'active' : ''; ?>" 130 style="background-image: url('<?php echo esc_url(wp_get_attachment_image_url($image_id, 'large')); ?>')"> 131 </div> 132 133 <?php endforeach; ?> 134 135 <div class="gallery-counter">1/<?php echo count($gallery_images); ?></div> 136 <div class="transition-indicator"></div> 137 138 <div class="gallery-controls"> 139 <button class="gallery-btn prev-btn"> 140 <i class="fas fa-chevron-left"></i> 141 </button> 142 <button class="gallery-btn next-btn"> 143 <i class="fas fa-chevron-right"></i> 144 </button> 145 </div> 122 <div class="container"> 123 <!-- Property Gallery with Prefix --> 124 <div class="havenlytics_property_single"> 125 <div class="property-gallery"> 126 <?php if (!empty($gallery_images)) : ?> 127 <div class="gallery-main"> 128 <?php foreach ($gallery_images as $index => $image_id) : ?> 129 <div class="gallery-slide <?php echo $index === 0 ? 'active' : ''; ?>" 130 style="background-image: url('<?php echo esc_url(wp_get_attachment_image_url($image_id, 'large')); ?>')"> 131 </div> 132 133 <?php endforeach; ?> 134 135 <div class="gallery-counter">1/<?php echo count($gallery_images); ?></div> 136 <div class="transition-indicator"></div> 137 138 <div class="gallery-controls"> 139 <button class="gallery-btn prev-btn"> 140 <i class="fas fa-chevron-left"></i> 141 </button> 142 <button class="gallery-btn next-btn"> 143 <i class="fas fa-chevron-right"></i> 144 </button> 145 </div> 146 </div> 147 148 <div class="thumbnail-container"> 149 <?php foreach ($gallery_images as $index => $image_id) : ?> 150 <div class="property-thumbnail <?php echo $index === 0 ? 'active' : ''; ?>" 151 data-index="<?php echo esc_attr($index); ?>" 152 style="background-image: url('<?php echo esc_url(wp_get_attachment_image_url($image_id, 'thumbnail')); ?>')"> 153 </div> 154 <?php endforeach; ?> 155 </div> 156 157 <?php elseif (has_post_thumbnail($property_id)) : ?> 158 <div class="gallery-main"> 159 <div class="gallery-slide active" 160 style="background-image: url('<?php echo esc_url(get_the_post_thumbnail_url($property_id, 'large')); ?>')"> 161 </div> 162 163 <div class="gallery-counter">1/1</div> 164 <div class="transition-indicator"></div> 165 166 <div class="gallery-controls"> 167 <button class="gallery-btn prev-btn"> 168 <i class="fas fa-chevron-left"></i> 169 </button> 170 <button class="gallery-btn next-btn"> 171 <i class="fas fa-chevron-right"></i> 172 </button> 173 </div> 174 </div> 175 176 <div class="thumbnail-container"> 177 <div class="property-thumbnail active" data-index="0" 178 style="background-image: url('<?php echo esc_url(get_the_post_thumbnail_url($property_id, 'thumbnail')); ?>')"> 179 </div> 180 </div> 181 182 <?php else : ?> 183 <div class="gallery-main"> 184 <div class="gallery-slide active" 185 style="background-image: url('<?php echo esc_url(HVNLY_PROPERTY_URL . 'public/assets/img/no-thumb.png'); ?>')"> 186 </div> 187 <div class="gallery-counter">0/0</div> 188 </div> 189 <?php endif; ?> 146 190 </div> 147 191 148 <div class="thumbnail-container"> 149 <?php foreach ($gallery_images as $index => $image_id) : ?> 150 <div class="property-thumbnail <?php echo $index === 0 ? 'active' : ''; ?>" 151 data-index="<?php echo esc_attr($index); ?>" 152 style="background-image: url('<?php echo esc_url(wp_get_attachment_image_url($image_id, 'thumbnail')); ?>')"> 153 </div> 154 <?php endforeach; ?> 155 </div> 156 157 <?php elseif (has_post_thumbnail($property_id)) : ?> 158 <div class="gallery-main"> 159 <div class="gallery-slide active" 160 style="background-image: url('<?php echo esc_url(get_the_post_thumbnail_url($property_id, 'large')); ?>')"> 161 </div> 162 163 <div class="gallery-counter">1/1</div> 164 <div class="transition-indicator"></div> 165 166 <div class="gallery-controls"> 167 <button class="gallery-btn prev-btn"> 168 <i class="fas fa-chevron-left"></i> 169 </button> 170 <button class="gallery-btn next-btn"> 171 <i class="fas fa-chevron-right"></i> 172 </button> 173 </div> 174 </div> 175 176 <div class="thumbnail-container"> 177 <div class="property-thumbnail active" data-index="0" 178 style="background-image: url('<?php echo esc_url(get_the_post_thumbnail_url($property_id, 'thumbnail')); ?>')"> 179 </div> 180 </div> 181 182 <?php else : ?> 183 <div class="gallery-main"> 184 <div class="gallery-slide active" 185 style="background-image: url('<?php echo esc_url(HVNLY_PROPERTY_URL . 'public/assets/img/no-thumb.png'); ?>')"> 186 </div> 187 <div class="gallery-counter">0/0</div> 188 </div> 189 <?php endif; ?> 190 </div> 191 192 <!-- Property Header --> 193 <div class="property-header"> 194 <div> 195 <h1 class="property-title"><?php the_title(); ?></h1> 196 <div class="property-address"> 197 <i class="fas fa-map-marker-alt"></i> 198 <?php echo esc_html($address); ?> 199 </div> 200 <div class="property-uptodate"> 201 <i class="fas fa-calendar"></i> 202 <?php 192 <!-- Property Header --> 193 <div class="property-header"> 194 <div> 195 <h1 class="property-title"><?php the_title(); ?></h1> 196 <div class="property-address"> 197 <i class="fas fa-map-marker-alt"></i> 198 <?php echo esc_html($address); ?> 199 </div> 200 <div class="property-uptodate"> 201 <i class="fas fa-calendar"></i> 202 <?php 203 203 $updated_time = get_the_modified_time('U'); // Get UNIX timestamp 204 204 $current_time = current_time('timestamp'); // Current timestamp according to WordPress time zone … … 212 212 } 213 213 ?> 214 </div> 215 216 214 217 </div> 215 218 216 219 220 <div class="property-price"> 221 <?php echo esc_html($currency_symbol); ?> <?php echo esc_html($price); ?> 222 </div> 223 224 217 225 </div> 218 226 219 227 220 <div class="property-price"> 221 <?php echo esc_html($currency_symbol); ?> <?php echo esc_html($price); ?> 222 </div> 223 224 225 </div> 226 227 228 229 <div class="row"> 230 <div class="col-lg-8"> 231 232 <!-- Property Overview --> 233 <div class="property-details-card"> 234 <h2 class="section-title">Overview</h2> 235 236 <div class="row"> 237 <div class="col-lg-4 col-md-6"> 238 239 <?php if ($bedrooms) : ?> 240 <div class="detail-item"> 241 <div class="detail-icon"> 242 <i class="fas fa-bed"></i> 243 </div> 244 <div class="detail-content"> 245 <h4><?php esc_html_e('Bedrooms', 'havenlytics'); ?></h4> 246 <p><?php echo esc_html($bedrooms); ?></p> 247 </div> 228 229 <div class="row"> 230 <div class="col-lg-8"> 231 232 <!-- Property Overview --> 233 <div class="property-details-card"> 234 <h2 class="section-title">Overview</h2> 235 236 <div class="row"> 237 <div class="col-lg-4 col-md-6"> 238 239 <?php if ($bedrooms) : ?> 240 <div class="detail-item"> 241 <div class="detail-icon"> 242 <i class="fas fa-bed"></i> 243 </div> 244 <div class="detail-content"> 245 <h4><?php esc_html_e('Bedrooms', 'havenlytics'); ?></h4> 246 <p><?php echo esc_html($bedrooms); ?></p> 247 </div> 248 </div> 249 <?php endif; ?> 250 251 <?php if ($sqft) : ?> 252 <div class="detail-item"> 253 <div class="detail-icon"> 254 <i class="fas fa-ruler-combined"></i> 255 </div> 256 <div class="detail-content"> 257 <h4> 258 <?php esc_html_e('Square Feet', 'havenlytics'); ?></h4> 259 <p> <?php echo esc_html($sqft); ?> 260 <?php esc_html_e('sqft', 'havenlytics'); ?> 261 </p> 262 </div> 263 </div> 264 <?php endif; ?> 265 <?php if ($year_built) : ?> 266 <div class="detail-item"> 267 <div class="detail-icon"> 268 <i class="fas fa-calendar-alt"></i> 269 </div> 270 <div class="detail-content"> 271 <h4><?php esc_html_e('Year Built', 'havenlytics'); ?></h4> 272 <p><?php echo esc_html($year_built); ?></p> 273 </div> 274 </div> 275 <?php endif; ?> 248 276 </div> 249 <?php endif; ?> 250 251 <?php if ($sqft) : ?> 252 <div class="detail-item"> 253 <div class="detail-icon"> 254 <i class="fas fa-ruler-combined"></i> 255 </div> 256 <div class="detail-content"> 257 <h4> 258 <?php esc_html_e('Square Feet', 'havenlytics'); ?></h4> 259 <p> <?php echo esc_html($sqft); ?> 260 <?php esc_html_e('sqft', 'havenlytics'); ?> 261 </p> 262 </div> 277 278 <div class="col-lg-4 col-md-6"> 279 <?php if ($bathrooms) : ?> 280 <div class="detail-item"> 281 <div class="detail-icon"> 282 <i class="fas fa-bath"></i> 283 </div> 284 <div class="detail-content"> 285 <h4><?php esc_html_e('Bathrooms', 'havenlytics'); ?></h4> 286 <p><?php echo esc_html($bathrooms); ?></p> 287 </div> 288 </div> 289 <?php endif; ?> 290 <?php if ($lot_size) : ?> 291 <div class="detail-item"> 292 <div class="detail-icon"> 293 <i class="fas fa-vector-square"></i> 294 </div> 295 <div class="detail-content"> 296 <h4><?php esc_html_e('Lot Size', 'havenlytics'); ?></h4> 297 <p><?php echo esc_html($lot_size); ?> acres</p> 298 </div> 299 </div> 300 <?php endif; ?> 301 <?php if ($garage) : ?> 302 <div class="detail-item"> 303 <div class="detail-icon"> 304 <i class="fas fa-car"></i> 305 </div> 306 <div class="detail-content"> 307 <h4><?php esc_html_e('Garage', 'havenlytics'); ?></h4> 308 <p><?php echo esc_html($garage); ?> 309 car<?php echo esc_html($garage > 1 ? 's' : ''); ?></p> 310 </div> 311 </div> 312 <?php endif; ?> 263 313 </div> 264 <?php endif; ?> 265 <?php if ($year_built) : ?> 266 <div class="detail-item"> 267 <div class="detail-icon"> 268 <i class="fas fa-calendar-alt"></i> 269 </div> 270 <div class="detail-content"> 271 <h4><?php esc_html_e('Year Built', 'havenlytics'); ?></h4> 272 <p><?php echo esc_html($year_built); ?></p> 273 </div> 314 315 <div class="col-lg-4 col-md-6"> 316 <?php if ($tax_amount) : ?> 317 <div class="detail-item"> 318 <div class="detail-icon"> 319 <i class="fas fa-dollar-sign"></i> 320 </div> 321 <div class="detail-content"> 322 <h4><?php esc_html_e('Annual Tax', 'havenlytics'); ?></h4> 323 <p><?php echo esc_html($currency_symbol); ?> 324 <?php echo esc_html($tax_amount); ?></p> 325 </div> 326 </div> 327 <?php endif; ?> 328 <?php if ($rating) : ?> 329 <div class="detail-item"> 330 <div class="detail-icon"> 331 <i class="fas fa-star"></i> 332 </div> 333 <div class="detail-content"> 334 <h4><?php esc_html_e('Rating', 'havenlytics'); ?></h4> 335 <p><?php echo esc_html($rating); ?> / 5</p> 336 </div> 337 </div> 338 <?php endif; ?> 339 274 340 </div> 275 <?php endif; ?> 276 </div> 277 278 <div class="col-lg-4 col-md-6"> 279 <?php if ($bathrooms) : ?> 280 <div class="detail-item"> 281 <div class="detail-icon"> 282 <i class="fas fa-bath"></i> 283 </div> 284 <div class="detail-content"> 285 <h4><?php esc_html_e('Bathrooms', 'havenlytics'); ?></h4> 286 <p><?php echo esc_html($bathrooms); ?></p> 287 </div> 341 </div> 342 </div> 343 344 <?php if ($short_description) : ?> 345 <!-- Property Summary --> 346 <div class="property-details-card"> 347 <h2 class="section-title">Property Summary</h2> 348 <p class="property-description"> 349 <?php echo esc_html($short_description); ?> 350 </p> 351 352 </div> 353 <?php endif; ?> 354 <!-- Property Details --> 355 <div class="property-details-card"> 356 <h2 class="section-title">Property Details</h2> 357 <div class="property-description"> 358 <?php the_content(); ?> 359 </div> 360 361 </div> 362 363 364 365 366 <?php if (!empty(array_filter($features))) : ?> 367 <!-- Features Section --> 368 <div class="property-details-card"> 369 <h2 class="section-title"><?php esc_html_e('Features & Amenities', 'havenlytics'); ?></h2> 370 <div class="features-grid"> 371 <?php foreach ($features as $feature => $value) : 372 if ($value) : ?> 373 374 <div class="feature-item"> 375 <i class="fas fa-check-circle"></i> 376 <span><?php echo esc_html(ucfirst(str_replace('_', ' ', $feature))); ?></span> 377 </div> 378 <?php endif; 379 endforeach; ?> 288 380 </div> 289 <?php endif; ?> 290 <?php if ($lot_size) : ?> 291 <div class="detail-item"> 292 <div class="detail-icon"> 293 <i class="fas fa-vector-square"></i> 294 </div> 295 <div class="detail-content"> 296 <h4><?php esc_html_e('Lot Size', 'havenlytics'); ?></h4> 297 <p><?php echo esc_html($lot_size); ?> acres</p> 298 </div> 299 </div> 300 <?php endif; ?> 301 <?php if ($garage) : ?> 302 <div class="detail-item"> 303 <div class="detail-icon"> 304 <i class="fas fa-car"></i> 305 </div> 306 <div class="detail-content"> 307 <h4><?php esc_html_e('Garage', 'havenlytics'); ?></h4> 308 <p><?php echo esc_html($garage); ?> 309 car<?php echo esc_html($garage > 1 ? 's' : ''); ?></p> 310 </div> 311 </div> 312 <?php endif; ?> 313 </div> 314 315 <div class="col-lg-4 col-md-6"> 316 <?php if ($tax_amount) : ?> 317 <div class="detail-item"> 318 <div class="detail-icon"> 319 <i class="fas fa-dollar-sign"></i> 320 </div> 321 <div class="detail-content"> 322 <h4><?php esc_html_e('Annual Tax', 'havenlytics'); ?></h4> 323 <p><?php echo esc_html($currency_symbol); ?> 324 <?php echo esc_html($tax_amount); ?></p> 325 </div> 326 </div> 327 <?php endif; ?> 328 <?php if ($rating) : ?> 329 <div class="detail-item"> 330 <div class="detail-icon"> 331 <i class="fas fa-star"></i> 332 </div> 333 <div class="detail-content"> 334 <h4><?php esc_html_e('Rating', 'havenlytics'); ?></h4> 335 <p><?php echo esc_html($rating); ?> / 5</p> 336 </div> 337 </div> 338 <?php endif; ?> 339 340 </div> 341 </div> 342 </div> 343 344 <?php if ($short_description) : ?> 345 <!-- Property Summary --> 346 <div class="property-details-card"> 347 <h2 class="section-title">Property Summary</h2> 348 <p class="property-description"> 349 <?php echo esc_html($short_description); ?> 350 </p> 351 352 </div> 353 <?php endif; ?> 354 <!-- Property Details --> 355 <div class="property-details-card"> 356 <h2 class="section-title">Property Details</h2> 357 <div class="property-description"> 358 <?php the_content(); ?> 359 </div> 360 361 </div> 362 363 364 365 366 <?php if (!empty(array_filter($features))) : ?> 367 <!-- Features Section --> 368 <div class="property-details-card"> 369 <h2 class="section-title"><?php esc_html_e('Features & Amenities', 'havenlytics'); ?></h2> 370 <div class="features-grid"> 371 <?php foreach ($features as $feature => $value) : 372 if ($value) : ?> 373 374 <div class="feature-item"> 375 <i class="fas fa-check-circle"></i> 376 <span><?php echo esc_html(ucfirst(str_replace('_', ' ', $feature))); ?></span> 377 </div> 378 <?php endif; 379 endforeach; ?> 380 </div> 381 </div> 382 <?php endif; ?> 383 <!-- Floor Plans --> 384 385 386 <!-- Video --> 387 <div class="property-details-card"> 388 <div class="property-video-card"> 389 <h2 class="section-title"><?php esc_html_e('Property Video', 'havenlytics'); ?></h2> 390 391 <div class="video-container"> 392 <?php 381 </div> 382 <?php endif; ?> 383 <!-- Floor Plans --> 384 385 386 <!-- Video --> 387 <div class="property-details-card"> 388 <div class="property-video-card"> 389 <h2 class="section-title"><?php esc_html_e('Property Video', 'havenlytics'); ?></h2> 390 391 <div class="video-container"> 392 <?php 393 393 // Get selected video type 394 394 $video_type = get_post_meta(get_the_ID(), '_havenlytics_property_video_type', true); … … 414 414 ?> 415 415 416 <?php if (!empty($video_url)) : ?> 417 <div class="video-wrapper"> 418 <div class="video-thumbnail"> 419 <img src="<?php echo esc_url($thumbnail_url); ?>" 420 alt="Property Video Thumbnail"> 421 422 <div class="havenlytics_property_video-btn-main"> 423 <div class="havenlytics_property_video-play-button" id="play-button" 424 data-video-url="<?php echo esc_url($video_url); ?>" 425 data-video-type="<?php echo esc_attr($video_type); ?>"> 426 <div class="havenlytics_property_video-icon"></div> 427 <div class="havenlytics_property_video-pulse-ring"></div> 428 </div> 429 </div> 416 <?php if (!empty($video_url)) : ?> 417 <div class="video-wrapper"> 418 <div class="video-thumbnail"> 419 <img src="<?php echo esc_url($thumbnail_url); ?>" 420 alt="Property Video Thumbnail"> 421 422 <div class="havenlytics_property_video-btn-main"> 423 <div class="havenlytics_property_video-play-button" id="play-button" 424 data-video-url="<?php echo esc_url($video_url); ?>" 425 data-video-type="<?php echo esc_attr($video_type); ?>"> 426 <div class="havenlytics_property_video-icon"></div> 427 <div class="havenlytics_property_video-pulse-ring"></div> 428 </div> 429 </div> 430 </div> 431 </div> 432 433 <!-- Video Popup --> 434 <div class="havenlytics_property_video-overlay"> 435 <div class="havenlytics_property_video-spinner"></div> 436 <div class="havenlytics_property_video-container"> 437 <div class="havenlytics_property_video-close"> 438 <i class="fas fa-times"></i> 439 </div> 440 <div class="havenlytics_property_video-player" id="video-player"></div> 441 </div> 442 </div> 443 <?php else : ?> 444 <p><?php esc_html_e('No video available for this property.', 'havenlytics'); ?></p> 445 <?php endif; ?> 446 </div> 447 </div> 448 </div> 449 450 451 452 <?php if ($latitude && $longitude) : ?> 453 <!-- Location Map --> 454 <div class="property-details-card"> 455 <h2 class="section-title"><?php esc_html_e('Property Location', 'havenlytics'); ?></h2> 456 457 <div class="map-container"> 458 <div id="havenlytics-property-map" data-lat="<?php echo esc_attr($latitude); ?>" 459 data-lng="<?php echo esc_attr($longitude); ?>" 460 style="height: 400px; width: 100%; background: #f5f5f5;"> 430 461 </div> 431 </div> 432 433 <!-- Video Popup --> 434 <div class="havenlytics_property_video-overlay"> 435 <div class="havenlytics_property_video-spinner"></div> 436 <div class="havenlytics_property_video-container"> 437 <div class="havenlytics_property_video-close"> 438 <i class="fas fa-times"></i> 439 </div> 440 <div class="havenlytics_property_video-player" id="video-player"></div> 441 </div> 442 </div> 443 <?php else : ?> 444 <p><?php esc_html_e('No video available for this property.', 'havenlytics'); ?></p> 445 <?php endif; ?> 446 </div> 447 </div> 448 </div> 449 450 451 452 <?php if ($latitude && $longitude) : ?> 453 <!-- Location Map --> 454 <div class="property-details-card"> 455 <h2 class="section-title"><?php esc_html_e('Property Location', 'havenlytics'); ?></h2> 456 457 <div class="map-container"> 458 <div id="havenlytics-property-map" data-lat="<?php echo esc_attr($latitude); ?>" 459 data-lng="<?php echo esc_attr($longitude); ?>" 460 style="height: 400px; width: 100%; background: #f5f5f5;"> 461 </div> 462 <!-- <div class="map-overlay"> 462 <!-- <div class="map-overlay"> 463 463 464 464 <h3>Neighborhood Information</h3> … … 470 470 </div> --> 471 471 472 </div>473 </div>474 <?php endif; ?>475 <!-- Popup Gallery -->476 <div class="property-details-card">477 <h2 class="section-title">Property Gallery</h2>478 <div class="row">479 <div class="col-md-12 mb-4">480 <div class="havenlytics_gallery_fancybox_gallery">481 <?php if (!empty($gallery_images)) : ?>482 <?php foreach ($gallery_images as $index => $image_id) :472 </div> 473 </div> 474 <?php endif; ?> 475 <!-- Popup Gallery --> 476 <div class="property-details-card"> 477 <h2 class="section-title">Property Gallery</h2> 478 <div class="row"> 479 <div class="col-md-12 mb-4"> 480 <div class="havenlytics_gallery_fancybox_gallery"> 481 <?php if (!empty($gallery_images)) : ?> 482 <?php foreach ($gallery_images as $index => $image_id) : 483 483 $thumb_url = wp_get_attachment_image_url($image_id, 'medium'); 484 484 $large_url = wp_get_attachment_image_url($image_id, 'large'); … … 487 487 $animation_delay = 0.2 + ($index * 0.1); // optional animated delay 488 488 ?> 489 <div class="havenlytics_gallery_fancybox_gallery-item havenlytics_gallery_fancybox_floating" 490 style="animation-delay: <?php echo esc_attr(number_format($animation_delay, 1)); ?>s;" 491 data-button-title="<?php the_title(); ?>" 492 data-button-link="<?php echo esc_url(get_permalink($property_id)); ?>"> 493 <img src="<?php echo esc_url($thumb_url); ?>" 494 data-large="<?php echo esc_url($large_url); ?>" 495 alt="<?php echo esc_attr($alt_text ? $alt_text : $title_text); ?>"> 496 <div class="havenlytics_gallery_fancybox_gallery-caption"> 497 <?php echo esc_html($title_text); ?> 498 </div> 489 <div class="havenlytics_gallery_fancybox_gallery-item havenlytics_gallery_fancybox_floating" 490 style="animation-delay: <?php echo esc_attr(number_format($animation_delay, 1)); ?>s;" 491 data-button-title="<?php the_title(); ?>" 492 data-button-link="<?php echo esc_url(get_permalink($property_id)); ?>"> 493 <img src="<?php echo esc_url($thumb_url); ?>" 494 data-large="<?php echo esc_url($large_url); ?>" 495 alt="<?php echo esc_attr($alt_text ? $alt_text : $title_text); ?>"> 496 <div class="havenlytics_gallery_fancybox_gallery-caption"> 497 <?php echo esc_html($title_text); ?> 498 </div> 499 </div> 500 <?php endforeach; ?> 501 <?php else : ?> 502 <p><?php esc_html_e('No gallery images found.', 'havenlytics'); ?></p> 503 <?php endif; ?> 499 504 </div> 500 <?php endforeach; ?> 501 <?php else : ?> 502 <p><?php esc_html_e('No gallery images found.', 'havenlytics'); ?></p> 503 <?php endif; ?> 505 506 <!-- Heavenlytics FancyBox Structure --> 507 <div class="havenlytics_gallery_fancybox_fancybox"> 508 <span class="havenlytics_gallery_fancybox_fancybox_close"><i 509 class="fas fa-times"></i></span> 510 <span 511 class="havenlytics_gallery_fancybox_fancybox_nav havenlytics_gallery_fancybox_fancybox_prev"><i 512 class="fas fa-chevron-left"></i></span> 513 <span 514 class="havenlytics_gallery_fancybox_fancybox_nav havenlytics_gallery_fancybox_fancybox_next"><i 515 class="fas fa-chevron-right"></i></span> 516 <div class="havenlytics_gallery_fancybox_fancybox_counter">1 / 8</div> 517 518 <div class="havenlytics_gallery_fancybox_fancybox_content"> 519 <div class="havenlytics_gallery_fancybox_fancybox_main"> 520 <div class="havenlytics_gallery_fancybox_fancybox_img_wrap"> 521 <img class="havenlytics_gallery_fancybox_fancybox_img" src="" alt=""> 522 </div> 523 <div class="havenlytics_gallery_fancybox_fancybox_caption"></div> 524 <div class="havenlytics_gallery_fancybox_fancybox_property"> 525 <a href="#" class="havenlytics_gallery_fancybox_property_button" 526 target="_blank"> 527 View Property Details <i class="fas fa-arrow-right"></i> 528 </a> 529 </div> 530 </div> 531 <div class="havenlytics_gallery_fancybox_fancybox_sidebar"> 532 <div class="havenlytics_gallery_fancybox_fancybox_thumbnails"></div> 533 </div> 534 </div> 535 </div> 536 <!-- Heavenlytics FancyBox Structure --> 504 537 </div> 505 538 506 <!-- Heavenlytics FancyBox Structure --> 507 <div class="havenlytics_gallery_fancybox_fancybox"> 508 <span class="havenlytics_gallery_fancybox_fancybox_close"><i 509 class="fas fa-times"></i></span> 510 <span 511 class="havenlytics_gallery_fancybox_fancybox_nav havenlytics_gallery_fancybox_fancybox_prev"><i 512 class="fas fa-chevron-left"></i></span> 513 <span 514 class="havenlytics_gallery_fancybox_fancybox_nav havenlytics_gallery_fancybox_fancybox_next"><i 515 class="fas fa-chevron-right"></i></span> 516 <div class="havenlytics_gallery_fancybox_fancybox_counter">1 / 8</div> 517 518 <div class="havenlytics_gallery_fancybox_fancybox_content"> 519 <div class="havenlytics_gallery_fancybox_fancybox_main"> 520 <div class="havenlytics_gallery_fancybox_fancybox_img_wrap"> 521 <img class="havenlytics_gallery_fancybox_fancybox_img" src="" alt=""> 522 </div> 523 <div class="havenlytics_gallery_fancybox_fancybox_caption"></div> 524 <div class="havenlytics_gallery_fancybox_fancybox_property"> 525 <a href="#" class="havenlytics_gallery_fancybox_property_button" 526 target="_blank"> 527 View Property Details <i class="fas fa-arrow-right"></i> 528 </a> 529 </div> 530 </div> 531 <div class="havenlytics_gallery_fancybox_fancybox_sidebar"> 532 <div class="havenlytics_gallery_fancybox_fancybox_thumbnails"></div> 533 </div> 534 </div> 535 </div> 536 <!-- Heavenlytics FancyBox Structure --> 537 </div> 538 539 540 </div> 539 540 </div> 541 </div> 542 543 541 544 </div> 542 545 543 544 </div> 545 546 <!-- Sidebar --> 547 <div class="col-lg-4"> 548 <div class="havenlytics_sticky_sidebar"> 549 <!-- Amenities Section --> 550 <div class="property-details-card"> 551 <h2 class="section-title">Property Amenities</h2> 552 <div class="havenlytics-amenities-grid"> 553 <?php 546 <!-- Sidebar --> 547 <div class="col-lg-4"> 548 <div class="havenlytics_sticky_sidebar"> 549 <!-- Amenities Section --> 550 <div class="property-details-card"> 551 <h2 class="section-title">Property Amenities</h2> 552 <div class="havenlytics-amenities-grid"> 553 <?php 554 554 $post_id = get_the_ID(); 555 555 556 556 if (get_post_meta($post_id, '_havenlytics_property_book_property', true)) : 557 557 ?> 558 <div class="havenlytics-amenity-card havenlytics-popup-trigger" data-popup="enquiry"> 559 <div class="havenlytics-amenity-icon"> 560 <i class="fas fa-calendar"></i> 561 </div> 562 <h4>Book Property</h4> 558 <div class="havenlytics-amenity-card havenlytics-popup-trigger" data-popup="enquiry"> 559 <div class="havenlytics-amenity-icon"> 560 <i class="fas fa-calendar"></i> 561 </div> 562 <h4>Book Property</h4> 563 </div> 564 <?php endif; ?> 565 566 <?php if (get_post_meta($post_id, '_havenlytics_property_virtual_tour', true)) : ?> 567 <div class="havenlytics-amenity-card havenlytics-popup-trigger" 568 data-popup="virtualTour"> 569 <div class="havenlytics-amenity-icon"> 570 <i class="fas fa-vr-cardboard"></i> 571 </div> 572 <h4>Virtual Tour</h4> 573 </div> 574 <?php endif; ?> 575 576 <?php if (get_post_meta($post_id, '_havenlytics_property_floorplan_img', true)) : ?> 577 <div class="havenlytics-amenity-card havenlytics-popup-trigger" data-popup="floorplan"> 578 <div class="havenlytics-amenity-icon"> 579 <i class="fas fa-vector-square"></i> 580 </div> 581 <h4>Floorplan</h4> 582 </div> 583 <?php endif; ?> 584 585 <?php if (get_post_meta($post_id, '_havenlytics_property_brochure_pdf', true)) : ?> 586 <div class="havenlytics-amenity-card havenlytics-popup-trigger" data-popup="brochure"> 587 <div class="havenlytics-amenity-icon"> 588 <i class="fas fa-file-alt"></i> 589 </div> 590 <h4>View Brochure</h4> 591 </div> 592 <?php endif; ?> 593 594 <?php if (get_post_meta($post_id, '_havenlytics_property_epc_pdf', true)) : ?> 595 <div class="havenlytics-amenity-card havenlytics-popup-trigger" data-popup="epc"> 596 <div class="havenlytics-amenity-icon"> 597 <i class="fas fa-clipboard"></i> 598 </div> 599 <h4>View Epc</h4> 600 </div> 601 <?php endif; ?> 602 603 <?php if (get_post_meta($post_id, '_havenlytics_property_map_url', true)) : ?> 604 <div class="havenlytics-amenity-card havenlytics-popup-trigger" data-popup="map"> 605 <div class="havenlytics-amenity-icon"> 606 <i class="fas fa-map-marked-alt"></i> 607 </div> 608 <h4>Map</h4> 609 </div> 610 <?php endif; ?> 611 612 <?php if (get_post_meta($post_id, '_havenlytics_property_request_call', true)) : ?> 613 <div class="havenlytics-amenity-card havenlytics-popup-trigger" data-popup="agent"> 614 <div class="havenlytics-amenity-icon"> 615 <i class="fas fa-phone-alt"></i> 616 </div> 617 <h4>Request Call Back</h4> 618 </div> 619 <?php endif; ?> 620 621 <?php if (get_post_meta($post_id, '_havenlytics_property_arrange_view', true)) : ?> 622 <div class="havenlytics-amenity-card havenlytics-popup-trigger" data-popup="viewing"> 623 <div class="havenlytics-amenity-icon"> 624 <i class="fas fa-calendar-check"></i> 625 </div> 626 <h4>Arrange Viewing</h4> 627 </div> 628 <?php endif; ?> 563 629 </div> 564 <?php endif; ?> 565 566 <?php if (get_post_meta($post_id, '_havenlytics_property_virtual_tour', true)) : ?> 567 <div class="havenlytics-amenity-card havenlytics-popup-trigger" 568 data-popup="virtualTour"> 569 <div class="havenlytics-amenity-icon"> 570 <i class="fas fa-vr-cardboard"></i> 571 </div> 572 <h4>Virtual Tour</h4> 573 </div> 574 <?php endif; ?> 575 576 <?php if (get_post_meta($post_id, '_havenlytics_property_floorplan_img', true)) : ?> 577 <div class="havenlytics-amenity-card havenlytics-popup-trigger" data-popup="floorplan"> 578 <div class="havenlytics-amenity-icon"> 579 <i class="fas fa-vector-square"></i> 580 </div> 581 <h4>Floorplan</h4> 582 </div> 583 <?php endif; ?> 584 585 <?php if (get_post_meta($post_id, '_havenlytics_property_brochure_pdf', true)) : ?> 586 <div class="havenlytics-amenity-card havenlytics-popup-trigger" data-popup="brochure"> 587 <div class="havenlytics-amenity-icon"> 588 <i class="fas fa-file-alt"></i> 589 </div> 590 <h4>View Brochure</h4> 591 </div> 592 <?php endif; ?> 593 594 <?php if (get_post_meta($post_id, '_havenlytics_property_epc_pdf', true)) : ?> 595 <div class="havenlytics-amenity-card havenlytics-popup-trigger" data-popup="epc"> 596 <div class="havenlytics-amenity-icon"> 597 <i class="fas fa-clipboard"></i> 598 </div> 599 <h4>View Epc</h4> 600 </div> 601 <?php endif; ?> 602 603 <?php if (get_post_meta($post_id, '_havenlytics_property_map_url', true)) : ?> 604 <div class="havenlytics-amenity-card havenlytics-popup-trigger" data-popup="map"> 605 <div class="havenlytics-amenity-icon"> 606 <i class="fas fa-map-marked-alt"></i> 607 </div> 608 <h4>Map</h4> 609 </div> 610 <?php endif; ?> 611 612 <?php if (get_post_meta($post_id, '_havenlytics_property_request_call', true)) : ?> 613 <div class="havenlytics-amenity-card havenlytics-popup-trigger" data-popup="agent"> 614 <div class="havenlytics-amenity-icon"> 615 <i class="fas fa-phone-alt"></i> 616 </div> 617 <h4>Request Call Back</h4> 618 </div> 619 <?php endif; ?> 620 621 <?php if (get_post_meta($post_id, '_havenlytics_property_arrange_view', true)) : ?> 622 <div class="havenlytics-amenity-card havenlytics-popup-trigger" data-popup="viewing"> 623 <div class="havenlytics-amenity-icon"> 624 <i class="fas fa-calendar-check"></i> 625 </div> 626 <h4>Arrange Viewing</h4> 627 </div> 628 <?php endif; ?> 629 </div> 630 631 </div> 632 <?php 630 631 </div> 632 <?php 633 633 // Get the custom meta field value 634 634 $featured_property = get_post_meta(get_the_ID(), '_havenlytics_property_featured_item', true); … … 637 637 if (!empty($featured_property)) : 638 638 ?> 639 <!-- Featured Property-->640 <div class="property-details-card">641 642 <h2 class="section-title">Featured Property</h2>643 644 <div class="havenlytics_featured_items-widget">645 <div class="havenlytics_carousel-container">646 <div class="owl-carousel owl-theme havenlytics_carousel">647 648 <?php639 <!-- Featured Property--> 640 <div class="property-details-card"> 641 642 <h2 class="section-title">Featured Property</h2> 643 644 <div class="havenlytics_featured_items-widget"> 645 <div class="havenlytics_carousel-container"> 646 <div class="owl-carousel owl-theme havenlytics_carousel"> 647 648 <?php 649 649 // Query only featured properties 650 650 $args = array( … … 717 717 ?> 718 718 719 <!-- Property 1-->720 <div class="havenlytics_property item">721 <div class="havenlytics_image">722 <?php if (has_post_thumbnail()) : ?>723 <?php the_post_thumbnail('havenlytics-property-related-thumb', array('class' => 'img-fluid', 'alt' => esc_attr(get_the_title()))); ?>724 <?php else : ?>725 <img src="<?php echo esc_url(HVNLY_PROPERTY_URL . 'public/assets/img/video-placeholder.png'); ?>"726 alt="<?php esc_attr_e('Property Image', 'havenlytics'); ?>"727 class="img-fluid" />728 <?php endif; ?>729 <?php if (! empty($status_badge)) : ?>730 <div class="havenlytics_badge"><?php echo esc_html($status_badge); ?>731 </div>732 <?php endif; ?>733 </div>734 <div class="havenlytics_details">735 <?php if ($price) : ?>736 <div class="havenlytics_price">737 <?php echo esc_html($currency_symbol . $price); ?></div>738 <?php endif; ?>739 <div class="havenlytics_title">740 <a href="<?php the_permalink(); ?>">741 <?php echo esc_html(wp_trim_words(get_the_title(), 8, '...')); ?>742 </a>743 </div>744 <?php if ($address) : ?>745 <div class="havenlytics_address">746 <i class="fas fa-map-marker-alt"></i>747 <?php echo esc_html($address); ?>748 </div>749 <?php endif; ?>750 <div class="havenlytics_features">751 <?php if ($bedrooms) : ?>752 753 754 755 <div class="havenlytics_feature">756 <!-- Bedrooms SVG -->757 <svg fill="#6C60FE" width="20px" height="20px"758 viewBox="0 -11.47 122.88 122.88" version="1.1" id="Layer_1"759 xmlns="http://www.w3.org/2000/svg"760 xmlns:xlink="http://www.w3.org/1999/xlink"761 style="enable-background:new 0 0 122.88 99.94"762 xml:space="preserve">763 <g id="SVGRepo_bgCarrier" stroke-width="0"></g>764 <g id="SVGRepo_tracerCarrier" stroke-linecap="round"765 stroke-linejoin="round"></g>766 <g id="SVGRepo_iconCarrier">767 <g>768 <path769 d="M4.22,67.36h114.31v-4.67c0-1.13-0.22-2.18-0.61-3.12c-0.42-1-1.04-1.89-1.81-2.66c-0.47-0.47-1-0.9-1.57-1.28 c-0.58-0.39-1.2-0.73-1.85-1.02c-1.75-0.38-3.49-0.74-5.22-1.08c-1.74-0.34-3.49-0.66-5.25-0.96c-0.08-0.01-0.14-0.02-0.22-0.04 c-0.89-0.15-1.74-0.29-2.55-0.42c-0.81-0.13-1.67-0.26-2.57-0.4l-0.02,0c-6.12-0.78-12.22-1.38-18.31-1.78 c-6.1-0.4-12.17-0.6-18.2-0.61c-3.58,0-7.15,0.06-10.72,0.2c-3.55,0.14-7.12,0.34-10.69,0.62l-0.02,0 c-3.34,0.31-6.67,0.7-10.01,1.15c-3.33,0.45-6.67,0.98-10.03,1.57l-0.37,0.09c-0.07,0.02-0.14,0.03-0.2,0.03 c-0.06,0.01-0.12,0.01-0.18,0.01c-1.57,0.28-3.18,0.59-4.84,0.92c-1.61,0.32-3.22,0.66-4.82,1.01c-0.4,0.22-0.78,0.47-1.14,0.73 c-0.36,0.27-0.71,0.56-1.02,0.87v0c-0.67,0.67-1.2,1.44-1.56,2.3c-0.34,0.81-0.53,1.71-0.53,2.69V67.36L4.22,67.36z M14.2,0h92.99 c1.21,0,2.37,0.24,3.43,0.68c1.1,0.46,2.09,1.13,2.92,1.95c0.83,0.83,1.5,1.82,1.95,2.92c0.44,1.06,0.68,2.22,0.68,3.43v42.69 c0.51,0.3,1.01,0.63,1.47,0.99c0.52,0.4,1.01,0.82,1.46,1.27c1.16,1.16,2.1,2.51,2.73,4.03c0.6,1.43,0.93,3.02,0.93,4.74v6.09 c0.03,0.1,0.06,0.2,0.08,0.3l0,0.02c0.02,0.13,0.03,0.25,0.03,0.37c0,0.13-0.01,0.26-0.04,0.39l0,0c-0.02,0.1-0.05,0.2-0.08,0.3 v27.66c0,0.58-0.24,1.11-0.62,1.49c-0.38,0.38-0.91,0.62-1.49,0.62h-4.35c-0.49,0-0.94-0.17-1.3-0.45 c-0.36-0.28-0.63-0.68-0.74-1.14c-0.8-2.3-1.61-4.12-2.48-5.54c-0.86-1.4-1.78-2.4-2.84-3.11c-1.07-0.71-2.35-1.16-3.9-1.43 c-1.58-0.28-3.42-0.37-5.61-0.36l-79.76,0.1l-0.04,0c-1.57-0.03-2.86,0.17-3.94,0.59c-1.07,0.42-1.94,1.05-2.66,1.86 c-0.81,0.9-1.49,2.05-2.11,3.39c-0.63,1.37-1.2,2.93-1.77,4.64l0,0c-0.14,0.44-0.42,0.79-0.77,1.04c-0.33,0.24-0.73,0.38-1.14,0.4 c-0.03,0.01-0.06,0.01-0.09,0.01H2.11c-0.58,0-1.11-0.24-1.49-0.62C0.24,98.94,0,98.41,0,97.83V61.52c0-1.57,0.3-3.01,0.84-4.31 c0.58-1.38,1.43-2.61,2.49-3.67c0.3-0.3,0.63-0.6,0.98-0.88c0.3-0.24,0.6-0.47,0.92-0.68V8.89c0-1.21,0.24-2.36,0.68-3.4 c0.46-1.09,1.13-2.07,1.96-2.89c0.83-0.82,1.82-1.47,2.91-1.92C11.84,0.24,12.99,0,14.2,0L14.2,0z M107.19,4.22H14.2 c-0.65,0-1.27,0.13-1.84,0.36c-0.59,0.24-1.11,0.59-1.55,1.02c-0.43,0.42-0.78,0.94-1.02,1.5C9.57,7.65,9.45,8.25,9.45,8.89v41.06 c0.3-0.1,0.6-0.18,0.91-0.26c0.49-0.13,0.98-0.24,1.47-0.32c0.68-0.12,1.42-0.25,2.22-0.39c0.6-0.1,1.24-0.21,1.9-0.31V38.19 c0-1.58,0.32-3.09,0.89-4.47c0.6-1.44,1.47-2.73,2.55-3.81c1.08-1.08,2.37-1.95,3.81-2.55c1.38-0.57,2.89-0.89,4.47-0.89h19.82 c1.58,0,3.09,0.32,4.47,0.89c1.44,0.6,2.73,1.47,3.81,2.55c1.08,1.08,1.95,2.37,2.55,3.81c0.57,1.38,0.89,2.89,0.89,4.47v6.69 c0.7-0.01,1.4-0.01,2.11-0.01v-6.68c0-1.58,0.32-3.09,0.89-4.47c0.6-1.44,1.47-2.73,2.55-3.81c1.08-1.08,2.37-1.95,3.81-2.55 c1.38-0.57,2.89-0.89,4.47-0.89h19.82c1.58,0,3.09,0.32,4.47,0.89c1.44,0.6,2.73,1.47,3.81,2.55c1.08,1.08,1.95,2.37,2.55,3.81 c0.57,1.38,0.89,2.89,0.89,4.47v10.34c0.75,0.11,1.55,0.24,2.41,0.38c0.95,0.15,1.86,0.3,2.74,0.45c0.45,0.08,0.91,0.17,1.37,0.28 c0.29,0.07,0.57,0.14,0.84,0.22V8.98c0-0.64-0.13-1.25-0.36-1.81c-0.24-0.58-0.6-1.1-1.04-1.55c-0.44-0.44-0.97-0.8-1.54-1.04 C108.44,4.35,107.83,4.22,107.19,4.22L107.19,4.22z M43.21,45.56c2.01-0.15,4.03-0.28,6.08-0.38c1.89-0.1,3.8-0.17,5.71-0.22v-6.77 c0-1.01-0.2-1.98-0.57-2.86c-0.38-0.92-0.94-1.74-1.64-2.44c-0.69-0.69-1.52-1.25-2.44-1.64c-0.88-0.37-1.85-0.57-2.86-0.57H27.67 c-1.01,0-1.98,0.2-2.86,0.57c-0.92,0.38-1.74,0.94-2.44,1.64c-0.69,0.69-1.25,1.52-1.64,2.44c-0.37,0.88-0.57,1.85-0.57,2.86V48 c1.62-0.24,3.26-0.46,4.94-0.68c1.81-0.23,3.61-0.44,5.39-0.64c0.69-0.08,1.43-0.17,2.2-0.25c0.72-0.08,1.47-0.15,2.27-0.23 c1.36-0.13,2.71-0.25,4.04-0.36C40.37,45.75,41.77,45.65,43.21,45.56L43.21,45.56z M65.54,44.9c1.21,0.02,2.42,0.05,3.63,0.09 c1.34,0.04,2.68,0.1,4.01,0.16l0.01,0c2.19,0.08,4.33,0.18,6.41,0.3c2.08,0.12,4.11,0.27,6.05,0.44c2.82,0.25,5.55,0.55,8.14,0.9 c2.32,0.32,4.52,0.68,6.58,1.08v-9.68c0-1.01-0.2-1.98-0.57-2.86c-0.38-0.92-0.94-1.74-1.64-2.44c-0.69-0.69-1.52-1.25-2.44-1.64 c-0.88-0.37-1.85-0.57-2.86-0.57H73.05c-1.01,0-1.98,0.2-2.86,0.57c-0.92,0.38-1.74,0.94-2.44,1.64c-0.69,0.69-1.25,1.52-1.64,2.44 c-0.37,0.88-0.57,1.85-0.57,2.86V44.9L65.54,44.9z M118.54,71.59H4.22v24.13h1.43c0.56-1.58,1.14-3.05,1.79-4.36 c0.7-1.4,1.49-2.64,2.45-3.71c1.14-1.28,2.48-2.27,4.09-2.93c1.61-0.65,3.49-0.98,5.75-0.93l79.69-0.1c2.57,0,4.77,0.12,6.69,0.49 c1.95,0.37,3.63,1,5.14,2c1.4,0.93,2.6,2.16,3.68,3.77c1.03,1.54,1.95,3.43,2.83,5.76h0.76V71.59L118.54,71.59z">770 </path>771 </g>772 </g>773 </svg>774 <span><?php echo esc_html($bedrooms); ?>775 <?php esc_html_e('Beds', 'havenlytics'); ?></span>776 </div>777 <?php endif; ?>778 779 <?php if ($bathrooms) : ?>780 781 782 <div class="havenlytics_feature">783 <!-- Bathrooms SVG -->784 <svg fill="#6C60FE" width="20px" height="20px"785 viewBox="0 0 512 512" id="Layer_1"786 enable-background="new 0 0 512 512"787 xmlns="http://www.w3.org/2000/svg">788 <g id="SVGRepo_bgCarrier" stroke-width="0"></g>789 <g id="SVGRepo_tracerCarrier" stroke-linecap="round"790 stroke-linejoin="round"></g>791 <g id="SVGRepo_iconCarrier">792 <g>793 <path794 d="m496 288c-38.154 0-437.487 0-448 0v-56h32c8.837 0 16-7.164 16-16v-40c0-8.836-7.163-16-16-16s-16 7.164-16 16v24h-16v-138.745c0-25.903 31.562-39.064 49.941-20.686l16.94 16.94c-13.424 23.401-10.164 53.835 9.805 73.805l8 8c6.247 6.248 16.379 6.249 22.627 0l64-64c6.249-6.248 6.249-16.379 0-22.627l-8-8c-20.35-20.351-50.837-23.06-73.817-9.817l-16.928-16.928c-11.57-11.57-26.952-17.942-43.313-17.942-33.776 0-61.255 27.479-61.255 61.255v226.745c-8.837 0-16 7.164-16 16s7.163 16 16 16v32c0 43.889 19.742 83.247 50.806 109.681l-22.338 23.229c-9.803 10.193-2.445 27.09 11.53 27.09 4.199 0 8.394-1.644 11.534-4.91l26.218-27.263c19.844 10.326 42.376 16.173 66.25 16.173h192c23.874 0 46.406-5.847 66.25-16.173l26.218 27.263c6.106 6.35 16.234 6.585 22.623.442 6.369-6.125 6.566-16.254.441-22.623l-22.338-23.229c31.064-26.433 50.806-65.791 50.806-109.68v-32c8.837 0 16-7.164 16-16s-7.163-16-16-16zm-310.89-223.738-40.845 40.845c-8.246-11.427-7.23-27.515 3.048-37.794 10.378-10.377 26.461-11.259 37.797-3.051zm278.89 287.738c0 61.757-50.243 112-112 112h-192c-61.757 0-112-50.243-112-112v-32h416z">795 </path>796 </g>797 </g>798 </svg>799 <span><?php echo esc_html($bathrooms); ?>800 <?php esc_html_e('Baths', 'havenlytics'); ?></span>801 </div>802 <?php endif; ?>803 804 805 <?php if ($sqft) : ?>806 <div class="havenlytics_feature">807 808 <!-- Area SVG -->809 <svg fill="#6C60FE" width="20px" height="20px"810 viewBox="0 0 256 256" id="Flat"811 xmlns="http://www.w3.org/2000/svg">812 <g id="SVGRepo_bgCarrier" stroke-width="0"></g>813 <g id="SVGRepo_tracerCarrier" stroke-linecap="round"814 stroke-linejoin="round" stroke="#CCCCCC"815 stroke-width="7.68"></g>816 <g id="SVGRepo_iconCarrier">817 <path818 d="M240,211.98316H227.99414v-108a12.01343,12.01343,0,0,0-12-12h-68v-52a12.01343,12.01343,0,0,0-12-12h-96a12.01343,12.01343,0,0,0-12,12v172H16a4,4,0,0,0,0,8H240a4,4,0,0,0,0-8Zm-24.00586-112a4.00426,4.00426,0,0,1,4,4v108h-72v-112Zm-180-60a4.00427,4.00427,0,0,1,4-4h96a4.00426,4.00426,0,0,1,4,4v172h-104Zm24,32a4.0002,4.0002,0,0,1,4-4h32a4,4,0,1,1,0,8h-32A4.0002,4.0002,0,0,1,59.99414,71.98316Zm56,64a4.0002,4.0002,0,0,1-4,4h-32a4,4,0,0,1,0-8h32A4.0002,4.0002,0,0,1,115.99414,135.98316Zm-16,40a4.0002,4.0002,0,0,1-4,4h-32a4,4,0,0,1,0-8h32A4.0002,4.0002,0,0,1,99.99414,175.98316Zm96,0a4.0002,4.0002,0,0,1-4,4h-16a4,4,0,0,1,0-8h16A4.0002,4.0002,0,0,1,195.99414,175.98316Zm-24-40a4.0002,4.0002,0,0,1,4-4h16a4,4,0,1,1,0,8h-16A4.0002,4.0002,0,0,1,171.99414,135.98316Z">819 </path>820 </g>821 </svg>822 <span><?php echo esc_html(number_format($sqft)); ?>823 <?php esc_html_e('sqft', 'havenlytics'); ?></span>824 </div>825 <?php endif; ?>826 </div>827 </div>828 </div>829 <?php719 <!-- Property --> 720 <div class="havenlytics_property item"> 721 <div class="havenlytics_image"> 722 <?php if (has_post_thumbnail()) : ?> 723 <?php the_post_thumbnail('havenlytics-property-related-thumb', array('class' => 'img-fluid', 'alt' => esc_attr(get_the_title()))); ?> 724 <?php else : ?> 725 <img src="<?php echo esc_url(HVNLY_PROPERTY_URL . 'public/assets/img/video-placeholder.png'); ?>" 726 alt="<?php esc_attr_e('Property Image', 'havenlytics'); ?>" 727 class="img-fluid" /> 728 <?php endif; ?> 729 <?php if (! empty($status_badge)) : ?> 730 <div class="havenlytics_badge"><?php echo esc_html($status_badge); ?> 731 </div> 732 <?php endif; ?> 733 </div> 734 <div class="havenlytics_details"> 735 <?php if ($price) : ?> 736 <div class="havenlytics_price"> 737 <?php echo esc_html($currency_symbol . $price); ?></div> 738 <?php endif; ?> 739 <div class="havenlytics_title"> 740 <a href="<?php the_permalink(); ?>"> 741 <?php echo esc_html(wp_trim_words(get_the_title(), 8, '...')); ?> 742 </a> 743 </div> 744 <?php if ($address) : ?> 745 <div class="havenlytics_address"> 746 <i class="fas fa-map-marker-alt"></i> 747 <?php echo esc_html($address); ?> 748 </div> 749 <?php endif; ?> 750 <div class="havenlytics_features"> 751 <?php if ($bedrooms) : ?> 752 753 754 755 <div class="havenlytics_feature"> 756 <!-- Bedrooms SVG --> 757 <svg fill="#6C60FE" width="20px" height="20px" 758 viewBox="0 -11.47 122.88 122.88" version="1.1" id="Layer_1" 759 xmlns="http://www.w3.org/2000/svg" 760 xmlns:xlink="http://www.w3.org/1999/xlink" 761 style="enable-background:new 0 0 122.88 99.94" 762 xml:space="preserve"> 763 <g id="SVGRepo_bgCarrier" stroke-width="0"></g> 764 <g id="SVGRepo_tracerCarrier" stroke-linecap="round" 765 stroke-linejoin="round"></g> 766 <g id="SVGRepo_iconCarrier"> 767 <g> 768 <path 769 d="M4.22,67.36h114.31v-4.67c0-1.13-0.22-2.18-0.61-3.12c-0.42-1-1.04-1.89-1.81-2.66c-0.47-0.47-1-0.9-1.57-1.28 c-0.58-0.39-1.2-0.73-1.85-1.02c-1.75-0.38-3.49-0.74-5.22-1.08c-1.74-0.34-3.49-0.66-5.25-0.96c-0.08-0.01-0.14-0.02-0.22-0.04 c-0.89-0.15-1.74-0.29-2.55-0.42c-0.81-0.13-1.67-0.26-2.57-0.4l-0.02,0c-6.12-0.78-12.22-1.38-18.31-1.78 c-6.1-0.4-12.17-0.6-18.2-0.61c-3.58,0-7.15,0.06-10.72,0.2c-3.55,0.14-7.12,0.34-10.69,0.62l-0.02,0 c-3.34,0.31-6.67,0.7-10.01,1.15c-3.33,0.45-6.67,0.98-10.03,1.57l-0.37,0.09c-0.07,0.02-0.14,0.03-0.2,0.03 c-0.06,0.01-0.12,0.01-0.18,0.01c-1.57,0.28-3.18,0.59-4.84,0.92c-1.61,0.32-3.22,0.66-4.82,1.01c-0.4,0.22-0.78,0.47-1.14,0.73 c-0.36,0.27-0.71,0.56-1.02,0.87v0c-0.67,0.67-1.2,1.44-1.56,2.3c-0.34,0.81-0.53,1.71-0.53,2.69V67.36L4.22,67.36z M14.2,0h92.99 c1.21,0,2.37,0.24,3.43,0.68c1.1,0.46,2.09,1.13,2.92,1.95c0.83,0.83,1.5,1.82,1.95,2.92c0.44,1.06,0.68,2.22,0.68,3.43v42.69 c0.51,0.3,1.01,0.63,1.47,0.99c0.52,0.4,1.01,0.82,1.46,1.27c1.16,1.16,2.1,2.51,2.73,4.03c0.6,1.43,0.93,3.02,0.93,4.74v6.09 c0.03,0.1,0.06,0.2,0.08,0.3l0,0.02c0.02,0.13,0.03,0.25,0.03,0.37c0,0.13-0.01,0.26-0.04,0.39l0,0c-0.02,0.1-0.05,0.2-0.08,0.3 v27.66c0,0.58-0.24,1.11-0.62,1.49c-0.38,0.38-0.91,0.62-1.49,0.62h-4.35c-0.49,0-0.94-0.17-1.3-0.45 c-0.36-0.28-0.63-0.68-0.74-1.14c-0.8-2.3-1.61-4.12-2.48-5.54c-0.86-1.4-1.78-2.4-2.84-3.11c-1.07-0.71-2.35-1.16-3.9-1.43 c-1.58-0.28-3.42-0.37-5.61-0.36l-79.76,0.1l-0.04,0c-1.57-0.03-2.86,0.17-3.94,0.59c-1.07,0.42-1.94,1.05-2.66,1.86 c-0.81,0.9-1.49,2.05-2.11,3.39c-0.63,1.37-1.2,2.93-1.77,4.64l0,0c-0.14,0.44-0.42,0.79-0.77,1.04c-0.33,0.24-0.73,0.38-1.14,0.4 c-0.03,0.01-0.06,0.01-0.09,0.01H2.11c-0.58,0-1.11-0.24-1.49-0.62C0.24,98.94,0,98.41,0,97.83V61.52c0-1.57,0.3-3.01,0.84-4.31 c0.58-1.38,1.43-2.61,2.49-3.67c0.3-0.3,0.63-0.6,0.98-0.88c0.3-0.24,0.6-0.47,0.92-0.68V8.89c0-1.21,0.24-2.36,0.68-3.4 c0.46-1.09,1.13-2.07,1.96-2.89c0.83-0.82,1.82-1.47,2.91-1.92C11.84,0.24,12.99,0,14.2,0L14.2,0z M107.19,4.22H14.2 c-0.65,0-1.27,0.13-1.84,0.36c-0.59,0.24-1.11,0.59-1.55,1.02c-0.43,0.42-0.78,0.94-1.02,1.5C9.57,7.65,9.45,8.25,9.45,8.89v41.06 c0.3-0.1,0.6-0.18,0.91-0.26c0.49-0.13,0.98-0.24,1.47-0.32c0.68-0.12,1.42-0.25,2.22-0.39c0.6-0.1,1.24-0.21,1.9-0.31V38.19 c0-1.58,0.32-3.09,0.89-4.47c0.6-1.44,1.47-2.73,2.55-3.81c1.08-1.08,2.37-1.95,3.81-2.55c1.38-0.57,2.89-0.89,4.47-0.89h19.82 c1.58,0,3.09,0.32,4.47,0.89c1.44,0.6,2.73,1.47,3.81,2.55c1.08,1.08,1.95,2.37,2.55,3.81c0.57,1.38,0.89,2.89,0.89,4.47v6.69 c0.7-0.01,1.4-0.01,2.11-0.01v-6.68c0-1.58,0.32-3.09,0.89-4.47c0.6-1.44,1.47-2.73,2.55-3.81c1.08-1.08,2.37-1.95,3.81-2.55 c1.38-0.57,2.89-0.89,4.47-0.89h19.82c1.58,0,3.09,0.32,4.47,0.89c1.44,0.6,2.73,1.47,3.81,2.55c1.08,1.08,1.95,2.37,2.55,3.81 c0.57,1.38,0.89,2.89,0.89,4.47v10.34c0.75,0.11,1.55,0.24,2.41,0.38c0.95,0.15,1.86,0.3,2.74,0.45c0.45,0.08,0.91,0.17,1.37,0.28 c0.29,0.07,0.57,0.14,0.84,0.22V8.98c0-0.64-0.13-1.25-0.36-1.81c-0.24-0.58-0.6-1.1-1.04-1.55c-0.44-0.44-0.97-0.8-1.54-1.04 C108.44,4.35,107.83,4.22,107.19,4.22L107.19,4.22z M43.21,45.56c2.01-0.15,4.03-0.28,6.08-0.38c1.89-0.1,3.8-0.17,5.71-0.22v-6.77 c0-1.01-0.2-1.98-0.57-2.86c-0.38-0.92-0.94-1.74-1.64-2.44c-0.69-0.69-1.52-1.25-2.44-1.64c-0.88-0.37-1.85-0.57-2.86-0.57H27.67 c-1.01,0-1.98,0.2-2.86,0.57c-0.92,0.38-1.74,0.94-2.44,1.64c-0.69,0.69-1.25,1.52-1.64,2.44c-0.37,0.88-0.57,1.85-0.57,2.86V48 c1.62-0.24,3.26-0.46,4.94-0.68c1.81-0.23,3.61-0.44,5.39-0.64c0.69-0.08,1.43-0.17,2.2-0.25c0.72-0.08,1.47-0.15,2.27-0.23 c1.36-0.13,2.71-0.25,4.04-0.36C40.37,45.75,41.77,45.65,43.21,45.56L43.21,45.56z M65.54,44.9c1.21,0.02,2.42,0.05,3.63,0.09 c1.34,0.04,2.68,0.1,4.01,0.16l0.01,0c2.19,0.08,4.33,0.18,6.41,0.3c2.08,0.12,4.11,0.27,6.05,0.44c2.82,0.25,5.55,0.55,8.14,0.9 c2.32,0.32,4.52,0.68,6.58,1.08v-9.68c0-1.01-0.2-1.98-0.57-2.86c-0.38-0.92-0.94-1.74-1.64-2.44c-0.69-0.69-1.52-1.25-2.44-1.64 c-0.88-0.37-1.85-0.57-2.86-0.57H73.05c-1.01,0-1.98,0.2-2.86,0.57c-0.92,0.38-1.74,0.94-2.44,1.64c-0.69,0.69-1.25,1.52-1.64,2.44 c-0.37,0.88-0.57,1.85-0.57,2.86V44.9L65.54,44.9z M118.54,71.59H4.22v24.13h1.43c0.56-1.58,1.14-3.05,1.79-4.36 c0.7-1.4,1.49-2.64,2.45-3.71c1.14-1.28,2.48-2.27,4.09-2.93c1.61-0.65,3.49-0.98,5.75-0.93l79.69-0.1c2.57,0,4.77,0.12,6.69,0.49 c1.95,0.37,3.63,1,5.14,2c1.4,0.93,2.6,2.16,3.68,3.77c1.03,1.54,1.95,3.43,2.83,5.76h0.76V71.59L118.54,71.59z"> 770 </path> 771 </g> 772 </g> 773 </svg> 774 <span><?php echo esc_html($bedrooms); ?> 775 <?php esc_html_e('Beds', 'havenlytics'); ?></span> 776 </div> 777 <?php endif; ?> 778 779 <?php if ($bathrooms) : ?> 780 781 782 <div class="havenlytics_feature"> 783 <!-- Bathrooms SVG --> 784 <svg fill="#6C60FE" width="20px" height="20px" 785 viewBox="0 0 512 512" id="Layer_1" 786 enable-background="new 0 0 512 512" 787 xmlns="http://www.w3.org/2000/svg"> 788 <g id="SVGRepo_bgCarrier" stroke-width="0"></g> 789 <g id="SVGRepo_tracerCarrier" stroke-linecap="round" 790 stroke-linejoin="round"></g> 791 <g id="SVGRepo_iconCarrier"> 792 <g> 793 <path 794 d="m496 288c-38.154 0-437.487 0-448 0v-56h32c8.837 0 16-7.164 16-16v-40c0-8.836-7.163-16-16-16s-16 7.164-16 16v24h-16v-138.745c0-25.903 31.562-39.064 49.941-20.686l16.94 16.94c-13.424 23.401-10.164 53.835 9.805 73.805l8 8c6.247 6.248 16.379 6.249 22.627 0l64-64c6.249-6.248 6.249-16.379 0-22.627l-8-8c-20.35-20.351-50.837-23.06-73.817-9.817l-16.928-16.928c-11.57-11.57-26.952-17.942-43.313-17.942-33.776 0-61.255 27.479-61.255 61.255v226.745c-8.837 0-16 7.164-16 16s7.163 16 16 16v32c0 43.889 19.742 83.247 50.806 109.681l-22.338 23.229c-9.803 10.193-2.445 27.09 11.53 27.09 4.199 0 8.394-1.644 11.534-4.91l26.218-27.263c19.844 10.326 42.376 16.173 66.25 16.173h192c23.874 0 46.406-5.847 66.25-16.173l26.218 27.263c6.106 6.35 16.234 6.585 22.623.442 6.369-6.125 6.566-16.254.441-22.623l-22.338-23.229c31.064-26.433 50.806-65.791 50.806-109.68v-32c8.837 0 16-7.164 16-16s-7.163-16-16-16zm-310.89-223.738-40.845 40.845c-8.246-11.427-7.23-27.515 3.048-37.794 10.378-10.377 26.461-11.259 37.797-3.051zm278.89 287.738c0 61.757-50.243 112-112 112h-192c-61.757 0-112-50.243-112-112v-32h416z"> 795 </path> 796 </g> 797 </g> 798 </svg> 799 <span><?php echo esc_html($bathrooms); ?> 800 <?php esc_html_e('Baths', 'havenlytics'); ?></span> 801 </div> 802 <?php endif; ?> 803 804 805 <?php if ($sqft) : ?> 806 <div class="havenlytics_feature"> 807 808 <!-- Area SVG --> 809 <svg fill="#6C60FE" width="20px" height="20px" 810 viewBox="0 0 256 256" id="Flat" 811 xmlns="http://www.w3.org/2000/svg"> 812 <g id="SVGRepo_bgCarrier" stroke-width="0"></g> 813 <g id="SVGRepo_tracerCarrier" stroke-linecap="round" 814 stroke-linejoin="round" stroke="#CCCCCC" 815 stroke-width="7.68"></g> 816 <g id="SVGRepo_iconCarrier"> 817 <path 818 d="M240,211.98316H227.99414v-108a12.01343,12.01343,0,0,0-12-12h-68v-52a12.01343,12.01343,0,0,0-12-12h-96a12.01343,12.01343,0,0,0-12,12v172H16a4,4,0,0,0,0,8H240a4,4,0,0,0,0-8Zm-24.00586-112a4.00426,4.00426,0,0,1,4,4v108h-72v-112Zm-180-60a4.00427,4.00427,0,0,1,4-4h96a4.00426,4.00426,0,0,1,4,4v172h-104Zm24,32a4.0002,4.0002,0,0,1,4-4h32a4,4,0,1,1,0,8h-32A4.0002,4.0002,0,0,1,59.99414,71.98316Zm56,64a4.0002,4.0002,0,0,1-4,4h-32a4,4,0,0,1,0-8h32A4.0002,4.0002,0,0,1,115.99414,135.98316Zm-16,40a4.0002,4.0002,0,0,1-4,4h-32a4,4,0,0,1,0-8h32A4.0002,4.0002,0,0,1,99.99414,175.98316Zm96,0a4.0002,4.0002,0,0,1-4,4h-16a4,4,0,0,1,0-8h16A4.0002,4.0002,0,0,1,195.99414,175.98316Zm-24-40a4.0002,4.0002,0,0,1,4-4h16a4,4,0,1,1,0,8h-16A4.0002,4.0002,0,0,1,171.99414,135.98316Z"> 819 </path> 820 </g> 821 </svg> 822 <span><?php echo esc_html(number_format($sqft)); ?> 823 <?php esc_html_e('sqft', 'havenlytics'); ?></span> 824 </div> 825 <?php endif; ?> 826 </div> 827 </div> 828 </div> 829 <?php 830 830 endwhile; 831 831 wp_reset_postdata(); … … 835 835 836 836 837 </div>838 839 <div class="havenlytics_nav">840 <button class="havenlytics_prev">841 <i class="fas fa-chevron-left"></i>842 </button>843 <button class="havenlytics_next">844 <i class="fas fa-chevron-right"></i>845 </button>846 </div>847 </div>848 849 <?php837 </div> 838 839 <div class="havenlytics_nav"> 840 <button class="havenlytics_prev"> 841 <i class="fas fa-chevron-left"></i> 842 </button> 843 <button class="havenlytics_next"> 844 <i class="fas fa-chevron-right"></i> 845 </button> 846 </div> 847 </div> 848 849 <?php 850 850 // Generate dynamic dots based on found posts 851 851 $total_items = $featured_query->found_posts; 852 852 if ($total_items > 0) : 853 853 ?> 854 <div class="havenlytics_dots"> 855 <?php for ($i = 0; $i < $total_items; $i++) : ?> 856 <div class="havenlytics_dot<?php echo ($i === 0) ? ' active' : ''; ?>"></div> 857 <?php endfor; ?> 854 <div class="havenlytics_dots"> 855 <?php for ($i = 0; $i < $total_items; $i++) : ?> 856 <div class="havenlytics_dot<?php echo ($i === 0) ? ' active' : ''; ?>"></div> 857 <?php endfor; ?> 858 </div> 859 <?php endif; ?> 860 861 862 </div> 863 858 864 </div> 859 <?php endif; ?> 860 861 862 </div> 863 864 </div> 865 <?php endif; ?> 866 865 <?php endif; ?> 866 867 </div> 867 868 </div> 868 869 </div> 869 </div> 870 871 872 <!-- Similar Listings --> 873 <div class="havenlytics-similar-list"> 874 <div class="havenlytics-similar-section-heading"> 875 <h2><?php esc_html_e('Similar Property Listings', 'havenlytics'); ?></h2> 876 <div class="havenlytics-similar-line"> 877 <span class="havenlytics-similar-line1"></span> 878 <span class="havenlytics-similar-line2"></span> 870 871 872 <!-- Similar Listings --> 873 <div class="havenlytics-similar-list"> 874 <div class="havenlytics-similar-section-heading"> 875 <h2><?php esc_html_e('Similar Property Listings', 'havenlytics'); ?></h2> 876 <div class="havenlytics-similar-line"> 877 <span class="havenlytics-similar-line1"></span> 878 <span class="havenlytics-similar-line2"></span> 879 </div> 880 <p><?php esc_html_e('Explore properties with similar features and locations', 'havenlytics'); ?></p> 879 881 </div> 880 <p><?php esc_html_e('Explore properties with similar features and locations', 'havenlytics'); ?></p> 881 </div> 882 <div class="row"> 883 <div class="col-md-12"> 884 <div class="havenlytics-similar-slider owl-carousel"> 885 <?php 882 <div class="row"> 883 <div class="col-md-12"> 884 <div class="havenlytics-similar-slider owl-carousel"> 885 <?php 886 886 $current_post_id = get_the_ID(); 887 887 … … 981 981 } 982 982 ?> 983 <!-- Property Card -->984 <div class="havenlytics-property-card-grid">985 <div class="havenlytics-property-grid-item">986 <div class="havenlytics-property-thumbnail-item">987 <div class="havenlytics-related-carousel-thumbnail">988 <?php if (has_post_thumbnail()) : ?>989 <?php the_post_thumbnail('havenlytics-property-related-thumb', array(983 <!-- Property Card --> 984 <div class="havenlytics-property-card-grid"> 985 <div class="havenlytics-property-grid-item"> 986 <div class="havenlytics-property-thumbnail-item"> 987 <div class="havenlytics-related-carousel-thumbnail"> 988 <?php if (has_post_thumbnail()) : ?> 989 <?php the_post_thumbnail('havenlytics-property-related-thumb', array( 990 990 'alt' => esc_attr(get_the_title()), 991 991 'class' => 'img-fluid' 992 992 )); ?> 993 <?php else : ?> 994 <img src="<?php echo esc_url(HVNLY_PROPERTY_URL . 'public/assets/img/video-placeholder.png'); ?>" 995 alt="<?php esc_attr_e('Property Image', 'havenlytics'); ?>" 996 class="img-fluid" width="400" height="300" <?php endif; ?> </div> 997 998 <?php if ($price) : ?> 999 <div class="havenlytics-property-amount"> 1000 <h5> 1001 <span> 1002 <?php echo esc_html($currency_symbol); ?> 1003 <?php echo esc_html($price); ?> 1004 </span> 1005 </h5> 1006 </div> 1007 <?php endif; ?> 1008 1009 <?php if ($status_badge) : ?> 1010 <div class="havenlytics-property-featured"> 1011 <span><?php echo esc_html($status_badge); ?></span> 1012 </div> 1013 <?php endif; ?> 1014 </div> 1015 1016 <div class="havenlytics-property--content"> 1017 <h3 class="havenlytics-property-title"> 1018 <a 1019 href="<?php the_permalink(); ?>"><?php echo esc_html(wp_trim_words(get_the_title(), 4, '...')); ?></a> 1020 </h3> 1021 1022 <?php if ($address) : ?> 1023 <p class="havenlytics-property-location"> 1024 <svg class="custom-icon" width="20px" height="20px" viewBox="0 0 24 24" 1025 fill="#6C60FE"> 1026 <path 1027 d="M12,11.5A2.5,2.5 0 0,1 9.5,9A2.5,2.5 0 0,1 12,6.5A2.5,2.5 0 0,1 14.5,9A2.5,2.5 0 0,1 12,11.5M12,2A7,7 0 0,0 5,9C5,14.25 12,22 12,22C12,22 19,14.25 19,9A7,7 0 0,0 12,2Z"> 1028 </path> 1029 </svg> 1030 <?php echo esc_html($address); ?> 1031 </p> 1032 <?php endif; ?> 1033 1034 <ul class="d-flex havenlytics-property-short-details"> 1035 <?php if ($bedrooms) : ?> 1036 <li> 1037 <div class="heavenlytics-property-meta-item"> 1038 <!-- Bedrooms SVG --> 1039 <svg fill="#6C60FE" width="20px" height="20px" 1040 viewBox="0 -11.47 122.88 122.88" version="1.1" id="Layer_1" 1041 xmlns="http://www.w3.org/2000/svg" 1042 xmlns:xlink="http://www.w3.org/1999/xlink" 1043 style="enable-background:new 0 0 122.88 99.94" 1044 xml:space="preserve"> 1045 <g id="SVGRepo_bgCarrier" stroke-width="0"></g> 1046 <g id="SVGRepo_tracerCarrier" stroke-linecap="round" 1047 stroke-linejoin="round"></g> 1048 <g id="SVGRepo_iconCarrier"> 1049 <g> 993 <?php else : ?> 994 <img src="<?php echo esc_url(HVNLY_PROPERTY_URL . 'public/assets/img/video-placeholder.png'); ?>" 995 alt="<?php esc_attr_e('Property Image', 'havenlytics'); ?>" 996 class="img-fluid" width="400" height="300" <?php endif; ?> </div> 997 998 <?php if ($price) : ?> 999 <div class="havenlytics-property-amount"> 1000 <h5> 1001 <span> 1002 <?php echo esc_html($currency_symbol); ?> 1003 <?php echo esc_html($price); ?> 1004 </span> 1005 </h5> 1006 </div> 1007 <?php endif; ?> 1008 1009 <?php if ($status_badge) : ?> 1010 <div class="havenlytics-property-featured"> 1011 <span><?php echo esc_html($status_badge); ?></span> 1012 </div> 1013 <?php endif; ?> 1014 </div> 1015 1016 <div class="havenlytics-property--content"> 1017 <h3 class="havenlytics-property-title"> 1018 <a 1019 href="<?php the_permalink(); ?>"><?php echo esc_html(wp_trim_words(get_the_title(), 4, '...')); ?></a> 1020 </h3> 1021 1022 <?php if ($address) : ?> 1023 <p class="havenlytics-property-location"> 1024 <svg class="custom-icon" width="20px" height="20px" viewBox="0 0 24 24" 1025 fill="#6C60FE"> 1050 1026 <path 1051 d="M 4.22,67.36h114.31v-4.67c0-1.13-0.22-2.18-0.61-3.12c-0.42-1-1.04-1.89-1.81-2.66c-0.47-0.47-1-0.9-1.57-1.28 c-0.58-0.39-1.2-0.73-1.85-1.02c-1.75-0.38-3.49-0.74-5.22-1.08c-1.74-0.34-3.49-0.66-5.25-0.96c-0.08-0.01-0.14-0.02-0.22-0.04 c-0.89-0.15-1.74-0.29-2.55-0.42c-0.81-0.13-1.67-0.26-2.57-0.4l-0.02,0c-6.12-0.78-12.22-1.38-18.31-1.78 c-6.1-0.4-12.17-0.6-18.2-0.61c-3.58,0-7.15,0.06-10.72,0.2c-3.55,0.14-7.12,0.34-10.69,0.62l-0.02,0 c-3.34,0.31-6.67,0.7-10.01,1.15c-3.33,0.45-6.67,0.98-10.03,1.57l-0.37,0.09c-0.07,0.02-0.14,0.03-0.2,0.03 c-0.06,0.01-0.12,0.01-0.18,0.01c-1.57,0.28-3.18,0.59-4.84,0.92c-1.61,0.32-3.22,0.66-4.82,1.01c-0.4,0.22-0.78,0.47-1.14,0.73 c-0.36,0.27-0.71,0.56-1.02,0.87v0c-0.67,0.67-1.2,1.44-1.56,2.3c-0.34,0.81-0.53,1.71-0.53,2.69V67.36L4.22,67.36z M14.2,0h92.99 c1.21,0,2.37,0.24,3.43,0.68c1.1,0.46,2.09,1.13,2.92,1.95c0.83,0.83,1.5,1.82,1.95,2.92c0.44,1.06,0.68,2.22,0.68,3.43v42.69 c0.51,0.3,1.01,0.63,1.47,0.99c0.52,0.4,1.01,0.82,1.46,1.27c1.16,1.16,2.1,2.51,2.73,4.03c0.6,1.43,0.93,3.02,0.93,4.74v6.09 c0.03,0.1,0.06,0.2,0.08,0.3l0,0.02c0.02,0.13,0.03,0.25,0.03,0.37c0,0.13-0.01,0.26-0.04,0.39l0,0c-0.02,0.1-0.05,0.2-0.08,0.3 v27.66c0,0.58-0.24,1.11-0.62,1.49c-0.38,0.38-0.91,0.62-1.49,0.62h-4.35c-0.49,0-0.94-0.17-1.3-0.45 c-0.36-0.28-0.63-0.68-0.74-1.14c-0.8-2.3-1.61-4.12-2.48-5.54c-0.86-1.4-1.78-2.4-2.84-3.11c-1.07-0.71-2.35-1.16-3.9-1.43 c-1.58-0.28-3.42-0.37-5.61-0.36l-79.76,0.1l-0.04,0c-1.57-0.03-2.86,0.17-3.94,0.59c-1.07,0.42-1.94,1.05-2.66,1.86 c-0.81,0.9-1.49,2.05-2.11,3.39c-0.63,1.37-1.2,2.93-1.77,4.64l0,0c-0.14,0.44-0.42,0.79-0.77,1.04c-0.33,0.24-0.73,0.38-1.14,0.4 c-0.03,0.01-0.06,0.01-0.09,0.01H2.11c-0.58,0-1.11-0.24-1.49-0.62C0.24,98.94,0,98.41,0,97.83V61.52c0-1.57,0.3-3.01,0.84-4.31 c0.58-1.38,1.43-2.61,2.49-3.67c0.3-0.3,0.63-0.6,0.98-0.88c0.3-0.24,0.6-0.47,0.92-0.68V8.89c0-1.21,0.24-2.36,0.68-3.4 c0.46-1.09,1.13-2.07,1.96-2.89c0.83-0.82,1.82-1.47,2.91-1.92C11.84,0.24,12.99,0,14.2,0L14.2,0z M107.19,4.22H14.2 c-0.65,0-1.27,0.13-1.84,0.36c-0.59,0.24-1.11,0.59-1.55,1.02c-0.43,0.42-0.78,0.94-1.02,1.5C9.57,7.65,9.45,8.25,9.45,8.89v41.06 c0.3-0.1,0.6-0.18,0.91-0.26c0.49-0.13,0.98-0.24,1.47-0.32c0.68-0.12,1.42-0.25,2.22-0.39c0.6-0.1,1.24-0.21,1.9-0.31V38.19 c0-1.58,0.32-3.09,0.89-4.47c0.6-1.44,1.47-2.73,2.55-3.81c1.08-1.08,2.37-1.95,3.81-2.55c1.38-0.57,2.89-0.89,4.47-0.89h19.82 c1.58,0,3.09,0.32,4.47,0.89c1.44,0.6,2.73,1.47,3.81,2.55c1.08,1.08,1.95,2.37,2.55,3.81c0.57,1.38,0.89,2.89,0.89,4.47v6.69 c0.7-0.01,1.4-0.01,2.11-0.01v-6.68c0-1.58,0.32-3.09,0.89-4.47c0.6-1.44,1.47-2.73,2.55-3.81c1.08-1.08,2.37-1.95,3.81-2.55 c1.38-0.57,2.89-0.89,4.47-0.89h19.82c1.58,0,3.09,0.32,4.47,0.89c1.44,0.6,2.73,1.47,3.81,2.55c1.08,1.08,1.95,2.37,2.55,3.81 c0.57,1.38,0.89,2.89,0.89,4.47v10.34c0.75,0.11,1.55,0.24,2.41,0.38c0.95,0.15,1.86,0.3,2.74,0.45c0.45,0.08,0.91,0.17,1.37,0.28 c0.29,0.07,0.57,0.14,0.84,0.22V8.98c0-0.64-0.13-1.25-0.36-1.81c-0.24-0.58-0.6-1.1-1.04-1.55c-0.44-0.44-0.97-0.8-1.54-1.04 C108.44,4.35,107.83,4.22,107.19,4.22L107.19,4.22z M43.21,45.56c2.01-0.15,4.03-0.28,6.08-0.38c1.89-0.1,3.8-0.17,5.71-0.22v-6.77 c0-1.01-0.2-1.98-0.57-2.86c-0.38-0.92-0.94-1.74-1.64-2.44c-0.69-0.69-1.52-1.25-2.44-1.64c-0.88-0.37-1.85-0.57-2.86-0.57H27.67 c-1.01,0-1.98,0.2-2.86,0.57c-0.92,0.38-1.74,0.94-2.44,1.64c-0.69,0.69-1.25,1.52-1.64,2.44c-0.37,0.88-0.57,1.85-0.57,2.86V48 c1.62-0.24,3.26-0.46,4.94-0.68c1.81-0.23,3.61-0.44,5.39-0.64c0.69-0.08,1.43-0.17,2.2-0.25c0.72-0.08,1.47-0.15,2.27-0.23 c1.36-0.13,2.71-0.25,4.04-0.36C40.37,45.75,41.77,45.65,43.21,45.56L43.21,45.56z M65.54,44.9c1.21,0.02,2.42,0.05,3.63,0.09 c1.34,0.04,2.68,0.1,4.01,0.16l0.01,0c2.19,0.08,4.33,0.18,6.41,0.3c2.08,0.12,4.11,0.27,6.05,0.44c2.82,0.25,5.55,0.55,8.14,0.9 c2.32,0.32,4.52,0.68,6.58,1.08v-9.68c0-1.01-0.2-1.98-0.57-2.86c-0.38-0.92-0.94-1.74-1.64-2.44c-0.69-0.69-1.52-1.25-2.44-1.64 c-0.88-0.37-1.85-0.57-2.86-0.57H73.05c-1.01,0-1.98,0.2-2.86,0.57c-0.92,0.38-1.74,0.94-2.44,1.64c-0.69,0.69-1.25,1.52-1.64,2.44 c-0.37,0.88-0.57,1.85-0.57,2.86V44.9L65.54,44.9z M118.54,71.59H4.22v24.13h1.43c0.56-1.58,1.14-3.05,1.79-4.36 c0.7-1.4,1.49-2.64,2.45-3.71c1.14-1.28,2.48-2.27,4.09-2.93c1.61-0.65,3.49-0.98,5.75-0.93l79.69-0.1c2.57,0,4.77,0.12,6.69,0.49 c1.95,0.37,3.63,1,5.14,2c1.4,0.93,2.6,2.16,3.68,3.77c1.03,1.54,1.95,3.43,2.83,5.76h0.76V71.59L118.54,71.59z">1027 d="M12,11.5A2.5,2.5 0 0,1 9.5,9A2.5,2.5 0 0,1 12,6.5A2.5,2.5 0 0,1 14.5,9A2.5,2.5 0 0,1 12,11.5M12,2A7,7 0 0,0 5,9C5,14.25 12,22 12,22C12,22 19,14.25 19,9A7,7 0 0,0 12,2Z"> 1052 1028 </path> 1053 </g> 1054 </g> 1055 </svg> 1056 <?php echo esc_html($bedrooms); ?> 1057 <?php esc_html_e('Beds', 'havenlytics'); ?> 1029 </svg> 1030 <?php echo esc_html($address); ?> 1031 </p> 1032 <?php endif; ?> 1033 1034 <ul class="d-flex havenlytics-property-short-details"> 1035 <?php if ($bedrooms) : ?> 1036 <li> 1037 <div class="heavenlytics-property-meta-item"> 1038 <!-- Bedrooms SVG --> 1039 <svg fill="#6C60FE" width="20px" height="20px" 1040 viewBox="0 -11.47 122.88 122.88" version="1.1" id="Layer_1" 1041 xmlns="http://www.w3.org/2000/svg" 1042 xmlns:xlink="http://www.w3.org/1999/xlink" 1043 style="enable-background:new 0 0 122.88 99.94" 1044 xml:space="preserve"> 1045 <g id="SVGRepo_bgCarrier" stroke-width="0"></g> 1046 <g id="SVGRepo_tracerCarrier" stroke-linecap="round" 1047 stroke-linejoin="round"></g> 1048 <g id="SVGRepo_iconCarrier"> 1049 <g> 1050 <path 1051 d="M4.22,67.36h114.31v-4.67c0-1.13-0.22-2.18-0.61-3.12c-0.42-1-1.04-1.89-1.81-2.66c-0.47-0.47-1-0.9-1.57-1.28 c-0.58-0.39-1.2-0.73-1.85-1.02c-1.75-0.38-3.49-0.74-5.22-1.08c-1.74-0.34-3.49-0.66-5.25-0.96c-0.08-0.01-0.14-0.02-0.22-0.04 c-0.89-0.15-1.74-0.29-2.55-0.42c-0.81-0.13-1.67-0.26-2.57-0.4l-0.02,0c-6.12-0.78-12.22-1.38-18.31-1.78 c-6.1-0.4-12.17-0.6-18.2-0.61c-3.58,0-7.15,0.06-10.72,0.2c-3.55,0.14-7.12,0.34-10.69,0.62l-0.02,0 c-3.34,0.31-6.67,0.7-10.01,1.15c-3.33,0.45-6.67,0.98-10.03,1.57l-0.37,0.09c-0.07,0.02-0.14,0.03-0.2,0.03 c-0.06,0.01-0.12,0.01-0.18,0.01c-1.57,0.28-3.18,0.59-4.84,0.92c-1.61,0.32-3.22,0.66-4.82,1.01c-0.4,0.22-0.78,0.47-1.14,0.73 c-0.36,0.27-0.71,0.56-1.02,0.87v0c-0.67,0.67-1.2,1.44-1.56,2.3c-0.34,0.81-0.53,1.71-0.53,2.69V67.36L4.22,67.36z M14.2,0h92.99 c1.21,0,2.37,0.24,3.43,0.68c1.1,0.46,2.09,1.13,2.92,1.95c0.83,0.83,1.5,1.82,1.95,2.92c0.44,1.06,0.68,2.22,0.68,3.43v42.69 c0.51,0.3,1.01,0.63,1.47,0.99c0.52,0.4,1.01,0.82,1.46,1.27c1.16,1.16,2.1,2.51,2.73,4.03c0.6,1.43,0.93,3.02,0.93,4.74v6.09 c0.03,0.1,0.06,0.2,0.08,0.3l0,0.02c0.02,0.13,0.03,0.25,0.03,0.37c0,0.13-0.01,0.26-0.04,0.39l0,0c-0.02,0.1-0.05,0.2-0.08,0.3 v27.66c0,0.58-0.24,1.11-0.62,1.49c-0.38,0.38-0.91,0.62-1.49,0.62h-4.35c-0.49,0-0.94-0.17-1.3-0.45 c-0.36-0.28-0.63-0.68-0.74-1.14c-0.8-2.3-1.61-4.12-2.48-5.54c-0.86-1.4-1.78-2.4-2.84-3.11c-1.07-0.71-2.35-1.16-3.9-1.43 c-1.58-0.28-3.42-0.37-5.61-0.36l-79.76,0.1l-0.04,0c-1.57-0.03-2.86,0.17-3.94,0.59c-1.07,0.42-1.94,1.05-2.66,1.86 c-0.81,0.9-1.49,2.05-2.11,3.39c-0.63,1.37-1.2,2.93-1.77,4.64l0,0c-0.14,0.44-0.42,0.79-0.77,1.04c-0.33,0.24-0.73,0.38-1.14,0.4 c-0.03,0.01-0.06,0.01-0.09,0.01H2.11c-0.58,0-1.11-0.24-1.49-0.62C0.24,98.94,0,98.41,0,97.83V61.52c0-1.57,0.3-3.01,0.84-4.31 c0.58-1.38,1.43-2.61,2.49-3.67c0.3-0.3,0.63-0.6,0.98-0.88c0.3-0.24,0.6-0.47,0.92-0.68V8.89c0-1.21,0.24-2.36,0.68-3.4 c0.46-1.09,1.13-2.07,1.96-2.89c0.83-0.82,1.82-1.47,2.91-1.92C11.84,0.24,12.99,0,14.2,0L14.2,0z M107.19,4.22H14.2 c-0.65,0-1.27,0.13-1.84,0.36c-0.59,0.24-1.11,0.59-1.55,1.02c-0.43,0.42-0.78,0.94-1.02,1.5C9.57,7.65,9.45,8.25,9.45,8.89v41.06 c0.3-0.1,0.6-0.18,0.91-0.26c0.49-0.13,0.98-0.24,1.47-0.32c0.68-0.12,1.42-0.25,2.22-0.39c0.6-0.1,1.24-0.21,1.9-0.31V38.19 c0-1.58,0.32-3.09,0.89-4.47c0.6-1.44,1.47-2.73,2.55-3.81c1.08-1.08,2.37-1.95,3.81-2.55c1.38-0.57,2.89-0.89,4.47-0.89h19.82 c1.58,0,3.09,0.32,4.47,0.89c1.44,0.6,2.73,1.47,3.81,2.55c1.08,1.08,1.95,2.37,2.55,3.81c0.57,1.38,0.89,2.89,0.89,4.47v6.69 c0.7-0.01,1.4-0.01,2.11-0.01v-6.68c0-1.58,0.32-3.09,0.89-4.47c0.6-1.44,1.47-2.73,2.55-3.81c1.08-1.08,2.37-1.95,3.81-2.55 c1.38-0.57,2.89-0.89,4.47-0.89h19.82c1.58,0,3.09,0.32,4.47,0.89c1.44,0.6,2.73,1.47,3.81,2.55c1.08,1.08,1.95,2.37,2.55,3.81 c0.57,1.38,0.89,2.89,0.89,4.47v10.34c0.75,0.11,1.55,0.24,2.41,0.38c0.95,0.15,1.86,0.3,2.74,0.45c0.45,0.08,0.91,0.17,1.37,0.28 c0.29,0.07,0.57,0.14,0.84,0.22V8.98c0-0.64-0.13-1.25-0.36-1.81c-0.24-0.58-0.6-1.1-1.04-1.55c-0.44-0.44-0.97-0.8-1.54-1.04 C108.44,4.35,107.83,4.22,107.19,4.22L107.19,4.22z M43.21,45.56c2.01-0.15,4.03-0.28,6.08-0.38c1.89-0.1,3.8-0.17,5.71-0.22v-6.77 c0-1.01-0.2-1.98-0.57-2.86c-0.38-0.92-0.94-1.74-1.64-2.44c-0.69-0.69-1.52-1.25-2.44-1.64c-0.88-0.37-1.85-0.57-2.86-0.57H27.67 c-1.01,0-1.98,0.2-2.86,0.57c-0.92,0.38-1.74,0.94-2.44,1.64c-0.69,0.69-1.25,1.52-1.64,2.44c-0.37,0.88-0.57,1.85-0.57,2.86V48 c1.62-0.24,3.26-0.46,4.94-0.68c1.81-0.23,3.61-0.44,5.39-0.64c0.69-0.08,1.43-0.17,2.2-0.25c0.72-0.08,1.47-0.15,2.27-0.23 c1.36-0.13,2.71-0.25,4.04-0.36C40.37,45.75,41.77,45.65,43.21,45.56L43.21,45.56z M65.54,44.9c1.21,0.02,2.42,0.05,3.63,0.09 c1.34,0.04,2.68,0.1,4.01,0.16l0.01,0c2.19,0.08,4.33,0.18,6.41,0.3c2.08,0.12,4.11,0.27,6.05,0.44c2.82,0.25,5.55,0.55,8.14,0.9 c2.32,0.32,4.52,0.68,6.58,1.08v-9.68c0-1.01-0.2-1.98-0.57-2.86c-0.38-0.92-0.94-1.74-1.64-2.44c-0.69-0.69-1.52-1.25-2.44-1.64 c-0.88-0.37-1.85-0.57-2.86-0.57H73.05c-1.01,0-1.98,0.2-2.86,0.57c-0.92,0.38-1.74,0.94-2.44,1.64c-0.69,0.69-1.25,1.52-1.64,2.44 c-0.37,0.88-0.57,1.85-0.57,2.86V44.9L65.54,44.9z M118.54,71.59H4.22v24.13h1.43c0.56-1.58,1.14-3.05,1.79-4.36 c0.7-1.4,1.49-2.64,2.45-3.71c1.14-1.28,2.48-2.27,4.09-2.93c1.61-0.65,3.49-0.98,5.75-0.93l79.69-0.1c2.57,0,4.77,0.12,6.69,0.49 c1.95,0.37,3.63,1,5.14,2c1.4,0.93,2.6,2.16,3.68,3.77c1.03,1.54,1.95,3.43,2.83,5.76h0.76V71.59L118.54,71.59z"> 1052 </path> 1053 </g> 1054 </g> 1055 </svg> 1056 <?php echo esc_html($bedrooms); ?> 1057 <?php esc_html_e('Beds', 'havenlytics'); ?> 1058 </div> 1059 </li> 1060 <?php endif; ?> 1061 1062 <?php if ($bathrooms) : ?> 1063 <li> 1064 <div class="heavenlytics-property-meta-item"> 1065 <!-- Bathrooms SVG --> 1066 <svg fill="#6C60FE" width="20px" height="20px" 1067 viewBox="0 0 512 512" id="Layer_1" 1068 enable-background="new 0 0 512 512" 1069 xmlns="http://www.w3.org/2000/svg"> 1070 <g id="SVGRepo_bgCarrier" stroke-width="0"></g> 1071 <g id="SVGRepo_tracerCarrier" stroke-linecap="round" 1072 stroke-linejoin="round"></g> 1073 <g id="SVGRepo_iconCarrier"> 1074 <g> 1075 <path 1076 d="m496 288c-38.154 0-437.487 0-448 0v-56h32c8.837 0 16-7.164 16-16v-40c0-8.836-7.163-16-16-16s-16 7.164-16 16v24h-16v-138.745c0-25.903 31.562-39.064 49.941-20.686l16.94 16.94c-13.424 23.401-10.164 53.835 9.805 73.805l8 8c6.247 6.248 16.379 6.249 22.627 0l64-64c6.249-6.248 6.249-16.379 0-22.627l-8-8c-20.35-20.351-50.837-23.06-73.817-9.817l-16.928-16.928c-11.57-11.57-26.952-17.942-43.313-17.942-33.776 0-61.255 27.479-61.255 61.255v226.745c-8.837 0-16 7.164-16 16s7.163 16 16 16v32c0 43.889 19.742 83.247 50.806 109.681l-22.338 23.229c-9.803 10.193-2.445 27.09 11.53 27.09 4.199 0 8.394-1.644 11.534-4.91l26.218-27.263c19.844 10.326 42.376 16.173 66.25 16.173h192c23.874 0 46.406-5.847 66.25-16.173l26.218 27.263c6.106 6.35 16.234 6.585 22.623.442 6.369-6.125 6.566-16.254.441-22.623l-22.338-23.229c31.064-26.433 50.806-65.791 50.806-109.68v-32c8.837 0 16-7.164 16-16s-7.163-16-16-16zm-310.89-223.738-40.845 40.845c-8.246-11.427-7.23-27.515 3.048-37.794 10.378-10.377 26.461-11.259 37.797-3.051zm278.89 287.738c0 61.757-50.243 112-112 112h-192c-61.757 0-112-50.243-112-112v-32h416z"> 1077 </path> 1078 </g> 1079 </g> 1080 </svg> 1081 <?php echo esc_html($bathrooms); ?> 1082 <?php esc_html_e('Baths', 'havenlytics'); ?> 1083 </div> 1084 </li> 1085 <?php endif; ?> 1086 1087 <?php if ($sqft) : ?> 1088 <li> 1089 <div class="heavenlytics-property-meta-item"> 1090 <!-- Area SVG --> 1091 <svg fill="#6C60FE" width="20px" height="20px" 1092 viewBox="0 0 256 256" id="Flat" 1093 xmlns="http://www.w3.org/2000/svg"> 1094 <g id="SVGRepo_bgCarrier" stroke-width="0"></g> 1095 <g id="SVGRepo_tracerCarrier" stroke-linecap="round" 1096 stroke-linejoin="round" stroke="#CCCCCC" 1097 stroke-width="7.68"></g> 1098 <g id="SVGRepo_iconCarrier"> 1099 <path 1100 d="M240,211.98316H227.99414v-108a12.01343,12.01343,0,0,0-12-12h-68v-52a12.01343,12.01343,0,0,0-12-12h-96a12.01343,12.01343,0,0,0-12,12v172H16a4,4,0,0,0,0,8H240a4,4,0,0,0,0-8Zm-24.00586-112a4.00426,4.00426,0,0,1,4,4v108h-72v-112Zm-180-60a4.00427,4.00427,0,0,1,4-4h96a4.00426,4.00426,0,0,1,4,4v172h-104Zm24,32a4.0002,4.0002,0,0,1,4-4h32a4,4,0,1,1,0,8h-32A4.0002,4.0002,0,0,1,59.99414,71.98316Zm56,64a4.0002,4.0002,0,0,1-4,4h-32a4,4,0,0,1,0-8h32A4.0002,4.0002,0,0,1,115.99414,135.98316Zm-16,40a4.0002,4.0002,0,0,1-4,4h-32a4,4,0,0,1,0-8h32A4.0002,4.0002,0,0,1,99.99414,175.98316Zm96,0a4.0002,4.0002,0,0,1-4,4h-16a4,4,0,0,1,0-8h16A4.0002,4.0002,0,0,1,195.99414,175.98316Zm-24-40a4.0002,4.0002,0,0,1,4-4h16a4,4,0,1,1,0,8h-16A4.0002,4.0002,0,0,1,171.99414,135.98316Z"> 1101 </path> 1102 </g> 1103 </svg> 1104 <?php echo esc_html(number_format($sqft)); ?> 1105 <?php esc_html_e('sqft', 'havenlytics'); ?> 1106 </div> 1107 </li> 1108 <?php endif; ?> 1109 </ul> 1110 1111 <ul 1112 class="havenlytics-property-category d-flex justify-content-between align-items-center"> 1113 <li> 1114 <a href="<?php the_permalink(); ?>" 1115 class="havenlytics-btn-primary havenlytics-btn-style-1"> 1116 <?php esc_html_e('View Property', 'havenlytics'); ?> 1117 </a> 1118 </li> 1119 </ul> 1058 1120 </div> 1059 </li> 1060 <?php endif; ?> 1061 1062 <?php if ($bathrooms) : ?> 1063 <li> 1064 <div class="heavenlytics-property-meta-item"> 1065 <!-- Bathrooms SVG --> 1066 <svg fill="#6C60FE" width="20px" height="20px" 1067 viewBox="0 0 512 512" id="Layer_1" 1068 enable-background="new 0 0 512 512" 1069 xmlns="http://www.w3.org/2000/svg"> 1070 <g id="SVGRepo_bgCarrier" stroke-width="0"></g> 1071 <g id="SVGRepo_tracerCarrier" stroke-linecap="round" 1072 stroke-linejoin="round"></g> 1073 <g id="SVGRepo_iconCarrier"> 1074 <g> 1075 <path 1076 d="m496 288c-38.154 0-437.487 0-448 0v-56h32c8.837 0 16-7.164 16-16v-40c0-8.836-7.163-16-16-16s-16 7.164-16 16v24h-16v-138.745c0-25.903 31.562-39.064 49.941-20.686l16.94 16.94c-13.424 23.401-10.164 53.835 9.805 73.805l8 8c6.247 6.248 16.379 6.249 22.627 0l64-64c6.249-6.248 6.249-16.379 0-22.627l-8-8c-20.35-20.351-50.837-23.06-73.817-9.817l-16.928-16.928c-11.57-11.57-26.952-17.942-43.313-17.942-33.776 0-61.255 27.479-61.255 61.255v226.745c-8.837 0-16 7.164-16 16s7.163 16 16 16v32c0 43.889 19.742 83.247 50.806 109.681l-22.338 23.229c-9.803 10.193-2.445 27.09 11.53 27.09 4.199 0 8.394-1.644 11.534-4.91l26.218-27.263c19.844 10.326 42.376 16.173 66.25 16.173h192c23.874 0 46.406-5.847 66.25-16.173l26.218 27.263c6.106 6.35 16.234 6.585 22.623.442 6.369-6.125 6.566-16.254.441-22.623l-22.338-23.229c31.064-26.433 50.806-65.791 50.806-109.68v-32c8.837 0 16-7.164 16-16s-7.163-16-16-16zm-310.89-223.738-40.845 40.845c-8.246-11.427-7.23-27.515 3.048-37.794 10.378-10.377 26.461-11.259 37.797-3.051zm278.89 287.738c0 61.757-50.243 112-112 112h-192c-61.757 0-112-50.243-112-112v-32h416z"> 1077 </path> 1078 </g> 1079 </g> 1080 </svg> 1081 <?php echo esc_html($bathrooms); ?> 1082 <?php esc_html_e('Baths', 'havenlytics'); ?> 1083 </div> 1084 </li> 1085 <?php endif; ?> 1086 1087 <?php if ($sqft) : ?> 1088 <li> 1089 <div class="heavenlytics-property-meta-item"> 1090 <!-- Area SVG --> 1091 <svg fill="#6C60FE" width="20px" height="20px" 1092 viewBox="0 0 256 256" id="Flat" 1093 xmlns="http://www.w3.org/2000/svg"> 1094 <g id="SVGRepo_bgCarrier" stroke-width="0"></g> 1095 <g id="SVGRepo_tracerCarrier" stroke-linecap="round" 1096 stroke-linejoin="round" stroke="#CCCCCC" 1097 stroke-width="7.68"></g> 1098 <g id="SVGRepo_iconCarrier"> 1099 <path 1100 d="M240,211.98316H227.99414v-108a12.01343,12.01343,0,0,0-12-12h-68v-52a12.01343,12.01343,0,0,0-12-12h-96a12.01343,12.01343,0,0,0-12,12v172H16a4,4,0,0,0,0,8H240a4,4,0,0,0,0-8Zm-24.00586-112a4.00426,4.00426,0,0,1,4,4v108h-72v-112Zm-180-60a4.00427,4.00427,0,0,1,4-4h96a4.00426,4.00426,0,0,1,4,4v172h-104Zm24,32a4.0002,4.0002,0,0,1,4-4h32a4,4,0,1,1,0,8h-32A4.0002,4.0002,0,0,1,59.99414,71.98316Zm56,64a4.0002,4.0002,0,0,1-4,4h-32a4,4,0,0,1,0-8h32A4.0002,4.0002,0,0,1,115.99414,135.98316Zm-16,40a4.0002,4.0002,0,0,1-4,4h-32a4,4,0,0,1,0-8h32A4.0002,4.0002,0,0,1,99.99414,175.98316Zm96,0a4.0002,4.0002,0,0,1-4,4h-16a4,4,0,0,1,0-8h16A4.0002,4.0002,0,0,1,195.99414,175.98316Zm-24-40a4.0002,4.0002,0,0,1,4-4h16a4,4,0,1,1,0,8h-16A4.0002,4.0002,0,0,1,171.99414,135.98316Z"> 1101 </path> 1102 </g> 1103 </svg> 1104 <?php echo esc_html(number_format($sqft)); ?> 1105 <?php esc_html_e('sqft', 'havenlytics'); ?> 1106 </div> 1107 </li> 1108 <?php endif; ?> 1109 </ul> 1110 1111 <ul 1112 class="havenlytics-property-category d-flex justify-content-between align-items-center"> 1113 <li> 1114 <a href="<?php the_permalink(); ?>" 1115 class="havenlytics-btn-primary havenlytics-btn-style-1"> 1116 <?php esc_html_e('View Property', 'havenlytics'); ?> 1117 </a> 1118 </li> 1119 </ul> 1120 </div> 1121 </div> 1122 </div> 1123 <!-- /Property Card --> 1124 <?php 1121 </div> 1122 </div> 1123 <!-- /Property Card --> 1124 <?php 1125 1125 endwhile; 1126 1126 wp_reset_postdata(); 1127 1127 else : ?> 1128 <p><?php esc_html_e('No similar properties found.', 'havenlytics'); ?></p> 1129 <?php endif; ?> 1128 <p><?php esc_html_e('No similar properties found.', 'havenlytics'); ?></p> 1129 <?php endif; ?> 1130 </div> 1130 1131 </div> 1131 1132 </div> 1132 1133 </div> 1133 </div> 1134 <!-- /Similar Listings --> 1135 1136 1137 </div> 1138 </div> 1139 1140 <?php endwhile; ?> 1141 </div> 1142 1143 1144 1145 1146 1147 <!-- Make Enquiry Popup --> 1148 <div class="havenlytics_popup_overlay" id="havenlytics_popup_enquiry"> 1149 <div class="havenlytics_popup_container havenlytics_popup_animate_flip"> 1150 <div class="fullscreen-indicator">Full Screen Mode</div> 1151 <div class="havenlytics_popup_controls"> 1152 <div class="havenlytics_popup_control_btn havenlytics_popup_fullscreen"> 1153 <i class="fas fa-expand"></i> 1154 </div> 1155 <div class="havenlytics_popup_control_btn havenlytics_popup_close"> 1156 <i class="fas fa-times"></i> 1134 <!-- /Similar Listings --> 1135 1136 1157 1137 </div> 1158 1138 </div> 1159 <div class="havenlytics_popup_content"> 1160 <h2 class="havenlytics_popup_title">Book Property</h2> 1161 <p>Fill out the form below and our team will get back to you as soon as possible.</p> 1162 1163 <div class="havenlytics_popup_form"> 1164 <?php 1165 $book_property = get_post_meta($post->ID, '_havenlytics_property_book_property', true); 1166 1167 if (!empty($book_property)) { 1168 echo do_shortcode(wp_kses_post($book_property)); 1169 } 1170 ?> 1171 1172 </div> 1173 </div> 1139 1140 <?php endwhile; ?> 1174 1141 </div> 1175 </div> 1176 1177 <!-- Virtual Tour Popup --> 1178 <div class="havenlytics_popup_overlay" id="havenlytics_popup_virtualTour"> 1179 <div class="havenlytics_popup_container havenlytics_popup_animate_3d"> 1180 <div class="fullscreen-indicator">Full Screen Mode</div> 1181 <div class="havenlytics_popup_controls"> 1182 <div class="havenlytics_popup_control_btn havenlytics_popup_fullscreen"> 1183 <i class="fas fa-expand"></i> 1184 </div> 1185 <div class="havenlytics_popup_control_btn havenlytics_popup_close"> 1186 <i class="fas fa-times"></i> 1187 </div> 1188 </div> 1189 <div class="havenlytics_popup_content"> 1190 <h2 class="havenlytics_popup_title">3D Virtual Tour</h2> 1191 <p>Explore this beautiful property through our immersive 360° virtual tour.</p> 1192 1193 <?php 1194 $virtual_tour_url = get_post_meta($post->ID, '_havenlytics_property_virtual_tour', true); 1195 ?> 1196 1197 <div class="havenlytics_popup_virtual_tour" style="height: 100vh;"> 1198 <?php if (!empty($virtual_tour_url)) : ?> 1199 <iframe src="<?php echo esc_url($virtual_tour_url); ?>" width="100%" height="100%" frameborder="0" 1200 allowfullscreen loading="lazy" style="border: none; height: 100%; width: 100%;"></iframe> 1201 <?php else : ?> 1202 <div class="virtual-tour-placeholder"> 1203 <i class="fas fa-vr-cardboard"></i> 1204 <h3>Interactive 3D Tour</h3> 1205 <p>Navigate through each room with our virtual reality experience</p> 1206 </div> 1207 <?php endif; ?> 1208 </div> 1209 1210 1211 </div> 1212 </div> 1213 </div> 1214 1215 <!-- Floorplan Popup --> 1216 <div class="havenlytics_popup_overlay" id="havenlytics_popup_floorplan"> 1217 <div class="havenlytics_popup_container havenlytics_popup_animate_slide"> 1218 <div class="fullscreen-indicator">Full Screen Mode</div> 1219 <div class="havenlytics_popup_controls"> 1220 <div class="havenlytics_popup_control_btn havenlytics_popup_fullscreen"> 1221 <i class="fas fa-expand"></i> 1222 </div> 1223 <div class="havenlytics_popup_control_btn havenlytics_popup_close"> 1224 <i class="fas fa-times"></i> 1225 </div> 1226 </div> 1227 <div class="havenlytics_popup_content"> 1228 <h2 class="havenlytics_popup_title">Property Floorplan</h2> 1229 <p>Detailed layout showing room dimensions and spatial relationships.</p> 1230 1231 1232 <?php 1233 $floorplan_url = get_post_meta($post->ID, '_havenlytics_property_floorplan_img', true); 1234 ?> 1235 1236 1237 <?php if (!empty($floorplan_url)) : ?> 1238 <img src="<?php echo esc_url($floorplan_url); ?>" alt="Property Floorplan" 1239 style="width: 100%; height: 100%; object-fit: cover; border-radius: 8px;"> 1240 <?php else : ?> 1241 <div class="havenlytics_popup_floorplan"> 1242 <div style="text-align: center; color: #7f8c8d;"> 1243 <i class="fas fa-drafting-compass" style="font-size: 4rem; margin-bottom: 15px;"></i> 1244 <h3>Detailed Floorplan</h3> 1245 <p>PDF document with measurements and layout</p> 1246 </div> 1247 </div> 1248 <?php endif; ?> 1249 1250 1251 1252 1253 1254 1255 </div> 1256 </div> 1257 </div> 1258 1259 <!-- Brochure Popup --> 1260 <div class="havenlytics_popup_overlay" id="havenlytics_popup_brochure"> 1261 <div class="havenlytics_popup_container havenlytics_popup_animate_rotate"> 1262 <div class="fullscreen-indicator">Full Screen Mode</div> 1263 <div class="havenlytics_popup_controls"> 1264 <div class="havenlytics_popup_control_btn havenlytics_popup_fullscreen"> 1265 <i class="fas fa-expand"></i> 1266 </div> 1267 <div class="havenlytics_popup_control_btn havenlytics_popup_close"> 1268 <i class="fas fa-times"></i> 1269 </div> 1270 </div> 1271 <?php 1272 $brochure_pdf = get_post_meta(get_the_ID(), '_havenlytics_property_brochure_pdf', true); 1273 ?> 1274 1275 <div class="havenlytics_popup_content"> 1276 <h2 class="havenlytics_popup_title">Property Brochure</h2> 1277 <p>Download our comprehensive brochure with high-quality photos and details.</p> 1278 1279 <div class="havenlytics_popup_brochure"> 1280 <?php if (!empty($brochure_pdf)) : ?> 1281 <iframe src="<?php echo esc_url($brochure_pdf); ?>" width="100%" height="700" 1282 style="border: none;"></iframe> 1283 <?php else : ?> 1284 <div style="text-align: center; color: #7f8c8d;"> 1285 <i class="fas fa-file-pdf" style="font-size: 4rem; margin-bottom: 15px;"></i> 1286 <h3>Property Brochure</h3> 1287 <p>Detailed PDF document with all property information</p> 1288 </div> 1289 <?php endif; ?> 1290 </div> 1291 1292 <?php if (!empty($brochure_pdf)) : ?> 1293 <a href="<?php echo esc_url($brochure_pdf); ?>" download class="havenlytics_popup_submit" 1294 style="margin-top: 20px; display: inline-block;"> 1295 <i class="fas fa-download"></i> Download Brochure (PDF) 1296 </a> 1297 <?php endif; ?> 1298 </div> 1299 1300 </div> 1301 </div> 1302 1303 <!-- View EPC Popup --> 1304 <div class="havenlytics_popup_overlay" id="havenlytics_popup_epc"> 1305 <div class="havenlytics_popup_container havenlytics_popup_animate_bounce"> 1306 <div class="fullscreen-indicator">Full Screen Mode</div> 1307 <div class="havenlytics_popup_controls"> 1308 <div class="havenlytics_popup_control_btn havenlytics_popup_fullscreen"> 1309 <i class="fas fa-expand"></i> 1310 </div> 1311 <div class="havenlytics_popup_control_btn havenlytics_popup_close"> 1312 <i class="fas fa-times"></i> 1313 </div> 1314 </div> 1315 <?php 1316 $epc_pdf = get_post_meta(get_the_ID(), '_havenlytics_property_epc_pdf', true); 1317 ?> 1318 1319 <div class="havenlytics_popup_content"> 1320 <h2 class="havenlytics_popup_title">Energy Performance Certificate</h2> 1321 <p>Energy efficiency rating of the property.</p> 1322 1323 <div class="havenlytics_popup_epc"> 1324 <?php if (!empty($epc_pdf)) : ?> 1325 <iframe src="<?php echo esc_url($epc_pdf); ?>" width="100%" height="700" 1326 style="border: 1px solid #ccc;" allowfullscreen> 1327 </iframe> 1328 <?php else : ?> 1329 <div style="text-align: center; color: #7f8c8d;"> 1330 <div style="font-size: 5rem; font-weight: bold; color: #27ae60; margin-bottom: 15px;">B</div> 1331 <h3>Energy Rating: B (82)</h3> 1332 <p>Potential Rating: A (94)</p> 1333 </div> 1334 <?php endif; ?> 1335 </div> 1336 1337 <?php if (!empty($epc_pdf)) : ?> 1338 <a href="<?php echo esc_url($epc_pdf); ?>" target="_blank" class="havenlytics_popup_submit" 1339 style="margin-top: 20px; display: inline-block; text-align: center;"> 1340 <i class="fas fa-download"></i> Download EPC (PDF) 1341 </a> 1342 <?php else : ?> 1343 <button class="havenlytics_popup_submit" style="margin-top: 20px;" disabled> 1344 <i class="fas fa-download"></i> Download EPC (PDF) 1345 </button> 1346 <?php endif; ?> 1347 </div> 1348 1349 </div> 1350 </div> 1351 1352 <!-- Map Popup --> 1353 <div class="havenlytics_popup_overlay" id="havenlytics_popup_map"> 1354 <div class="havenlytics_popup_container havenlytics_popup_animate_zoom"> 1355 <div class="fullscreen-indicator">Full Screen Mode</div> 1356 <div class="havenlytics_popup_controls"> 1357 <div class="havenlytics_popup_control_btn havenlytics_popup_fullscreen"> 1358 <i class="fas fa-expand"></i> 1359 </div> 1360 <div class="havenlytics_popup_control_btn havenlytics_popup_close"> 1361 <i class="fas fa-times"></i> 1362 </div> 1363 </div> 1364 <?php 1365 $map_url = get_post_meta(get_the_ID(), '_havenlytics_property_map_url', true); 1366 ?> 1367 1368 <div class="havenlytics_popup_content"> 1369 <h2 class="havenlytics_popup_title">Property Location</h2> 1370 <p>Located in a desirable neighborhood with excellent amenities.</p> 1371 1372 <div class="havenlytics_popup_map"> 1373 <?php if (!empty($map_url)) : ?> 1374 <iframe src="<?php echo esc_url($map_url); ?>" width="100%" height="700" style="border:0;" 1375 allowfullscreen="" loading="lazy" referrerpolicy="no-referrer-when-downgrade"> 1376 </iframe> 1377 <?php else : ?> 1378 <div style="text-align: center; color: #7f8c8d;"> 1379 <i class="fas fa-map-marked-alt" style="font-size: 4rem; margin-bottom: 15px;"></i> 1380 <h3>Interactive Map</h3> 1381 <p>Explore the neighborhood and nearby amenities</p> 1382 </div> 1383 <?php endif; ?> 1384 </div> 1385 </div> 1386 1387 </div> 1388 </div> 1389 1390 <!-- Arrange Viewing Popup --> 1391 <div class="havenlytics_popup_overlay" id="havenlytics_popup_viewing"> 1392 <div class="havenlytics_popup_container havenlytics_popup_animate_flip"> 1393 <div class="fullscreen-indicator">Full Screen Mode</div> 1394 <div class="havenlytics_popup_controls"> 1395 <div class="havenlytics_popup_control_btn havenlytics_popup_fullscreen"> 1396 <i class="fas fa-expand"></i> 1397 </div> 1398 <div class="havenlytics_popup_control_btn havenlytics_popup_close"> 1399 <i class="fas fa-times"></i> 1400 </div> 1401 </div> 1402 <div class="havenlytics_popup_content"> 1403 <h2 class="havenlytics_popup_title">Arrange a Viewing</h2> 1404 <p>Schedule a time to visit this property.</p> 1405 1406 <div class="havenlytics_popup_form"> 1407 <?php 1408 $request_callback = get_post_meta($post->ID, '_havenlytics_property_request_call', true); 1409 1410 if (!empty($request_callback)) { 1411 echo do_shortcode(wp_kses_post($request_callback)); 1412 } 1413 ?> 1414 1415 </div> 1416 </div> 1417 </div> 1418 </div> 1419 1420 <!-- Contact Agent Popup --> 1421 <div class="havenlytics_popup_overlay" id="havenlytics_popup_agent"> 1422 <div class="havenlytics_popup_container havenlytics_popup_animate_rotate"> 1423 <div class="fullscreen-indicator">Full Screen Mode</div> 1424 <div class="havenlytics_popup_controls"> 1425 <div class="havenlytics_popup_control_btn havenlytics_popup_fullscreen"> 1426 <i class="fas fa-expand"></i> 1427 </div> 1428 <div class="havenlytics_popup_control_btn havenlytics_popup_close"> 1429 <i class="fas fa-times"></i> 1430 </div> 1431 </div> 1432 <div class="havenlytics_popup_content"> 1433 <h2 class="havenlytics_popup_title">Request Call Back</h2> 1434 <p>Get in touch with our dedicated agent for this property.</p> 1435 1436 1437 1438 <div class="havenlytics_popup_form"> 1439 <?php 1440 $arrange_viewing = get_post_meta($post->ID, '_havenlytics_property_arrange_view', true); 1441 1442 if (!empty($arrange_viewing)) { 1443 echo do_shortcode(wp_kses_post($arrange_viewing)); 1444 } 1445 ?> 1446 1447 </div> 1448 </div> 1449 </div> 1450 </div> 1451 1452 1453 1454 1455 <?php get_footer(); ?> 1142 1143 1144 1145 <?php 1146 // Template part to load modals 1147 $modals = [ 1148 'modal-enquiry', 1149 'modal-virtual-tour', 1150 'modal-floorplan', 1151 'modal-brochure', 1152 'modal-epc', 1153 'modal-map', 1154 'modal-viewing', 1155 'modal-agent' 1156 ]; 1157 1158 foreach ($modals as $modal) { 1159 include HVNLY_PROPERTY_PATH . 'includes/modals/' . $modal . '.php'; 1160 } 1161 ?> 1162 1163 1164 1165 1166 <?php get_footer(); ?> -
havenlytics/trunk/templates/property-card-grid.php
r3322295 r3333158 4 4 * Grid view property card template 5 5 */ 6 $property_id = get_the_ID();7 $meta_fields = $this->get_property_meta_fields($property_id);6 // $property_id = get_the_ID(); 7 // $meta_fields = $this->get_property_meta_fields($property_id); 8 8 9 9 ?> -
havenlytics/trunk/templates/property-card-list.php
r3322295 r3333158 4 4 * List view property card template 5 5 */ 6 $property_id = get_the_ID();7 $meta_fields = $this->get_property_meta_fields($property_id);8 $short_description = get_post_meta($property_id, '_havenlytics_short_description', true);9 $short_info = wp_trim_words($short_description, 18, '...');6 // $property_id = get_the_ID(); 7 // $meta_fields = $this->get_property_meta_fields($property_id); 8 // $short_description = get_post_meta($property_id, '_havenlytics_short_description', true); 9 // $short_info = wp_trim_words($short_description, 18, '...'); 10 10 11 11 -
havenlytics/trunk/templates/property-card.php
r3315596 r3333158 4 4 * Default property card template with attribute support 5 5 */ 6 $property_id = get_the_ID();7 $meta_fields = $this->get_property_meta_fields($property_id);8 $excerpt_length = isset($atts['excerpt_length']) ? (int)$atts['excerpt_length'] : 20;6 // $property_id = get_the_ID(); 7 // $meta_fields = $this->get_property_meta_fields($property_id); 8 // $excerpt_length = isset($atts['excerpt_length']) ? (int)$atts['excerpt_length'] : 20; 9 9 ?> 10 10 11 <div class="<?php echo $view_type === 'grid' ? 'heavenlytics-col' : 'heavenlytics-list-item'; ?>"> 12 <div class="heavenlytics-property-card"> 13 <div class="heavenlytics-property-card-image"> 14 <?php if ($meta_fields['featured_image']) : ?> 15 <img src="<?php echo esc_url($meta_fields['featured_image']); ?>" alt="<?php the_title_attribute(); ?>"> 16 <?php else : ?> 17 <img src="<?php echo esc_url($meta_fields['default_image']); ?>" alt="<?php the_title_attribute(); ?>"> 18 <?php endif; ?> 11 <!-- Property grid --> 12 <div class="col-lg-4 col-md-6"> 13 <div class="havenlytics-property-card-grid"> 14 <div class="havenlytics-property-grid-item"> 15 <div class="havenlytics-property-gallery"> 19 16 20 <?php if ($meta_fields['status_badge']) : ?>21 <span class="heavenlytics-property-badge"><?php echo esc_html($meta_fields['status_badge']); ?></span>22 <?php endif; ?>23 </div>17 <?php 18 // Prepare gallery data 19 $gallery = get_post_meta($property_id, '_havenlytics_gallery', true); 20 $gallery_images = ! empty($gallery) ? explode(',', $gallery) : array(); 24 21 25 <div class="heavenlytics-property-card-content"> 26 <?php if ($view_type !== 'list' && (!isset($atts['show_price']) || $atts['show_price'] !== 'no')) : ?> 27 <?php if ($meta_fields['price']) : ?> 28 <div class="heavenlytics-property-price"><span>$ </span><?php echo esc_html($meta_fields['price']); ?></div> 29 <?php endif; ?> 30 <?php endif; ?> 22 // Show only the featured or default image if 4 or fewer gallery images exist. 23 if (count($gallery_images) <= 3) : 31 24 32 <h3 class="heavenlytics-property-title"><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h3> 25 $featured_image = isset($meta_fields['featured_image']) ? esc_url($meta_fields['featured_image']) : ''; 26 $default_image = isset($meta_fields['default_image']) ? esc_url($meta_fields['default_image']) : ''; 33 27 34 <?php if ($meta_fields['type_label']) : ?> 35 <div class="heavenlytics-property-type"><?php echo esc_html($meta_fields['type_label']); ?></div> 36 <?php endif; ?> 28 ?> 29 <a href="<?php echo esc_url(get_the_permalink()); ?>" class="havenlytics-property-img"> 30 <img src="<?php echo esc_url($featured_image ? $featured_image : $default_image); ?>" 31 class="img-fluid" alt="<?php echo esc_attr(get_the_title()); ?>"> 32 </a> 37 33 38 <div class="heavenlytics-property-meta"> 39 <?php if (!isset($atts['show_beds']) || $atts['show_beds'] !== 'no') : ?> 40 <?php $this->render_meta_item($meta_fields['bedrooms'], __('Beds', 'havenlytics'), 'beds'); ?> 34 35 <?php else : ?> 36 37 <div class="havenlytics-carousel-gallery" 38 id="havenlytics-carousel-gallery-<?php echo esc_attr($property_id); ?>"> 39 <div class="havenlytics-carousel-track"> 40 <?php 41 foreach ($gallery_images as $image_id) : 42 $image_url = wp_get_attachment_image_url($image_id, 'large'); 43 ?> 44 <div class="havenlytics-carousel-slide" 45 style="background-image: url('<?php echo esc_url($image_url); ?>');"> 46 </div> 47 <?php endforeach; ?> 48 </div> 49 50 <div class="havenlytics-carousel-nav"> 51 <button class="havenlytics-carousel-nav-btn havenlytics-carousel-prev-btn"> 52 <i class="fas fa-chevron-left"></i> 53 </button> 54 <button class="havenlytics-carousel-nav-btn havenlytics-carousel-next-btn"> 55 <i class="fas fa-chevron-right"></i> 56 </button> 57 </div> 58 59 <div class="havenlytics-carousel-indicators"> 60 <?php foreach ($gallery_images as $index => $image_id) : ?> 61 <div 62 class="havenlytics-carousel-indicator <?php echo (0 === $index) ? 'havenlytics-carousel-active' : ''; ?>"> 63 </div> 64 <?php endforeach; ?> 65 </div> 66 </div> 67 41 68 <?php endif; ?> 42 69 43 <?php if (!isset($atts['show_baths']) || $atts['show_baths'] !== 'no') : ?> 44 <?php $this->render_meta_item($meta_fields['bathrooms'], __('Baths', 'havenlytics'), 'baths'); ?> 70 71 72 <?php if ($meta_fields['price']) : ?> 73 <?php 74 // Get the currency symbol 75 $currency_sign = $this->get_currency_symbol($property_id); 76 ?> 77 <div class="havenlytics-property-amount"> 78 <h5><span><?php echo esc_html($currency_sign); ?> <?php echo esc_html($meta_fields['price']); ?> 79 </span></h5> 80 </div> 45 81 <?php endif; ?> 46 82 47 <?php if (!isset($atts['show_sqft']) || $atts['show_sqft'] !== 'no') : ?> 48 <?php $this->render_meta_item($meta_fields['sqft'], __('sqft', 'havenlytics'), 'sqft'); ?> 83 84 <?php if ($meta_fields['status_badge']) : ?> 85 <div class="havenlytics-property-featured"> 86 <span><?php echo esc_html($meta_fields['status_badge']); ?></span> 87 </div> 49 88 <?php endif; ?> 89 <!-- <div class="new-featured"> 90 <span>New</span> 91 </div> --> 92 <!-- <a href="javascript:void(0)"> 93 <div class="havenlytics-property-favourite havenlytics-property-selected"> 94 <i class="fa-regular fa-heart"></i> 95 </div> 96 </a> --> 50 97 </div> 98 <div class="havenlytics-property--content"> 99 <?php $this->render_star_feedback($property_id, '_havenlytics_rating_star'); ?> 51 100 52 <?php if (!isset($atts['show_excerpt']) || $atts['show_excerpt'] !== 'no') : ?> 53 <div class="heavenlytics-property-excerpt"> 101 <h3 class="havenlytics-property-title"> 102 <a href="<?php echo esc_url(get_the_permalink()); ?>"> 103 <?php echo esc_html(wp_trim_words(get_the_title(), 4, '...')); ?> 104 </a> 105 </h3> 54 106 55 <?php echo esc_html(wp_trim_words(get_the_excerpt(), $excerpt_length)); ?>56 </div>57 <?php endif; ?>58 107 59 <div class="heavenlytics-property-footer"> 60 <?php if ((!isset($atts['show_location']) || $atts['show_location'] !== 'no') && $meta_fields['city']) : ?> 61 <div class="heavenlytics-property-location"> 62 <svg viewBox="0 0 24 24"> 63 <path 64 d="M12,11.5A2.5,2.5 0 0,1 9.5,9A2.5,2.5 0 0,1 12,6.5A2.5,2.5 0 0,1 14.5,9A2.5,2.5 0 0,1 12,11.5M12,2A7,7 0 0,0 5,9C5,14.25 12,22 12,22C12,22 19,14.25 19,9A7,7 0 0,0 12,2Z" /> 65 </svg> 66 <?php echo esc_html($meta_fields['city']); ?> 67 </div> 108 109 <?php if ($meta_fields['city']) : ?> 110 <p class="havenlytics-property-location"> 111 <svg class="custom-icon" width="20px" height="20px" viewBox="0 0 24 24" fill="#6C60FE"> 112 <path 113 d="M12,11.5A2.5,2.5 0 0,1 9.5,9A2.5,2.5 0 0,1 12,6.5A2.5,2.5 0 0,1 14.5,9A2.5,2.5 0 0,1 12,11.5M12,2A7,7 0 0,0 5,9C5,14.25 12,22 12,22C12,22 19,14.25 19,9A7,7 0 0,0 12,2Z" /> 114 </svg> 115 <?php echo esc_html($meta_fields['city']); ?> 116 </p> 117 <?php endif; ?> 118 <?php if (! empty($meta_fields['bedrooms']) || ! empty($meta_fields['bathrooms']) || ! empty($meta_fields['sqft'])) : ?> 119 <ul class="d-flex havenlytics-property-short-details"> 120 <li> 121 122 <?php $this->render_meta_item($meta_fields['bedrooms'], __('Beds', 'havenlytics'), 'beds'); ?> 123 </li> 124 <li> 125 126 <?php $this->render_meta_item($meta_fields['bathrooms'], __('Baths', 'havenlytics'), 'baths'); ?> 127 </li> 128 <li> 129 130 <?php $this->render_meta_item($meta_fields['sqft'], __('sqft', 'havenlytics'), 'sqft'); ?> 131 </li> 132 </ul> 68 133 <?php endif; ?> 69 134 70 <a href="<?php the_permalink(); ?>" class="heavenlytics-property-link"> 71 <?php esc_html_e('View Details', 'havenlytics'); ?> 72 </a> 135 <ul class="havenlytics-property-category d-flex justify-content-between align-items-center"> 136 <!-- <li class="havenlytics-property-user-info"> 137 <?php 138 // $author_id = get_post_field('post_author', get_the_ID()); 139 // $avatar_url = get_avatar_url($author_id, ['size' => 96]); 140 // $author_name = get_the_author_meta('display_name', $author_id); 141 // $author_url = get_author_posts_url($author_id); 142 // $user_location = get_user_meta($author_id, 'location', true); // Optional custom meta 143 // $user_location = $user_location ? $user_location : esc_html__('Agent', 'havenlytics'); 144 ?> 145 146 <a href="<?php // echo esc_url($author_url); 147 ?>"> 148 <img src="<?php // echo esc_url($avatar_url); 149 ?>" class="img-fluid avatar" 150 alt="<?php // echo esc_attr($author_name); 151 ?>"> 152 </a> 153 <div class="havenlytics-property-user-name"> 154 <a href="<?php //echo esc_url($author_url); 155 ?>"><?php //echo esc_html($author_name); 156 ?></a> 157 <p><?php //echo esc_html($user_location); 158 ?></p> 159 </div> 160 161 </li> --> 162 <li> 163 <a href="<?php the_permalink(); ?>" class="havenlytics-btn-primary havenlytics-btn-style-2"> 164 <?php esc_html_e('View Property', 'havenlytics'); ?> 165 </a> 166 </li> 167 </ul> 73 168 </div> 74 169 </div> 75 170 </div> 76 171 </div> 172 <!-- /Property grid -->
Note: See TracChangeset
for help on using the changeset viewer.