Virtual Media Folders

Changelog

1.7.2

  • NOTE: The plugin updater for add-ons is still in early stages and may not be fully reliable. Pleas update add-ons manually from their GitHub repositories for now.
  • Added: Add-on version checker displays admin notices when installed add-ons need updates
  • Added: New AddonChecker class monitors vmfa-ai-organizer, vmfa-rules-engine, vmfa-editorial-workflow, and vmfa-media-cleanup versions
  • Added: Notices only appear on Media Library pages
  • Added: PHPUnit tests for AddonChecker class

1.7.1

  • Fixed: Version constant now reflects actual plugin version (was hardcoded to 1.3.8)
  • Fixed: Added ABSPATH guards to all source files
  • Fixed: Sanitize orderby parameter in Taxonomy
  • Changed: Extracted inline JavaScript and CSS to enqueued files
  • Changed: Added phpcs.xml linting configuration

1.7.0

  • Added: Subtab navigation system for add-on settings integration
  • Added: Parent plugin now renders subtab nav when add-ons register subtabs array
  • Added: CSS spacing fix for tabs without subtab navigation
  • Added: Enhanced addon-development.md documentation for subtab system
  • Changed: Add-on tabs can now include optional subtabs array for secondary navigation
  • Changed: Improved settings page architecture for better add-on UX

1.6.8

  • Fixed: Removed Media Folders metabox from attachment edit screen (folders are managed via the media library sidebar)

1.6.7

  • Changed: Updated @wordpress/scripts to 31.3.0
  • Changed: Updated vitest to 4.0.18

1.6.6

  • Added: New vmfo_can_delete_folder filter allows add-ons to prevent folder deletion
  • Added: New /folders/{id}/can-delete REST endpoint for checking folder deletability
  • Added: Delete modal now shows blocked message when folder cannot be deleted
  • Fixed: Sticky sidebar header now works correctly using flexbox layout
  • Documentation: Added vmfo_can_delete_folder hook and REST endpoint documentation
  • Documentation: Added JavaScript Translation Mapping (i18n-map.json) documentation

1.6.5

  • Fixed: Deleting a folder now selects “Uncategorized” instead of “All Media” when “Show All Media” setting is disabled

1.6.4

  • Fixed: REST API now returns proper 400 status code instead of 500 when creating duplicate folders
  • Fixed: Error messages now use “folder” terminology instead of “term” for better user experience

1.6.3

  • Fixed: Folder counts now update automatically when media is deleted (single or bulk delete)
  • Documentation: Add-on bootstrap example now includes Requires Plugins header (WordPress 6.5+)

1.6.2

  • Fixed: “Add Media File” button now respects “Show All Media” setting
  • Fixed: Block editor folder sidebar now defaults to Uncategorized when “Show All Media” is disabled
  • Fixed: Prevented duplicate folder selection callbacks and state updates after component unmount
  • Fixed: Added proper cleanup for sticky sidebar event listeners to prevent memory leaks
  • Changed: Folder cache now prefers PHP-preloaded data over localStorage
  • Changed: Exposed vmfRefreshMediaLibrary globally for add-on use
  • Documentation: Updated development docs with accurate REST API endpoints and hooks

1.6.1

  • Changed: Add-on tabs are now sorted alphabetically by title in the settings page
  • Documentation: Added comprehensive Add-on Development Guide with philosophy, architecture, and implementation details

1.6.0

  • Added: Add-on Tab System – Settings page now supports tabs for add-on plugins
  • Added: Add-ons can register their settings as tabs within “Folder Settings”
  • Added: New vmfo_settings_tabs filter for add-on registration
  • Added: New vmfo_settings_enqueue_scripts action for conditional script loading
  • Added: SUPPORTS_ADDON_TABS constant for add-on compatibility detection
  • Added: docs/addon-integration.md with comprehensive add-on development guide
  • Changed: Settings page refactored to use tab-based navigation
  • Changed: PAGE_SLUG constant is now public for add-on access

1.5.3

  • Fixed: Updated Norwegian translations for Rules Engine integration strings

1.5.2

  • Changed: Default Folder setting now links to Rules Engine settings when VMFA Rules Engine add-on is active

1.5.1

  • Fixed: Folder sidebar now repositions immediately when WordPress Help panel is opened, closed, or tabs are switched
  • Fixed: Added debouncing to prevent redundant sidebar position recalculations
  • Fixed: Memory leak from event listeners not being cleaned up on sidebar removal

1.5.0

  • Added: Folder search/filter functionality in sidebar header for both Media Library and Gutenberg modal
  • Added: Search icon appears when there are more than 10 top-level folders
  • Added: Search automatically expands parent folders to show matching subfolders
  • Added: Norwegian translations for search UI strings
  • Changed: Gutenberg modal sidebar header now has contrasting background

1.4.2

  • Fixed: Removed unintended folder name padding in Gutenberg media modal for folders without children

1.4.1

  • Fixed: Folder names for folders without children now align vertically with folder names of folders that have children in the sidebar

1.4.0

  • Added: Sticky sidebar header – folder management buttons now stay visible when scrolling the folder list

1.3.9

  • Fixed: Grid/List view icons now correctly show all media instead of forcing folder mode
  • Fixed: Folder icon now respects “Show All Media” setting
  • Fixed: URL encoding issue causing duplicate vmfo_folder parameter
  • Fixed: Memory leaks from event listeners when hiding folder view
  • Fixed: Race condition where duplicate folder button was created

1.3.8

  • Changed: Hide (0) count on folders with subfolders to avoid confusion about empty folder branches

1.3.7

  • Changed: Sidebar top now aligns horizontally with attachments-wrapper instead of first thumbnail

1.3.6

  • Fixed: Folder sidebar now properly extends to viewport bottom and scrolls when content exceeds screen height
  • Fixed: Sidebar uses fixed positioning to avoid clipping by parent containers
  • Improved: Sidebar top alignment with first image thumbnail

1.3.5

  • Fixed: React hook order error when entering bulk select mode
  • Fixed: Race condition in folder refresh when moving media
  • Improved: Bulk move folder dropdown now ordered like folder tree with hierarchy

1.3.4

  • Added: Direct URL support for folder view via upload.php?mode=folder
  • Fixed: Clicking folder icon from list view now correctly opens folder view

1.3.3

  • Changed: Media folders taxonomy screen now mirrors sidebar ordering
  • Changed: Removed sortable header UI from the Media Folders taxonomy list table
  • Changed: Media Folders taxonomy UI is only visible when WP_DEBUG is true

1.3.2

  • Changed: Folder counts endpoint now avoids per-folder queries for better performance
  • Fixed: Suggestions REST response now matches stored suggestion labels (string-based suggestions)
  • Fixed: Admin UI hardened notice rendering to avoid HTML injection
  • Fixed: Admin UI reduced risk of duplicate event handlers/observers when scripts re-run

1.3.1

  • Fixed: Settings page default folder dropdown now uses correct taxonomy (vmfo_folder)
  • Fixed: Block editor folder filter now uses correct REST API endpoint (/wp/v2/vmfo_folder)
  • Fixed: REST API schema title updated to vmfo-folder for consistency
  • Fixed: Folder drag-drop reorder now persists correctly after page refresh

1.3.0

  • Changed: Renamed all prefixes from VMF_ to VMFO_ for WordPress.org compliance
  • Changed: Renamed taxonomy from media_folder to vmfo_folder for uniqueness
  • Changed: Inline CSS now uses wp_add_inline_style() instead of embedded style tag
  • Removed: GitHub update checker (WordPress.org handles updates)
  • Added: Automatic migration for existing folder assignments from old taxonomy
  • Added: .distignore file for proper distribution builds

1.2.3

  • Changed: “All Media” folder now disabled by default in settings

1.2.2

  • Fixed: REST API now returns all folders (removed meta_key ordering that excluded folders without vmf_order)

1.2.1

  • Changed: Updated i18n-map.json with new accessibility component mappings
  • Changed: Updated Norwegian (nb_NO) translations for all new accessibility strings

1.2.0

  • Added: Keyboard-accessible move mode – press M to pick up media, arrow keys to navigate, Enter to drop
  • Added: Screen reader announcements for all move mode actions
  • Added: MoveModeBanner visual feedback during keyboard move mode
  • Added: LiveRegion component for ARIA live announcements
  • Added: useAnnounce and useMoveMode hooks for accessibility features
  • Added: Visual drop target highlighting on folders during move mode
  • Fixed: Screen reader instructions properly hidden from visual display
  • Fixed: Enter key drops to folder without navigating during move mode
  • Fixed: “Jump to Folder After Move” setting respected for keyboard moves
  • Fixed: Mouse drag now cancels keyboard move mode to prevent conflicts

