query( $wpdb->prepare( "DELETE FROM {$wpdb->usermeta} WHERE meta_key IN (%s, %s, %s, %s, %s)", 'actlogpro_dismissed_notices', 'actlogpro_stats_view_preference', 'actlogpro_dashboard_widget_chart', 'actlogpro_quick_tip_index', 'actlogpro_last_admin_activity' ) ); // phpcs:enable WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching // Delete additional transients that may be present $additional_transients = [ 'actlogpro_user_logout_', 'actlogpro_theme_data_', 'actlogpro_theme_option_updates_', 'actlogpro_option_last_value_', 'actlogpro_menu_data_', 'actlogpro_menu_term_data_', 'actlogpro_menu_term_direct_', 'actlogpro_tracking_settings', 'actlogpro_cleanup_status', 'actlogpro_update_check', 'actlogpro_milestone_check_counter', 'actlogpro_admin_act_', ]; foreach ($additional_transients as $transient_prefix) { // Delete transients with this prefix pattern // phpcs:disable WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching -- This is necessary for complete plugin cleanup during uninstall, caching is not desired $wpdb->query( $wpdb->prepare( "DELETE FROM {$wpdb->options} WHERE option_name LIKE %s OR option_name LIKE %s", '%_transient_' . $transient_prefix . '%', '%_transient_timeout_' . $transient_prefix . '%' ) ); // phpcs:enable WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching } // phpcs:enable WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedVariableFound