prefix . $aicitare_suffix; $wpdb->query( "DROP TABLE IF EXISTS {$aicitare_table}" ); // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching, WordPress.DB.PreparedSQL.InterpolatedNotPrepared, WordPress.DB.DirectDatabaseQuery.SchemaChange, PluginCheck.Security.DirectDB.UnescapedDBParameter -- one-time uninstall cleanup; table name is $wpdb->prefix + a hardcoded literal. } // Remove link-check transients (aicitare_lnk2_*). $wpdb->query( "DELETE FROM {$wpdb->options} WHERE option_name LIKE '\_transient\_aicitare_lnk2\_%' OR option_name LIKE '\_transient\_timeout\_aicitare_lnk2\_%'" ); // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching, PluginCheck.Security.DirectDB.UnescapedDBParameter // Remove per-post meta the plugin created. $aicitare_meta_keys = array( '_aicitare_import_source', '_aicitare_rephrase_source', '_aicitare_faq', '_aicitare_pros', '_aicitare_cons', '_aicitare_table', '_aicitare_rating', '_aicitare_rating_count', '_aicitare_reviewer', '_aicitare_price', '_aicitare_currency', ); foreach ( $aicitare_meta_keys as $aicitare_meta_key ) { delete_post_meta_by_key( $aicitare_meta_key ); } } aicitare_uninstall_cleanup();