1.1.7

  • Added: Auto-jump to target folder when moving the last file(s) from a folder

1.1.6

  • Added: New bulk move AJAX endpoint for efficient bulk operations
  • Performance: Bulk move now uses single AJAX request instead of one per file
  • Fixed: Missing sprintf import causing error when selecting files in bulk mode
  • Fixed: Sidebar visibility preserved when browser re-renders during bulk select mode

1.1.5

  • Performance: Optimistic folder loading with localStorage caching for instant sidebar display
  • Performance: Reduced API calls – secondary components read from cache instead of fetching
  • Fixed: Eliminated layout shift with critical inline CSS for sidebar positioning
  • Fixed: Folder order now persists correctly when dropping files on folders
  • Fixed: REST API now returns vmf_order for proper client-side sorting

1.1.4

  • Refactored: PHP REST API with shared helpers for capability checks, folder/attachment lookups
  • Refactored: Settings class with centralized option retrieval and visibility enforcement
  • Refactored: Admin class now uses Taxonomy::TAXONOMY constant instead of hardcoded strings
  • Refactored: JavaScript folder API calls consolidated into shared utility
  • Fixed: Test mock for useFolderData to properly handle parse:false API responses
  • Removed: Unused SortableFolderList.jsx component

1.1.3

  • Fixed: Block editor media modal now respects “Show All Media” and “Show Uncategorized” settings
  • Fixed: Folder sidebar in Gutenberg modal matches Media Library settings visibility
  • Changed: Replaced wp_localize_script with wp_add_inline_script for proper boolean handling in JS config

1.1.2

  • Fixed: Default folder filter not applying on initial page load when “Show All Media” is disabled
  • Fixed: Media Library now correctly shows only uncategorized files on load when Uncategorized is the default

1.1.1

  • Fixed: 500 error on plugin information page when GitHub API returns null
  • Fixed: Added defensive handling for null plugin info in GitHubPluginUpdater

1.1.0

  • Added: Drag-and-drop folder reordering with visible grip handle
  • Added: Custom folder order persists via vmf_order term meta
  • Added: Optimistic UI updates for instant visual feedback during reorder
  • Changed: Consolidated drag-drop implementation for better performance
  • Changed: Removed unused DndContext and DraggableMedia components (smaller bundle)
  • Fixed: Folder reorder now updates instantly without waiting for server response

1.0.7

  • Added: Contextual help tab “Virtual Folders” on Media Library page
  • Added: GitHub repository link in contextual help sidebar

1.0.6

  • Added: Filter hooks for settings (vmf_default_settings, vmf_settings, vmf_setting_{$key})
  • Added: When “Show All Media” is disabled, “Uncategorized” becomes the default folder
  • Changed: Removed “Sidebar Default Visible” setting (now uses localStorage)
  • Changed: Consolidated settings into single “Default Behavior” section
  • Fixed: Settings checkbox interdependency now saves correctly

1.0.5

  • Housekeeping

1.0.4

  • Fixed: Removed duplicate item removal logic in DroppableFolder to prevent event conflicts
  • Fixed: Single file drag-drop now correctly delegates view refresh to refreshMediaLibrary()

1.0.3

  • Fixed: Moving files from “All Media” view no longer removes them from view (both bulk and single file moves)
  • Fixed: Sort order is now preserved when moving files from “All Media” view

1.0.2

  • Fixed: Updated all “Media Manager” references in source comments to “Virtual Media Folders”
  • Fixed: Updated console.error message in media-library.js

1.0.1

  • Fixed: Updated REST API paths from mediamanager/v1 to vmf/v1
  • Fixed: Updated custom event names from mediamanager: to vmf: prefix
  • Fixed: Updated WordPress filter name from mediamanager/folder-filter to vmf/folder-filter
  • Fixed: Updated all text domains in Settings.php commented code
  • Fixed: Renamed MediaManagerDndProvider to VmfDndProvider
  • Fixed: Updated test namespaces from MediaManagerTests to VirtualMediaFoldersTests
  • Fixed: Regenerated translation files with correct references
  • Fixed: Regenerated composer autoload files

