prefix . 'aicoagac_ideas', $wpdb->prefix . 'aicoagac_activity_logs', $wpdb->prefix . 'aicoagac_content_updates', ); // Drop custom tables (direct queries required for uninstall) foreach ($tables_to_drop as $table) { // Tables listed above are plugin-owned; safe to drop $safe_table = esc_sql($table); $drop = 'DROP TABLE IF EXISTS `' . $safe_table . '`'; $wpdb->query($drop); // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery,WordPress.DB.DirectDatabaseQuery.NoCaching,WordPress.DB.DirectDatabaseQuery.SchemaChange,WordPress.DB.PreparedSQL.NotPrepared -- Identifier only; uninstall schema cleanup } // Optionally delete plugin post meta keys $meta_keys = array( '_aicoagac_generated', '_aicoagac_faq_jsonld', '_aicoagac_view_count', ); foreach ($meta_keys as $meta_key) { $wpdb->query($wpdb->prepare("DELETE FROM {$wpdb->postmeta} WHERE meta_key = %s", $meta_key)); // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery,WordPress.DB.DirectDatabaseQuery.NoCaching -- Required for uninstall cleanup } // Clean up any remaining plugin data (options starting with aicoagac_) $wpdb->query($wpdb->prepare("DELETE FROM {$wpdb->options} WHERE option_name LIKE %s", 'aicoagac_%')); // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery,WordPress.DB.DirectDatabaseQuery.NoCaching -- Required for uninstall cleanup // Log uninstall completion if (defined('WP_DEBUG') && WP_DEBUG) { error_log('ACA: Plugin completely uninstalled and all data removed as requested'); // phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_error_log -- Uninstall logging }