get_col( $wpdb->prepare( "SELECT option_name FROM {$wpdb->options} WHERE option_name LIKE %s", $wpdb->esc_like( '_transient_vsai_' ) . '%' ) ); foreach ( $transient_names as $transient_name ) { delete_transient( substr( $transient_name, strlen( '_transient_' ) ) ); } // Cron propio (incluye todos los eventos y sus argumentos). vsai_clear_cron(); // Metadatos de usuario del 2FA. foreach ( array( 'vsai_2fa_secret', 'vsai_2fa_pending', 'vsai_2fa_enabled', 'vsai_2fa_backup', 'vsai_known_ips' ) as $meta_key ) { delete_metadata( 'user', 0, $meta_key, '', true ); } // Reglas .htaccess entre marcadores (si el módulo está cargado no hace // falta: se replican las dos líneas clave sin depender de includes). if ( function_exists( 'insert_with_markers' ) && function_exists( 'get_home_path' ) ) { $htaccess = get_home_path() . '.htaccess'; if ( file_exists( $htaccess ) && wp_is_writable( $htaccess ) ) { insert_with_markers( $htaccess, 'Vidal Security AI', array() ); } }