- 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>
		
			
				
	
	
		
			162 lines
		
	
	
		
			No EOL
		
	
	
		
			6 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			162 lines
		
	
	
		
			No EOL
		
	
	
		
			6 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
| #!/bin/bash
 | |
| 
 | |
| # Create Find a Trainer page on staging
 | |
| # Usage: ./scripts/create-find-trainer-page.sh
 | |
| 
 | |
| source .env
 | |
| 
 | |
| echo "=== Creating Find a Trainer Page on Staging ==="
 | |
| 
 | |
| # SSH into staging and create the page
 | |
| ssh -o StrictHostKeyChecking=no "$UPSKILL_STAGING_SSH_USER@$UPSKILL_STAGING_IP" << 'ENDSSH'
 | |
| cd /home/974670.cloudwaysapps.com/uberrxmprk/public_html
 | |
| 
 | |
| # Create the Find a Trainer page via WP-CLI
 | |
| wp eval '
 | |
| // Initialize Find a Trainer page
 | |
| if (class_exists("HVAC_Find_Trainer_Page")) {
 | |
|     $finder = HVAC_Find_Trainer_Page::get_instance();
 | |
|     $finder->register_page();
 | |
|     echo "Find a Trainer page initialization triggered\n";
 | |
| }
 | |
| 
 | |
| // Also directly create the page if it doesnt exist
 | |
| $page = get_page_by_path("find-a-trainer");
 | |
