';
echo '' . esc_html__('AEO Bob Lite Error:', 'aeo-bob-lite') . ' ';
echo esc_html(
sprintf(
/* translators: %s: Current PHP version */
__('This plugin requires PHP 7.4 or higher. Your current PHP version is %s. Please contact your hosting provider to upgrade PHP.', 'aeo-bob-lite'),
PHP_VERSION
)
);
echo '
';
});
return;
}
// Check WordPress version compatibility
if (version_compare(get_bloginfo('version'), '5.0', '<')) {
add_action('admin_notices', function() {
echo '';
echo '' . esc_html__('AEO Bob Lite Error:', 'aeo-bob-lite') . ' ';
echo esc_html__('This plugin requires WordPress 5.0 or higher. Please upgrade WordPress.', 'aeo-bob-lite');
echo '
';
});
return;
}
// Load AEO Bob Core (bundled library)
// Core classes are now bundled within the plugin for single-package installation
if (!class_exists('AEO_Bob_Database')) {
require_once dirname(__FILE__) . '/includes/core/class-aeo-bob-database.php';
}
if (!class_exists('AEO_Bob_Scoring')) {
require_once dirname(__FILE__) . '/includes/core/class-aeo-bob-scoring.php';
}
if (!class_exists('AEO_Bob_Audit')) {
require_once dirname(__FILE__) . '/includes/core/class-aeo-bob-audit.php';
}
if (!class_exists('AEO_Bob_AEO_Analyzer')) {
require_once dirname(__FILE__) . '/includes/core/class-aeo-bob-aeo-analyzer.php';
}
if (!class_exists('AEO_Bob_SEO_Analyzer')) {
require_once dirname(__FILE__) . '/includes/core/class-aeo-bob-seo-analyzer.php';
}
if (!class_exists('AEO_Bob_Issue_Miner')) {
require_once dirname(__FILE__) . '/includes/core/class-aeo-bob-issue-miner.php';
}
// Define plugin constants (with checks to prevent conflicts)
if ( ! defined( 'AEO_BOB_LITE_VERSION' ) ) {
define( 'AEO_BOB_LITE_VERSION', '1.5.76' );
}
if (!defined('AEO_BOB_LITE_FILE')) {
define('AEO_BOB_LITE_FILE', __FILE__);
}
if (!defined('AEO_BOB_LITE_PATH')) {
define('AEO_BOB_LITE_PATH', plugin_dir_path(__FILE__));
}
if (!defined('AEO_BOB_LITE_URL')) {
define('AEO_BOB_LITE_URL', plugin_dir_url(__FILE__));
}
// Define stub functions for core classes that expect Pro functions
if (!function_exists('aeo_bob_get')) {
function aeo_bob_get($key, $default = '') {
// For Lite, read from dedicated lite settings
if ($key === 'api_key' || $key === 'openai_api_key') {
return get_option('aeo_bob_lite_openai_key', $default);
}
return get_option('aeo_bob_lite_' . $key, $default);
}
}
if (!function_exists('aeo_bob_provider')) {
function aeo_bob_provider() {
return 'openai'; // Lite only supports OpenAI
}
}
if (!function_exists('aeo_bob_api_key_for')) {
function aeo_bob_api_key_for($provider = null) {
// Return OpenAI key from Lite settings
return get_option('aeo_bob_lite_openai_key', '');
}
}
if (!function_exists('aeo_bob_model')) {
function aeo_bob_model() {
return 'gpt-4o-mini'; // Lite uses cost-effective model
}
}
if (!function_exists('aeo_bob_model_alias')) {
function aeo_bob_model_alias($provider, $model) {
return $model; // No aliasing in Lite
}
}
/**
* Main AEO Bob Lite Class
*/
class AEO_Bob_Lite {
/**
* Single instance
*/
private static $instance = null;
/**
* Get singleton 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();
}
/**
* Load plugin dependencies
*/
private function load_dependencies() {
// Load Lite-specific classes
require_once AEO_BOB_LITE_PATH . 'includes/class-aeo-bob-lite-settings.php';
require_once AEO_BOB_LITE_PATH . 'includes/class-aeo-bob-lite-optimizer.php';
require_once AEO_BOB_LITE_PATH . 'includes/class-aeo-bob-lite-admin.php';
require_once AEO_BOB_LITE_PATH . 'includes/class-aeo-bob-lite-post-columns.php';
require_once AEO_BOB_LITE_PATH . 'includes/class-aeo-bob-lite-meta-box.php';
require_once AEO_BOB_LITE_PATH . 'includes/class-aeo-bob-lite-elementor.php';
}
/**
* Initialize WordPress hooks
*/
private function init_hooks() {
// Admin initialization
if (is_admin()) {
add_action('admin_menu', array($this, 'add_admin_menu'));
add_action('admin_enqueue_scripts', array($this, 'enqueue_admin_assets'));
// Initialize admin class (for AJAX handlers)
AEO_Bob_Lite_Admin::get_instance();
// Initialize post columns
AEO_Bob_Lite_Post_Columns::get_instance();
// Initialize meta box (includes both sidebar and main optimization panel)
AEO_Bob_Lite_Meta_Box::get_instance();
}
// Initialize Elementor integration (checks for Elementor internally)
AEO_Bob_Lite_Elementor::get_instance();
// Settings link on plugins page
add_filter('plugin_action_links_' . plugin_basename(AEO_BOB_LITE_FILE), array($this, 'add_action_links'));
}
/**
* Add admin menu
*/
public function add_admin_menu() {
add_menu_page(
__('AEO Bob Lite', 'aeo-bob-lite'),
__('AEO Bob', 'aeo-bob-lite'),
'manage_options',
'aeo-bob-lite',
array($this, 'render_dashboard'),
'dashicons-chart-line',
30
);
add_submenu_page(
'aeo-bob-lite',
__('Dashboard', 'aeo-bob-lite'),
__('Dashboard', 'aeo-bob-lite'),
'manage_options',
'aeo-bob-lite',
array($this, 'render_dashboard')
);
add_submenu_page(
'aeo-bob-lite',
__('Settings', 'aeo-bob-lite'),
__('Settings', 'aeo-bob-lite'),
'manage_options',
'aeo-bob-lite-settings',
array($this, 'render_settings_page')
);
add_submenu_page(
'aeo-bob-lite',
__('Go Pro', 'aeo-bob-lite'),
__( 'Go Pro', 'aeo-bob-lite' ),
'manage_options',
'aeo-bob-lite-upgrade',
array($this, 'render_upgrade_page')
);
}
/**
* Render dashboard page
*/
public function render_dashboard() {
include AEO_BOB_LITE_PATH . 'admin/dashboard.php';
}
/**
* Render settings page
*/
public function render_settings_page() {
$settings = AEO_Bob_Lite_Settings::get_instance();
$settings->render_settings_page();
}
/**
* Render upgrade page
*/
public function render_upgrade_page() {
include AEO_BOB_LITE_PATH . 'admin/upgrade.php';
}
/**
* Enqueue admin assets
*/
public function enqueue_admin_assets($hook) {
// Only load on our pages and post list screens
if (strpos($hook, 'aeo-bob-lite') === false && !in_array($hook, array('post.php', 'post-new.php', 'edit.php'))) {
return;
}
// CSS
wp_enqueue_style(
'aeo-bob-lite-admin',
AEO_BOB_LITE_URL . 'assets/css/admin.css',
array(),
AEO_BOB_LITE_VERSION
);
// JS
wp_enqueue_script(
'aeo-bob-lite-admin',
AEO_BOB_LITE_URL . 'assets/js/admin.js',
array('jquery'),
AEO_BOB_LITE_VERSION,
true
);
// Localize script
wp_localize_script('aeo-bob-lite-admin', 'aeoBobLite', array(
'ajaxurl' => admin_url('admin-ajax.php'),
'nonce' => wp_create_nonce('aeo_bob_lite_nonce'),
'version' => AEO_BOB_LITE_VERSION,
'proUrl' => 'https://aeobob.com/#choose-your-plan',
'i18n' => array(
'panelNotFound' => __( 'Optimization panel not found. Please save your post first, or configure your API key in AEO Bob settings.', 'aeo-bob-lite' ),
'analysisComplete' => __( 'Analysis complete!', 'aeo-bob-lite' ),
'analysisFailed' => __( 'Analysis failed. Please try again.', 'aeo-bob-lite' ),
'networkError' => __( 'Network error. Please check your connection and try again.', 'aeo-bob-lite' ),
'analyze' => __( 'ANALYZE', 'aeo-bob-lite' ),
'analyzing' => __( 'Analyzing...', 'aeo-bob-lite' ),
'addContent' => __( 'Please add some content before analyzing.', 'aeo-bob-lite' ),
'noHints' => __( 'No hints available.', 'aeo-bob-lite' ),
'upgradeToPro' => __( 'Upgrade to Pro', 'aeo-bob-lite' ),
),
));
}
/**
* Add action links on plugins page
*/
public function add_action_links($links) {
$custom_links = array(
'' . __('Dashboard', 'aeo-bob-lite') . '',
'' . __('Go Pro', 'aeo-bob-lite') . '',
);
return array_merge($custom_links, $links);
}
}
// Initialize plugin
function aeo_bob_lite() {
return AEO_Bob_Lite::get_instance();
}
/**
* Plugin activation callback
*/
function aeo_bob_lite_activate() {
// Create database tables (using singleton pattern - NOT new!)
if (class_exists('AEO_Bob_Database')) {
$database = AEO_Bob_Database::get_instance();
$database->create_tables();
}
// Set default options
add_option('aeo_bob_lite_version', AEO_BOB_LITE_VERSION);
add_option('aeo_bob_lite_installed', time());
// Flush rewrite rules
flush_rewrite_rules();
}
/**
* Plugin deactivation callback
*/
function aeo_bob_lite_deactivate() {
// Clean up (but don't delete data)
flush_rewrite_rules();
}
// Register activation/deactivation hooks (BEFORE plugin starts)
register_activation_hook(__FILE__, 'aeo_bob_lite_activate');
register_deactivation_hook(__FILE__, 'aeo_bob_lite_deactivate');
// Start the plugin
aeo_bob_lite();