- Created Find a Trainer page with interactive map and trainer directory - Integrated MapGeo plugin for displaying 45+ geocoded trainer locations - Built advanced filtering system (State/Province, Business Type, Training Format, Training Resources) - Implemented trainer profile cards with View Profile and See Events buttons - Added contact form handler with validation and email notifications - Created database table for tracking contact submissions - Responsive design with mobile-friendly layout - AJAX-powered search and filter functionality - Pagination support for trainer directory - Call to action for trainer registration Technical Implementation: - HVAC_Find_Trainer_Page: Main page handler with custom template - HVAC_MapGeo_Integration: Map marker management for trainer locations - HVAC_Contact_Form_Handler: Form processing with rate limiting - HVAC_Trainer_Directory_Query: Advanced querying with caching - HVAC_Contact_Submissions_Table: Database operations for submissions Tested with existing 53 trainer profiles, 45 geocoded locations Page live at: /find-a-trainer/ Co-Authored-By: Ben Reed <ben@tealmaker.com>
		
			
				
	
	
		
			117 lines
		
	
	
		
			No EOL
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			117 lines
		
	
	
		
			No EOL
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
| #!/bin/bash
 | |
| 
 | |
| # Analyze MapGeo data structure
 | |
| # Usage: ./scripts/analyze-mapgeo-data.sh
 | |
| 
 | |
| source .env
 | |
| 
 | |
| echo "=== Analyzing MapGeo Data Structure ==="
 | |
| 
 | |
| ssh -o StrictHostKeyChecking=no "$UPSKILL_STAGING_SSH_USER@$UPSKILL_STAGING_IP" << 'ENDSSH'
 | |
| cd /home/974670.cloudwaysapps.com/uberrxmprk/public_html
 | |
| 
 | |
| echo "=== Getting map metadata for ID 5872 ==="
 | |
| wp eval '
 | |
| $map_id = 5872;
 | |
| $meta = get_post_meta($map_id);
 | |
| 
 | |
| echo "Post meta keys for map $map_id:\n";
 | |
| foreach ($meta as $key => $values) {
 | |
|     if (strpos($key, "_") !== 0) { // Skip private meta
 | |
|         echo "  $key: ";
 | |
|         $value = $values[0];
 | |
|         if (is_serialized($value)) {
 | |
|             $unserialized = unserialize($value);
 | |
|             if (is_array($unserialized)) {
 | |
|                 echo "array with " . count($unserialized) . " items\n";
 | |
|                 if (isset($unserialized["markers"])) {
 | |
|                     echo "    - Has markers: " . count($unserialized["markers"]) . "\n";
 | |
|                 }
 | |
|                 if (isset($unserialized["regions"])) {
 | |
|                     echo "    - Has regions: " . count($unserialized["regions"]) . "\n";
 | |
|                 }
 | |
|             } else {
 | |
|                 echo gettype($unserialized) . "\n";
 | |
|             }
 | |
|         } else {
 | |
|             echo substr($value, 0, 100) . (strlen($value) > 100 ? "..." : "") . "\n";
 | |
|         }
 | |
|     }
 | |
| }
 | |
| '
 | |
| 
 | |
| echo -e "\n=== Checking igm_maps option ==="
 | |
| wp eval '
 | |
| $maps_data = get_option("igm_maps");
 | |
| if ($maps_data) {
 | |
|     echo "igm_maps option exists\n";
 | |
|     if (is_array($maps_data)) {
 | |
|         echo "Contains " . count($maps_data) . " maps\n";
 | |
|         if (isset($maps_data[5872])) {
 | |
|             echo "Map 5872 data found in option\n";
 | |
|             $map = $maps_data[5872];
 | |
|             if (is_array($map)) {
 | |
|                 echo "Map data keys: " . implode(", ", array_keys($map)) . "\n";
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| } else {
 | |
|     echo "No igm_maps option found\n";
 | |
| }
 | |
| '
 | |
| 
 | |
| echo -e "\n=== Testing igm_add_meta filter directly ==="
 | |
| wp eval '
 | |
| // Simulate what the plugin does
 | |
| $map_id = 5872;
 | |
| $meta = get_post_meta($map_id, "map_info", true);
 | |
| 
 | |
| if ($meta) {
 | |
|     echo "Original meta structure:\n";
 | |
|     echo "  Type: " . gettype($meta) . "\n";
 | |
|     if (is_array($meta)) {
 | |
|         echo "  Keys: " . implode(", ", array_keys($meta)) . "\n";
 | |
|         if (isset($meta["id"])) {
 | |
|             echo "  Map ID in meta: " . $meta["id"] . "\n";
 | |
|         }
 | |
|     }
 | |
|     
 | |
|     // Apply the filter as the plugin would
 | |
|     echo "\nApplying igm_add_meta filter...\n";
 | |
|     $filtered = apply_filters("igm_add_meta", $meta);
 | |
|     
 | |
|     if ($filtered !== $meta) {
 | |
|         echo "Meta was modified by filters\n";
 | |
|         if (is_array($filtered)) {
 | |
|             echo "  New keys: " . implode(", ", array_keys($filtered)) . "\n";
 | |
|         }
 | |
|     } else {
 | |
|         echo "Meta unchanged by filters\n";
 | |
|     }
 | |
| } else {
 | |
|     echo "No map_info meta found for map $map_id\n";
 | |
| }
 | |
| '
 | |
| 
 | |
| echo -e "\n=== Checking how maps are rendered ==="
 | |
| wp eval '
 | |
| // Check what happens when we render a map
 | |
| echo "Attempting to render map 5872...\n";
 | |
| $shortcode_output = do_shortcode("[display-map id=\"5872\"]");
 | |
| if (strpos($shortcode_output, "error") !== false || strpos($shortcode_output, "Error") !== false) {
 | |
|     echo "Error in shortcode output: " . strip_tags($shortcode_output) . "\n";
 | |
| } else {
 | |
|     echo "Shortcode rendered successfully\n";
 | |
|     // Check if it contains expected elements
 | |
|     if (strpos($shortcode_output, "igm-map") !== false) {
 | |
|         echo "  Contains igm-map element\n";
 | |
|     }
 | |
|     if (strpos($shortcode_output, "data-map-id") !== false) {
 | |
|         echo "  Contains data-map-id attribute\n";
 | |
|     }
 | |
| }
 | |
| '
 | |
| 
 | |
| ENDSSH
 | |
| 
 | |
| echo "=== Analysis Complete ===" |