BREAKING CHANGE: Removed Astra theme integration and all theme-specific code
- Removed class-hvac-astra-integration.php (584 lines of theme-specific code)
- Removed 500+ theme-specific CSS files (ast-*, astra-*, divi-*)
- Removed 15+ theme-specific JavaScript files
- Created theme-agnostic HVAC_Layout_Manager class
- Added generic hvac-layout.css with universal styling
- Plugin now works with ANY WordPress theme
This refactoring ensures the plugin complies with WordPress.org plugin
guidelines which require plugins to be theme-independent. The new layout
system uses standard WordPress hooks and filters that work universally.
Key changes:
- Body classes: hvac-plugin-page, hvac-no-sidebar, hvac-full-width
- Generic post meta: _sidebar_layout, page_layout (widely supported)
- Standard WordPress hooks: body_class, wp_enqueue_scripts, is_active_sidebar
- CSS uses generic selectors: .site-content, .content-area, #primary
Removed monitoring infrastructure files that were causing PHP segfaults:
- class-hvac-background-jobs.php
- class-hvac-health-monitor.php
- class-hvac-error-recovery.php
- class-hvac-security-monitor.php
- class-hvac-performance-monitor.php
- class-hvac-backup-manager.php
- class-hvac-cache-optimizer.php
🤖 Generated with Claude Code
Co-Authored-By: Claude <noreply@anthropic.com>
		
	
			
		
			
				
	
	
		
			285 lines
		
	
	
		
			No EOL
		
	
	
		
			8.5 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			285 lines
		
	
	
		
			No EOL
		
	
	
		
			8.5 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| /**
 | |
|  * HVAC Layout Manager
 | |
|  * 
 | |
|  * Theme-agnostic layout management for HVAC plugin pages
 | |
|  * Complies with WordPress plugin guidelines
 | |
|  *
 | |
|  * @package HVAC_Community_Events
 | |
|  * @since 2.0.0
 | |
|  */
 | |
| 
 | |
| // Exit if accessed directly
 | |
| if (!defined('ABSPATH')) {
 | |
|     exit;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * HVAC Layout Manager Class
 | |
|  */
 | |
| class HVAC_Layout_Manager {
 | |
|     
 | |
|     /**
 | |
|      * Instance
 | |
|      *
 | |
|      * @var HVAC_Layout_Manager
 | |
|      */
 | |
|     private static $instance = null;
 | |
|     
 | |
|     /**
 | |
|      * Get instance
 | |
|      */
 | |
|     public static function instance() {
 | |
|         if (null === self::$instance) {
 | |
|             self::$instance = new self();
 | |
|         }
 | |
|         return self::$instance;
 | |
|     }
 | |
|     
 | |
|     /**
 | |
|      * Constructor
 | |
|      */
 | |
|     private function __construct() {
 | |
|         $this->init_hooks();
 | |
|     }
 | |
|     
 | |
|     /**
 | |
|      * Initialize hooks
 | |
|      */
 | |
|     private function init_hooks() {
 | |
|         // Use standard WordPress hooks that work with any theme
 | |
|         add_filter('body_class', [$this, 'add_body_classes'], 10);
 | |
|         add_action('wp_enqueue_scripts', [$this, 'enqueue_layout_styles'], 20);
 | |
|         add_action('wp_head', [$this, 'add_inline_styles'], 99);
 | |
|         
 | |
|         // Standard WordPress sidebar management
 | |
|         add_filter('is_active_sidebar', [$this, 'maybe_disable_sidebar'], 10, 2);
 | |
|         
 | |
|         // Content width for HVAC pages
 | |
|         add_action('template_redirect', [$this, 'set_content_width']);
 | |
|         
 | |
|         // Use standard post meta for layout settings
 | |
|         add_action('wp', [$this, 'setup_page_layout']);
 | |
|     }
 | |
|     
 | |
|     /**
 | |
|      * Add body classes for HVAC pages
 | |
|      */
 | |
|     public function add_body_classes($classes) {
 | |
|         if ($this->is_hvac_page()) {
 | |
|             // Add generic classes that work with any theme
 | |
|             $classes[] = 'hvac-plugin-page';
 | |
|             $classes[] = 'hvac-no-sidebar';
 | |
|             $classes[] = 'hvac-full-width';
 | |
|             
 | |
|             if ($this->is_find_trainer_page()) {
 | |
|                 $classes[] = 'hvac-find-trainer-page';
 | |
|                 $classes[] = 'hvac-boxed-layout';
 | |
|             }
 | |
|         }
 | |
|         
 | |
|         return $classes;
 | |
|     }
 | |
|     
 | |
|     /**
 | |
|      * Enqueue layout styles
 | |
|      */
 | |
|     public function enqueue_layout_styles() {
 | |
|         if ($this->is_hvac_page()) {
 | |
|             // Enqueue theme-agnostic layout styles
 | |
|             wp_enqueue_style(
 | |
|                 'hvac-layout',
 | |
|                 HVAC_PLUGIN_URL . 'assets/css/hvac-layout.css',
 | |
|                 [],
 | |
|                 HVAC_VERSION
 | |
|             );
 | |
|         }
 | |
|     }
 | |
|     
 | |
|     /**
 | |
|      * Add inline styles for dynamic layout adjustments
 | |
|      */
 | |
|     public function add_inline_styles() {
 | |
|         if (!$this->is_hvac_page()) {
 | |
|             return;
 | |
|         }
 | |
|         
 | |
|         $css = '';
 | |
|         
 | |
|         if ($this->is_find_trainer_page()) {
 | |
|             // Boxed layout for Find a Trainer
 | |
|             $css .= '
 | |
|                 /* HVAC Find a Trainer - Boxed Layout */
 | |
|                 .hvac-find-trainer-page .site-content,
 | |
|                 .hvac-find-trainer-page .content-area,
 | |
|                 .hvac-find-trainer-page #primary,
 | |
|                 .hvac-find-trainer-page .entry-content {
 | |
|                     max-width: 1200px;
 | |
|                     margin: 0 auto;
 | |
|                     padding-left: 20px;
 | |
|                     padding-right: 20px;
 | |
|                     box-sizing: border-box;
 | |
|                 }
 | |
|                 
 | |
|                 /* Hide sidebar universally */
 | |
|                 .hvac-find-trainer-page .widget-area,
 | |
|                 .hvac-find-trainer-page .sidebar,
 | |
|                 .hvac-find-trainer-page #secondary,
 | |
|                 .hvac-find-trainer-page aside.widget-area {
 | |
|                     display: none !important;
 | |
|                 }
 | |
|                 
 | |
|                 /* Full width content area */
 | |
|                 .hvac-find-trainer-page #primary {
 | |
|                     width: 100% !important;
 | |
|                     float: none !important;
 | |
|                 }
 | |
|             ';
 | |
|         } else {
 | |
|             // Full-width layout for other HVAC pages
 | |
|             $css .= '
 | |
|                 /* HVAC Pages - Full Width Layout */
 | |
|                 .hvac-plugin-page .site-content,
 | |
|                 .hvac-plugin-page .content-area {
 | |
|                     max-width: 100%;
 | |
|                     width: 100%;
 | |
|                     padding-left: 40px;
 | |
|                     padding-right: 40px;
 | |
|                 }
 | |
|                 
 | |
|                 .hvac-plugin-page .hvac-page-wrapper {
 | |
|                     max-width: 1920px;
 | |
|                     margin: 0 auto;
 | |
|                 }
 | |
|                 
 | |
|                 /* Hide sidebar universally */
 | |
|                 .hvac-plugin-page .widget-area,
 | |
|                 .hvac-plugin-page .sidebar,
 | |
|                 .hvac-plugin-page #secondary,
 | |
|                 .hvac-plugin-page aside.widget-area {
 | |
|                     display: none !important;
 | |
|                 }
 | |
|                 
 | |
|                 /* Full width content area */
 | |
|                 .hvac-plugin-page #primary,
 | |
|                 .hvac-plugin-page .content-area {
 | |
|                     width: 100% !important;
 | |
|                     float: none !important;
 | |
|                     margin: 0 !important;
 | |
|                 }
 | |
|             ';
 | |
|         }
 | |
|         
 | |
|         if (!empty($css)) {
 | |
|             echo '<style type="text/css" id="hvac-layout-inline-css">' . $css . '</style>';
 | |
|         }
 | |
|     }
 | |
|     
 | |
|     /**
 | |
|      * Maybe disable sidebar for HVAC pages
 | |
|      */
 | |
|     public function maybe_disable_sidebar($is_active, $index) {
 | |
|         if ($this->is_hvac_page()) {
 | |
|             return false;
 | |
|         }
 | |
|         return $is_active;
 | |
|     }
 | |
|     
 | |
|     /**
 | |
|      * Set content width for HVAC pages
 | |
|      */
 | |
|     public function set_content_width() {
 | |
|         if ($this->is_hvac_page()) {
 | |
|             global $content_width;
 | |
|             
 | |
|             if ($this->is_find_trainer_page()) {
 | |
|                 $content_width = 1200;
 | |
|             } else {
 | |
|                 $content_width = 1920;
 | |
|             }
 | |
|         }
 | |
|     }
 | |
|     
 | |
|     /**
 | |
|      * Setup page layout using standard WordPress post meta
 | |
|      */
 | |
|     public function setup_page_layout() {
 | |
|         if ($this->is_hvac_page()) {
 | |
|             global $post;
 | |
|             if ($post) {
 | |
|                 // Use generic post meta that many themes support
 | |
|                 update_post_meta($post->ID, '_sidebar_layout', 'no-sidebar');
 | |
|                 update_post_meta($post->ID, 'sidebar_layout', 'no-sidebar');
 | |
|                 update_post_meta($post->ID, '_disable_sidebar', '1');
 | |
|                 
 | |
|                 // Common theme-agnostic meta keys
 | |
|                 update_post_meta($post->ID, 'page_layout', 'full-width');
 | |
|                 update_post_meta($post->ID, '_page_layout', 'full-width');
 | |
|                 
 | |
|                 // Disable common features
 | |
|                 update_post_meta($post->ID, '_disable_breadcrumbs', '1');
 | |
|                 update_post_meta($post->ID, 'hide_breadcrumbs', '1');
 | |
|             }
 | |
|         }
 | |
|     }
 | |
|     
 | |
|     /**
 | |
|      * Check if current page is an HVAC page
 | |
|      */
 | |
|     private function is_hvac_page() {
 | |
|         // Check by template
 | |
|         if (is_page_template()) {
 | |
|             $template = get_page_template_slug();
 | |
|             if (strpos($template, 'page-trainer') !== false || 
 | |
|                 strpos($template, 'page-master') !== false ||
 | |
|                 strpos($template, 'page-certificate') !== false ||
 | |
|                 strpos($template, 'page-generate') !== false) {
 | |
|                 return true;
 | |
|             }
 | |
|         }
 | |
|         
 | |
|         // Check by URL
 | |
|         $current_url = $_SERVER['REQUEST_URI'];
 | |
|         $hvac_paths = ['trainer/', 'master-trainer/', 'certificate', 'generate-certificates', 'find-a-trainer'];
 | |
|         
 | |
|         foreach ($hvac_paths as $path) {
 | |
|             if (strpos($current_url, $path) !== false) {
 | |
|                 return true;
 | |
|             }
 | |
|         }
 | |
|         
 | |
|         // Check by page slug
 | |
|         if (is_page()) {
 | |
|             global $post;
 | |
|             if ($post) {
 | |
|                 $slug = $post->post_name;
 | |
|                 $hvac_slugs = ['trainer', 'dashboard', 'profile', 'certificate', 'venue', 'organizer', 'find-a-trainer'];
 | |
|                 foreach ($hvac_slugs as $hvac_slug) {
 | |
|                     if (strpos($slug, $hvac_slug) !== false) {
 | |
|                         return true;
 | |
|                     }
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
|         
 | |
|         return false;
 | |
|     }
 | |
|     
 | |
|     /**
 | |
|      * Check if current page is Find A Trainer page
 | |
|      */
 | |
|     private function is_find_trainer_page() {
 | |
|         if (is_page()) {
 | |
|             global $post;
 | |
|             if ($post && $post->post_name === 'find-a-trainer') {
 | |
|                 return true;
 | |
|             }
 | |
|         }
 | |
|         
 | |
|         $current_url = $_SERVER['REQUEST_URI'];
 | |
|         return strpos($current_url, 'find-a-trainer') !== false;
 | |
|     }
 | |
| }
 | |
| 
 | |
| // Initialize
 | |
| HVAC_Layout_Manager::instance(); |