1.0.0

  • Major Release: Complete plugin rename from “Media Manager” to “Virtual Media Folders”
  • Changed: New plugin slug “virtual-media-folders”
  • Changed: Updated PHP namespace from MediaManager to VirtualMediaFolders
  • Changed: Updated constants from MEDIAMANAGER_* to VMF_*
  • Changed: Updated REST API namespace from mediamanager/v1 to vmf/v1
  • Changed: Updated CSS class prefixes from mm- to vmf-
  • Changed: Updated JavaScript globals from mediaManagerData to vmfData
  • Changed: Updated text domain from mediamanager to virtual-media-folders
  • Changed: Renamed translation files to use new text domain
  • Note: Breaking change – customizations using old namespace/classes need updating

0.1.17

  • Fixed: Plugin Check compliance – added phpcs:ignore comments for false positives
  • Fixed: Prefixed global variables in uninstall.php
  • Fixed: Removed error_log debug function from GitHubPluginUpdater

0.1.16

  • Added: uninstall.php for clean plugin removal (deletes folders, settings, transients, user meta)
  • Changed: Updated folder structure in README.md to reflect PSR-4 changes

0.1.15

  • Added: Collapsing a parent folder now moves selection to the parent when a child folder is selected
  • Added: ArrowLeft keyboard navigation moves to parent folder when subfolder is collapsed or has no children

0.1.14

  • Added: Edit Folder modal now includes Parent Folder selector to move folders within hierarchy
  • Changed: “Rename Folder” modal renamed to “Edit Folder” for name and location changes

0.1.13

  • Added: New “Show All Media” setting to show/hide the All Media option in sidebar
  • Changed: Removed “Enable Drag & Drop” setting – always enabled (use bulk move as alternative)
  • Changed: All settings now functional – Default Folder auto-assigns uploads, Show Uncategorized controls folder visibility, Sidebar Default Visible controls initial state
  • Fixed: Sidebar position resets properly when uploader visibility changes

0.1.12

  • Changed: “Jump to Folder After Move” setting now defaults to unchecked (disabled)

0.1.11

  • Fixed: When “Jump to Folder After Move” is disabled, moved files are now removed from the source folder view

0.1.10

  • Fixed: Sort order is now preserved after moving files between folders

0.1.9

  • Added: New “Jump to Folder After Move” setting (enabled by default) to control whether view switches to target folder after moving files
  • Added: URL now uses mode=folder parameter when folder view is active
  • Changed: Bulk select mode is now automatically disabled after bulk moving files
  • Changed: Smart Suggestions settings hidden until feature is fully implemented

0.1.8

  • Added: Folder item counts now reflect the selected media type filter (Images, Videos, Audio, Documents)
  • Added: New REST API endpoint for filtered folder counts

0.1.7

  • Added: After bulk moving files, focus automatically switches to the target folder

0.1.6

  • Fixed: Folder dropdowns now dynamically update when folders are added, renamed, or deleted
  • Changed: BulkFolderAction and MoveToFolderMenu now listen for folder change events

0.1.5

  • Changed: VMF_VERSION now uses actual version number in production (WP_DEBUG=false)
  • Removed: Debug console.log statements from JavaScript

0.1.4

  • Changed: Refactored PHP classes to PSR-4 autoloading structure
  • Changed: Moved class files from includes/ to src/ directory
  • Changed: Renamed classes to follow PSR-4 naming conventions (REST_API → RestApi, GitHub_Plugin_Updater → GitHubPluginUpdater)

0.1.3

  • Housekeeping

0.1.2

  • Changed: Refactored folder sidebar to share code between Media Library and Gutenberg modal
  • Changed: Created shared hooks and base components for folder tree
  • Added: Focus moves to Uncategorized or All Media after deleting a folder
  • Added: Comprehensive code documentation throughout

0.1.1

  • Fixed: Sticky sidebar now works correctly in Gutenberg media modal
  • Fixed: Improved scroll detection for modal attachments wrapper

0.1.0

  • Initial release
  • Virtual folder organization
  • Drag and drop support
  • Sticky sidebar with fixed positioning on scroll
  • Bulk move action with compact UI
  • Gutenberg integration with folder sidebar
  • Settings page
  • Norwegian Bokmål translation

Plugin Website
Visit website

Version:
1.7.2
Last Updated
February 12, 2026
Active Installs
10
Requires
WordPress 6.8
Tested Up To
WordPress 6.9.1
Requires PHP
8.3

Share Post

Join our newsletter.

Get insights into what’s happening at ChangelogWP right in your inbox. We don’t believe in spam.