| if (!$page) {
 | |
|     $page_content = "<!-- wp:group {\"className\":\"hvac-find-trainer-wrapper ast-container\"} -->
 | |
| <div class=\"wp-block-group hvac-find-trainer-wrapper ast-container\">
 | |
|     
 | |
|     <!-- wp:group {\"className\":\"hvac-find-trainer-intro\"} -->
 | |
|     <div class=\"wp-block-group hvac-find-trainer-intro\">
 | |
|         <!-- wp:paragraph -->
 | |
|         <p>Find certified HVAC trainers in your area. Use the interactive map and filters below to discover trainers who match your specific needs. Click on any trainer to view their profile and contact them directly.</p>
 | |
|         <!-- /wp:paragraph -->
 | |
|     </div>
 | |
|     <!-- /wp:group -->
 | |
|     
 | |
|     <!-- wp:columns {\"className\":\"hvac-map-filter-section\"} -->
 | |
|     <div class=\"wp-block-columns hvac-map-filter-section\">
 | |
|         
 | |
|         <!-- wp:column {\"width\":\"66.66%\",\"className\":\"hvac-map-container\"} -->
 | |
|         <div class=\"wp-block-column hvac-map-container\" style=\"flex-basis:66.66%\">
 | |
|             <!-- wp:shortcode -->
 | |
|             [display-map id=\"5872\"]
 | |
|             <!-- /wp:shortcode -->
 | |
|         </div>
 | |
|         <!-- /wp:column -->
 | |
|         
 | |
|         <!-- wp:column {\"width\":\"33.33%\",\"className\":\"hvac-filter-sidebar\"} -->
 | |
|         <div class=\"wp-block-column hvac-filter-sidebar\" style=\"flex-basis:33.33%\">
 | |
|             <!-- wp:html -->
 | |
|             <div class=\"hvac-filter-controls\">
 | |
|                 <input type=\"text\" class=\"hvac-search-input\" placeholder=\"Search trainers...\" aria-label=\"Search trainers\">
 | |
|                 <div class=\"hvac-filter-label\">Filters:</div>
 | |
|                 <button class=\"hvac-filter-button\" data-filter=\"state\" aria-label=\"Filter by State or Province\">
 | |
|                     <span class=\"hvac-filter-icon\">▼</span> State / Province
 | |
|                 </button>
 | |
|                 <button class=\"hvac-filter-button\" data-filter=\"business_type\" aria-label=\"Filter by Business Type\">
 | |
|                     <span class=\"hvac-filter-icon\">▼</span> Business Type
 | |
|                 </button>
 | |
|                 <button class=\"hvac-filter-button\" data-filter=\"training_format\" aria-label=\"Filter by Training Format\">
 | |
|                     <span class=\"hvac-filter-icon\">▼</span> Training Format
 | |
|                 </button>
 | |
|                 <button class=\"hvac-filter-button\" data-filter=\"training_resources\" aria-label=\"Filter by Training Resources\">
 | |
|                     <span class=\"hvac-filter-icon\">▼</span> Training Resources
 | |
|                 </button>
 | |
|                 <div class=\"hvac-active-filters\"></div>
 | |
|             </div>
 | |
|             <!-- /wp:html -->
 | |
|         </div>
 | |
|         <!-- /wp:column -->
 | |
|         
 | |
|     </div>
 | |
|     <!-- /wp:columns -->
 | |
|     
 | |
|     <!-- wp:shortcode -->
 | |
|     [hvac_trainer_directory]
 | |
|     <!-- /wp:shortcode -->
 | |
|     
 | |
|     <!-- wp:group {\"className\":\"hvac-trainer-cta\"} -->
 | |
|     <div class=\"wp-block-group hvac-trainer-cta\">
 | |
|         <!-- wp:paragraph -->
 | |
|         <p>Are you an HVAC Trainer that wants to be listed in our directory?</p>
 | |
|         <!-- /wp:paragraph -->
 | |
|         <!-- wp:buttons -->
 | |
|         <div class=\"wp-block-buttons\">
 | |
|             <!-- wp:button {\"className\":\"hvac-become-trainer-btn\"} -->
 | |
|             <div class=\"wp-block-button hvac-become-trainer-btn\">
 | |
|                 <a class=\"wp-block-button__link\" href=\"/trainer-registration/\">Become a Trainer</a>
 | |
|             </div>
 | |
|             <!-- /wp:button -->
 | |
|         </div>
 | |
|         <!-- /wp:buttons -->
 | |
|     </div>
 | |
|     <!-- /wp:group -->
 | |
|     
 | |
| </div>
 | |
| <!-- /wp:group -->";
 | |
|     
 | |
|     $page_data = [
 | |
|         "post_title"    => "Find a Trainer",
 | |
|         "post_name"     => "find-a-trainer",
 | |
|         "post_content"  => $page_content,
 | |
|         "post_status"   => "publish",
 | |
|         "post_type"     => "page",
 | |
|         "post_author"   => 1,
 | |
|         "meta_input"    => [
 | |
|             "_wp_page_template" => "default",
 | |
|             "ast-site-content-layout" => "page-builder",
 | |
|             "site-post-title" => "disabled",
 | |
|             "site-sidebar-layout" => "no-sidebar",
 | |
|             "ast-main-header-display" => "enabled",
 | |
|             "ast-hfb-above-header-display" => "disabled",
 | |
|             "ast-hfb-below-header-display" => "disabled",
 | |
|             "ast-featured-img" => "disabled"
 | |
|         ]
 | |
|     ];
 | |
|     
 | |
|     $page_id = wp_insert_post($page_data);
 | |
|     
 | |
|     if ($page_id && !is_wp_error($page_id)) {
 | |
|         update_option("hvac_find_trainer_page_id", $page_id);
 | |
|         echo "Find a Trainer page created successfully (ID: $page_id)\n";
 | |
|     } else {
 | |
|         echo "Error creating Find a Trainer page\n";
 | |
|     }
 | |
| } else {
 | |
|     echo "Find a Trainer page already exists\n";
 | |
| }
 | |
| '
 | |
| 
 | |
| # Create database table
 | |
| wp eval '
 | |
| if (class_exists("HVAC_Contact_Submissions_Table")) {
 | |
|     HVAC_Contact_Submissions_Table::create_table();
 | |
|     echo "Contact submissions table created\n";
 | |
| } else {
 | |
|     echo "HVAC_Contact_Submissions_Table class not found\n";
 | |
| }
 | |
| '
 | |
| 
 | |
| # Flush rewrite rules
 | |
| wp rewrite flush
 | |
| echo "Rewrite rules flushed"
 | |
| 
 | |
| # Clear cache
 | |
| wp cache flush
 | |
| echo "Cache cleared"
 | |
| 
 | |
| ENDSSH
 | |
| 
 | |
| echo "=== Verifying Page Creation ==="
 | |
| 
 | |
| # Check if page is accessible
 | |
| HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" https://upskill-staging.measurequick.com/find-a-trainer/)
 | |
| if [ "$HTTP_CODE" = "200" ]; then
 | |
|     echo "✅ Find a Trainer page is accessible (HTTP $HTTP_CODE)"
 | |
|     echo "URL: https://upskill-staging.measurequick.com/find-a-trainer/"
 | |
| else
 | |
|     echo "⚠️ Find a Trainer page returned HTTP $HTTP_CODE"
 | |
| fi
 | |
| 
 | |
| echo "=== Setup Complete ===" |