, short-lived transients). $wpdb->query( $wpdb->prepare( 'DELETE FROM %i WHERE option_name LIKE %s OR option_name LIKE %s', $wpdb->options, $wpdb->esc_like( '_transient_dashbread_rl_' ) . '%', $wpdb->esc_like( '_transient_timeout_dashbread_rl_' ) . '%' ) ); // phpcs:ignore WordPress.DB.DirectDatabaseQuery -- transients named per requester hash; no API lists them. wp_clear_scheduled_hook( 'dashbread_daily' ); wp_unschedule_hook( 'dashbread_notify_batch' ); $wpdb->query( $wpdb->prepare( 'DROP TABLE IF EXISTS %i', $wpdb->prefix . 'dashbread_notifications' ) ); // phpcs:ignore WordPress.DB.DirectDatabaseQuery,WordPress.DB.DirectDatabaseQuery.SchemaChange -- Dashbread's own table. foreach ( array( 'dashbread_admin_dismissed', 'dashbread_avatar_id', 'dashbread_delete_requested', 'dashbread_last_login', 'dashbread_mode', 'dashbread_notify_off', 'dashbread_phone', 'dashbread_sidebar', 'dashbread_widgets', '_dashbread_new_email' ) as $dashbread_meta ) { delete_metadata( 'user', 0, $dashbread_meta, '', true ); } foreach ( array( '_dashbread_in_app', '_dashbread_menu_position', '_dashbread_roles', '_dashbread_icon' ) as $dashbread_meta ) { delete_metadata( 'post', 0, $dashbread_meta, '', true ); }