preload_critical_classes(); // Initialize the plugin with singleton pattern function aicg_init() { static $initialized = false; if ($initialized) { return; } $plugin = AI_Content_Generator::get_instance(); $plugin->run(); // Initialize additional components new AICG_Admin_Bar(); new AICG_REST_API(); new AICG_Admin_Notices(); new AICG_Bulk_Operations(); new AICG_Template_Editor(); $initialized = true; } add_action('plugins_loaded', 'aicg_init'); // Plugin action links add_filter('plugin_action_links_' . AICG_PLUGIN_BASENAME, 'aicg_plugin_action_links'); function aicg_plugin_action_links($links) { $settings_link = '' . __('Settings', 'ai-content-classifier') . ''; array_unshift($links, $settings_link); return $links; } // Plugin meta links add_filter('plugin_row_meta', 'aicg_plugin_meta_links', 10, 2); function aicg_plugin_meta_links($links, $file) { if ($file === AICG_PLUGIN_BASENAME) { $links[] = '' . __('Generate Content', 'ai-content-classifier') . ''; $links[] = '' . __('GitHub', 'ai-content-classifier') . ''; } return $links; } // Activation hook register_activation_hook(__FILE__, 'aicg_activate'); function aicg_activate() { // Create database tables if needed aicg_create_tables(); // Set default options add_option('aicg_api_key', ''); add_option('aicg_model', 'gpt-3.5-turbo'); add_option('aicg_max_tokens', 2000); add_option('aicg_temperature', 0.7); // Flush rewrite rules flush_rewrite_rules(); } // Deactivation hook register_deactivation_hook(__FILE__, 'aicg_deactivate'); function aicg_deactivate() { // Clean up scheduled tasks wp_clear_scheduled_hook('aicg_cleanup_temp_data'); // Flush rewrite rules flush_rewrite_rules(); } // Create database tables function aicg_create_tables() { global $wpdb; $charset_collate = $wpdb->get_charset_collate(); // Templates table $templates_table = $wpdb->prefix . 'aicg_templates'; $sql_templates = "CREATE TABLE $templates_table ( id mediumint(9) NOT NULL AUTO_INCREMENT, name varchar(100) NOT NULL, prompt text NOT NULL, content_type varchar(50) DEFAULT 'post', seo_enabled boolean DEFAULT true, created_at datetime DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (id) ) $charset_collate;"; // Usage log table $usage_table = $wpdb->prefix . 'aicg_usage_log'; $sql_usage = "CREATE TABLE $usage_table ( id mediumint(9) NOT NULL AUTO_INCREMENT, user_id bigint(20) NOT NULL, tokens_used int(11) NOT NULL DEFAULT 0, cost decimal(10,6) NOT NULL DEFAULT 0.000000, model varchar(50) NOT NULL, created_at datetime DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (id), KEY user_id (user_id), KEY created_at (created_at) ) $charset_collate;"; // Bulk operations queue table $bulk_table = $wpdb->prefix . 'aicg_bulk_queue'; $sql_bulk = "CREATE TABLE $bulk_table ( id mediumint(9) NOT NULL AUTO_INCREMENT, user_id bigint(20) NOT NULL, prompt text NOT NULL, content_type varchar(50) DEFAULT 'post', status varchar(20) DEFAULT 'pending', result text, created_at datetime DEFAULT CURRENT_TIMESTAMP, processed_at datetime NULL, PRIMARY KEY (id), KEY user_id (user_id), KEY status (status) ) $charset_collate;"; // Temporary data table $temp_table = $wpdb->prefix . 'aicg_temp_data'; $sql_temp = "CREATE TABLE $temp_table ( id mediumint(9) NOT NULL AUTO_INCREMENT, data_key varchar(255) NOT NULL, data_value longtext, created_at datetime DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (id), KEY data_key (data_key), KEY created_at (created_at) ) $charset_collate;"; require_once(ABSPATH . 'wp-admin/includes/upgrade.php'); dbDelta($sql_templates); dbDelta($sql_usage); dbDelta($sql_bulk); dbDelta($sql_temp); }