$option_value) { if (strpos($option_name, str_replace('%', '', $pattern)) === 0) { $transients[] = $option_name; } } foreach ($transients as $transient) { delete_option($transient); } } // Clear object cache groups if (function_exists('wp_cache_flush_group')) { wp_cache_flush_group('arr_plugin'); wp_cache_flush_group('arr_daily_limits'); wp_cache_flush_group('arr_duplicates'); wp_cache_flush_group('arr_categories'); wp_cache_flush_group('ai-rss-rewriter'); } // Clear any remaining cache entries wp_cache_flush(); } /** * Remove uploaded plugin files */ function airsrefe_remove_uploaded_files() { $upload_dir = wp_upload_dir(); $plugin_upload_dir = $upload_dir['basedir'] . '/ai-rss-rewriter'; if (file_exists($plugin_upload_dir)) { airsrefe_recursive_rmdir($plugin_upload_dir); } } /** * Recursively remove directory and all contents */ function airsrefe_recursive_rmdir($dir) { if (!is_dir($dir)) { return false; } $files = array_diff(scandir($dir), array('.', '..')); foreach ($files as $file) { $path = $dir . DIRECTORY_SEPARATOR . $file; if (is_dir($path)) { airsrefe_recursive_rmdir($path); } else { wp_delete_file($path); } } return wp_delete_file($dir); } /** * Clean up post meta data */ function airsrefe_cleanup_post_meta() { global $wpdb; $meta_keys = array( '_ai-rss-rewriter_processed_date', '_ai-rss-rewriter_source_url', '_ai-rss-rewriter_feed_url', '_ai-rss-rewriter_processing_mode', '_ai-rss-rewriter_processing_level', '_ai-rss-rewriter_priority', '_ai-rss-rewriter_date_mode', '_ai-rss-rewriter_generated', '_ai-rss-rewriter_source_post', '_ai-rss-rewriter_generated_date', '_ai-rss-rewriter_optimized', '_ai-rss-rewriter_final_format', '_ai-rss-rewriter_original_dimensions', '_ai-rss-rewriter_content_hash', '_ai-rss-rewriter_image_source', '_ai-rss-rewriter_image_optimized', 'original_url', // Legacy meta key 'rank_math_description', '_yoast_wpseo_metadesc', 'rank_math_focus_keyword', '_yoast_wpseo_focuskw' ); // Only remove meta data that was added by this plugin foreach ($meta_keys as $meta_key) { if (strpos($meta_key, '_ai-rss-rewriter_') === 0 || $meta_key === 'original_url') { // Use WordPress API instead of direct database query delete_metadata('post', 0, $meta_key, '', true); } } // Also clean up attachment meta data $attachment_meta_keys = array( '_ai-rss-rewriter_image_source', '_ai-rss-rewriter_image_optimized' ); foreach ($attachment_meta_keys as $meta_key) { delete_metadata('post', 0, $meta_key, '', true); } } /** * Log the uninstallation (if logging is still available) */ function airsrefe_log_uninstall() { $log_entry = sprintf( '[%s] AI RSS Rewriter uninstalled - all data removed', current_time('mysql') ); } // Execute uninstall procedures try { // Log the uninstall attempt airsrefe_log_uninstall(); // Remove all plugin options airsrefe_remove_plugin_options(); // Clear scheduled events airsrefe_clear_scheduled_events(); // Clean up transients and cache airsrefe_cleanup_transients(); // Clean up post meta data airsrefe_cleanup_post_meta(); // Remove uploaded files airsrefe_remove_uploaded_files(); // Final cache flush wp_cache_flush(); // Clear any remaining transients delete_transient('airsrefe_translations_cache'); } catch (Exception $e) { // Silent fail - don't show errors during uninstall // This prevents issues if some cleanup fails }