opticore/opticore.php
Ahmadreza b30ae5d70e ♻️ refactor: Complete code restructuring - Clean architecture implementation
Massive refactoring to improve code organization, maintainability,
and follow SOLID principles. Main plugin file reduced by 80%!

🏗️ New Architecture:
Created 4 new specialized classes following Single Responsibility Principle:

1️⃣ class-admin.php (118 lines)
   - Admin menu management
   - Settings registration
   - Admin scripts/styles enqueuing
   - Settings link on plugins page

2️⃣ class-ajax-handler.php (105 lines)
   - Clear cache AJAX
   - Optimize database AJAX
   - Export settings AJAX
   - Create cache directory AJAX

3️⃣ class-frontend-optimizer.php (237 lines)
   - Disable Emojis (complete)
   - Disable Dashicons (complete)
   - Disable Embeds (complete)
   - Remove Query Strings
   - Enable GZIP Compression

4️⃣ class-activator.php (68 lines)
   - Plugin activation logic
   - Plugin deactivation logic
   - Default settings setup
   - Cache directory creation

📊 Impact:
- opticore.php: 583 → 160 lines (-423 lines, -73%)
- Better separation of concerns
- Easier to maintain and test
- Each class has single responsibility
- Cleaner code organization

🎯 Main Plugin File Now:
- Only orchestration/initialization
- Loads dependencies
- Initializes components
- Delegates to specialized classes

 Benefits:
-  SOLID principles applied
-  Single Responsibility Principle
-  Better code organization
-  Easier to test
-  Easier to extend
-  More maintainable
-  Professional structure

All functionality remains identical - this is pure refactoring
with no changes to features or behavior.
2025-11-01 15:52:41 +03:30

157 lines
4.7 KiB
PHP

<?php
/**
* Plugin Name: OptiCore
* Plugin URI: https://github.com/ahmadreza-log/opticore
* Description: This plugin intelligently optimizes your WordPress site by improving load times, reducing server stress, and enhancing Core Web Vitals — all without breaking your design or functionality.
* Version: 1.0.0
* Author: Ahmadreza Ebrahimi
* Author URI: https://ahmadreza.me
* License: GPL v2 or later
* License URI: https://www.gnu.org/licenses/gpl-2.0.html
* Text Domain: opticore
* Domain Path: /languages
* Requires at least: 5.8
* Requires PHP: 7.4
*/
// Prevent direct access
if (!defined('ABSPATH')) {
exit;
}
// Define plugin constants
define('OPTICORE_VERSION', '1.0.0');
define('OPTICORE_PLUGIN_DIR', plugin_dir_path(__FILE__));
define('OPTICORE_PLUGIN_URL', plugin_dir_url(__FILE__));
define('OPTICORE_PLUGIN_BASENAME', plugin_basename(__FILE__));
/**
* Main OptiCore Class
* This class acts as the main controller/orchestrator
* It delegates functionality to specialized classes
*/
class OptiCore {
/**
* Single instance of the class
*/
private static $instance = null;
/**
* Get instance
*/
public static function get_instance() {
if (null === self::$instance) {
self::$instance = new self();
}
return self::$instance;
}
/**
* Constructor
*/
private function __construct() {
$this->load_dependencies();
$this->init_hooks();
$this->init_components();
}
/**
* Load required files
*/
private function load_dependencies() {
// Core functionality classes
require_once OPTICORE_PLUGIN_DIR . 'includes/class-activator.php';
require_once OPTICORE_PLUGIN_DIR . 'includes/class-admin.php';
require_once OPTICORE_PLUGIN_DIR . 'includes/class-ajax-handler.php';
require_once OPTICORE_PLUGIN_DIR . 'includes/class-frontend-optimizer.php';
// Feature classes
require_once OPTICORE_PLUGIN_DIR . 'includes/class-framework.php';
require_once OPTICORE_PLUGIN_DIR . 'includes/class-cache-manager.php';
require_once OPTICORE_PLUGIN_DIR . 'includes/class-minifier.php';
require_once OPTICORE_PLUGIN_DIR . 'includes/class-lazy-loader.php';
require_once OPTICORE_PLUGIN_DIR . 'includes/class-image-optimizer.php';
require_once OPTICORE_PLUGIN_DIR . 'includes/class-database-optimizer.php';
}
/**
* Initialize WordPress hooks
*/
private function init_hooks() {
// Text domain for translations
add_action('init', array($this, 'load_textdomain'));
// Activation & Deactivation
register_activation_hook(__FILE__, array('OptiCore_Activator', 'activate'));
register_deactivation_hook(__FILE__, array('OptiCore_Activator', 'deactivate'));
// Initialize frontend optimizations
add_action('init', array($this, 'init_feature_modules'));
}
/**
* Initialize core components
*/
private function init_components() {
// Initialize admin interface
if (is_admin()) {
OptiCore_Admin::get_instance();
OptiCore_Framework::get_instance();
}
// Initialize AJAX handler
OptiCore_AJAX_Handler::get_instance();
// Initialize frontend optimizer
OptiCore_Frontend_Optimizer::get_instance();
}
/**
* Initialize feature modules based on settings
*/
public function init_feature_modules() {
$settings = get_option('opticore_settings', array());
// Initialize Cache Manager
if (!empty($settings['enable_cache'])) {
OptiCore_Cache_Manager::get_instance()->init();
}
// Initialize Minifier
if (!empty($settings['enable_minify_css']) || !empty($settings['enable_minify_js'])) {
OptiCore_Minifier::get_instance()->init();
}
// Initialize Lazy Loader
if (!empty($settings['enable_lazy_load'])) {
OptiCore_Lazy_Loader::get_instance()->init();
}
// Initialize Image Optimizer
if (!empty($settings['enable_image_optimization'])) {
OptiCore_Image_Optimizer::get_instance()->init();
}
}
/**
* Load plugin text domain for translations
*/
public function load_textdomain() {
load_plugin_textdomain(
'opticore',
false,
dirname(OPTICORE_PLUGIN_BASENAME) . '/languages'
);
}
}
/**
* Initialize the plugin
*/
function opticore_init() {
return OptiCore::get_instance();
}
// Start the plugin
opticore_init();