init(); } add_action('plugins_loaded', 'ai_seo_cro_init'); function ai_seo_cro_missing_extensions() { $missing = []; if (!class_exists('DOMDocument')) { $missing[] = 'DOM'; } if (!function_exists('mb_strlen') || !function_exists('mb_substr') || !function_exists('mb_strtolower')) { $missing[] = 'mbstring'; } return $missing; } function ai_seo_cro_requirements_notice() { if (!current_user_can('activate_plugins')) { return; } echo '

' . esc_html( sprintf('360 SEO requires these PHP extensions: %s. Ask your hosting provider to enable them.', implode(', ', ai_seo_cro_missing_extensions())) ) . '

'; } function ai_seo_cro_activate() { if (ai_seo_cro_missing_extensions()) { wp_die(esc_html(sprintf('360 SEO requires these PHP extensions: %s.', implode(', ', ai_seo_cro_missing_extensions())))); } require_once AI_SEO_CRO_PATH . 'core/scan-scheduler.php'; AI_SEO_CRO_Scan_Scheduler::schedule(); } function ai_seo_cro_deactivate() { require_once AI_SEO_CRO_PATH . 'core/scan-scheduler.php'; AI_SEO_CRO_Scan_Scheduler::unschedule(); } register_activation_hook(__FILE__, 'ai_seo_cro_activate'); register_deactivation_hook(__FILE__, 'ai_seo_cro_deactivate');