{"id":372895,"date":"2026-09-25T06:49:48","date_gmt":"2026-09-25T06:49:48","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/media-arbo\/"},"modified":"2026-09-25T07:55:38","modified_gmt":"2026-09-25T07:55:38","slug":"escuder-media-folders","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/escuder-media-folders\/","author":23570899,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"0.3.1","stable_tag":"0.3.1","tested":"7.1.2","requires":"6.4","requires_php":"7.4","requires_plugins":null,"header_name":"Escuder Media Folders","header_author":"Escuder Patrice","header_description":"Organize the WordPress Media Library in nested virtual folders without moving files or changing their URLs.","assets_banners_color":"273f5d","last_updated":"2026-09-25 07:55:38","external_support_url":"","external_repository_url":"","donate_link":"https:\/\/www.paypal.biz\/patriceescuder1","header_plugin_uri":"","header_author_uri":"https:\/\/escuder.fr\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":34,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"0.3.0":{"tag":"0.3.0","author":"escuder","date":"2026-09-25 06:49:22","revision":3712522},"0.3.1":{"tag":"0.3.1","author":"escuder","date":"2026-09-25 07:55:38","revision":3712611}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3712537,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3712537,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.jpg":{"filename":"banner-1544x500.jpg","revision":3712537,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.jpg":{"filename":"banner-772x250.jpg","revision":3712537,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["0.3.0","0.3.1"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3712522,"resolution":"1","location":"assets","locale":"","width":1440,"height":1000},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3712522,"resolution":"2","location":"assets","locale":"","width":1440,"height":1000},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3712522,"resolution":"3","location":"assets","locale":"","width":1440,"height":1000}},"screenshots":{"1":"Virtual folder tree in the native Media Library.","2":"Folder filters in a native media selection window.","3":"Escuder Media Folders settings."}},"plugin_section":[],"plugin_tags":[9747,84,233,6683,282654],"plugin_category":[50],"plugin_contributors":[282655],"plugin_business_model":[],"class_list":["post-372895","plugin","type-plugin","status-publish","hentry","plugin_tags-folders","plugin_tags-media","plugin_tags-media-library","plugin_tags-organizer","plugin_tags-virtual-folders","plugin_category-media","plugin_contributors-escuder","plugin_committers-escuder"],"banners":{"banner":"https:\/\/ps.w.org\/escuder-media-folders\/assets\/banner-772x250.jpg?rev=3712537","banner_2x":"https:\/\/ps.w.org\/escuder-media-folders\/assets\/banner-1544x500.jpg?rev=3712537","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/escuder-media-folders\/assets\/icon-128x128.png?rev=3712537","icon_2x":"https:\/\/ps.w.org\/escuder-media-folders\/assets\/icon-256x256.png?rev=3712537","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/escuder-media-folders\/assets\/screenshot-1.png?rev=3712522","caption":"Virtual folder tree in the native Media Library."},{"src":"https:\/\/ps.w.org\/escuder-media-folders\/assets\/screenshot-2.png?rev=3712522","caption":"Folder filters in a native media selection window."},{"src":"https:\/\/ps.w.org\/escuder-media-folders\/assets\/screenshot-3.png?rev=3712522","caption":"Escuder Media Folders settings."}],"raw_content":"<!--section=description-->\n<p>Escuder Media Folders adds a folder tree to the native WordPress Media Library and media selection windows. Create nested folders, find media, filter the library and drag attachments into folders.<\/p>\n\n<p>The organization is virtual. The plugin does not move, rename or delete uploaded files. Attachment IDs, URLs, posts and pages remain unchanged.<\/p>\n\n<p>Escuder Media Folders is free software under GPLv2 or later. All features are included. It runs locally without external services, CDN assets or telemetry.<\/p>\n\n<h4>Features<\/h4>\n\n<ul>\n<li>Unlimited nested virtual folders.<\/li>\n<li>Create, rename, move, reorder, and delete folders.<\/li>\n<li>Drag a media item directly into a folder.<\/li>\n<li>All Files and Uncategorized views.<\/li>\n<li>Folder and media search.<\/li>\n<li>Native Media Library grid and list support.<\/li>\n<li>Native wp.media modal support in the block editor, classic editor, and custom post types.<\/li>\n<li>English, French, and Spanish interfaces included; no separate download needed.<\/li>\n<li>Direct drag and drop without a separate selection step.<\/li>\n<li>No external service, CDN, or tracking.<\/li>\n<\/ul>\n\n<h4>Support development<\/h4>\n\n<p>You can optionally support the author via https:\/\/www.paypal.biz\/patriceescuder1. The support link in the plugin settings opens PayPal in a new tab. No PayPal scripts, images or payment forms are embedded, and the plugin sends no data to PayPal automatically. All features remain free regardless of contributions.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>escuder-media-folders<\/code> directory to <code>\/wp-content\/plugins\/<\/code>.<\/li>\n<li>Activate Escuder Media Folders through the Plugins screen.<\/li>\n<li>Open Media &gt; Library and create your first folder.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"how%20do%20i%20migrate%20from%20media%20arbor%20or%20media%20arbo%3F\"><h3>How do I migrate from Media Arbor or Media Arbo?<\/h3><\/dt>\n<dd><p>Back up your database first. Deactivate Media Arbor \/ Media Arbo without uninstalling it. Install and activate Escuder Media Folders. Activation renames the existing media_arbor_folders and media_arbor_items tables to escuder_media_folders_folders and escuder_media_folders_items, using the site's table prefix. IDs, nested folders, order and media associations are preserved. Preferences migrate to escuder_media_folders_options. Uploaded files and WordPress database names are unchanged.<\/p>\n\n<p>Verify your folders before deleting the inactive old plugin. Once migration has succeeded, the old uninstaller only targets obsolete table and option names, not the new organization. Do not reactivate the old plugin after migration. Returning to an old release requires restoring your pre-migration backup.<\/p>\n\n<p>If old and new tables coexist, or the legacy pair is incomplete, migration stops without overwriting tables. Resolve the conflict with your administrator after backing up; do not manually delete tables containing data. Activation also reports missing database privileges or a busy migration lock. On multisite, migration runs separately for each site's prefix.<\/p><\/dd>\n<dt id=\"how%20do%20translations%20work%3F\"><h3>How do translations work?<\/h3><\/dt>\n<dd><p>French and Spanish fallback translations are included so the interface works immediately after installation or an ordinary plugin update, including on sites without an official language pack. Choose WordPress default, English, French or Spanish in the plugin settings. Installed WordPress.org language packs take priority over the bundled translations. Other languages use the standard WordPress translation system. No FTP, manual translation installation or external service is required for French and Spanish.<\/p><\/dd>\n<dt id=\"which%20users%20can%20organize%20media%3F\"><h3>Which users can organize media?<\/h3><\/dt>\n<dd><p>Users with upload_files can browse the shared virtual folder tree, create folders and assign media they are allowed to edit. Renaming, moving, reordering and deleting shared folders require edit_others_posts as well, because those actions affect other authors' organization. With standard WordPress roles, editors and administrators can manage the shared tree. Folders are organizational labels, not access-control boundaries.<\/p><\/dd>\n<dt id=\"are%20there%20external%20services%20or%20paid%20features%3F\"><h3>Are there external services or paid features?<\/h3><\/dt>\n<dd><p>No. All features run locally using WordPress and its bundled media, jQuery and API libraries. The plugin includes no tracking, remote code downloads, CDN dependencies or premium restrictions. The author website is https:\/\/escuder.fr\/.<\/p><\/dd>\n<dt id=\"which%20media%20windows%20are%20supported%3F\"><h3>Which media windows are supported?<\/h3><\/dt>\n<dd><p>The plugin integrates with the native WordPress Media Library and wp.media selection windows. Private media frames used by builders are supported by the integration code. Divi is not bundled and has not been tested in the local preparation environment; verify your builder version before deployment.<\/p><\/dd>\n<dt id=\"does%20escuder%20media%20folders%20move%20files%20in%20wp-content%2Fuploads%3F\"><h3>Does Escuder Media Folders move files in wp-content\/uploads?<\/h3><\/dt>\n<dd><p>No. Folders are virtual records stored in plugin-owned database tables.<\/p><\/dd>\n<dt id=\"what%20happens%20when%20i%20delete%20a%20folder%3F\"><h3>What happens when I delete a folder?<\/h3><\/dt>\n<dd><p>Only the virtual folder, its subfolders and their associations are removed. The media items remain in WordPress and become uncategorized.<\/p><\/dd>\n<dt id=\"what%20happens%20when%20i%20deactivate%20the%20plugin%3F\"><h3>What happens when I deactivate the plugin?<\/h3><\/dt>\n<dd><p>Nothing is deleted. Your folder organization is retained for the next activation.<\/p><\/dd>\n<dt id=\"what%20happens%20when%20i%20uninstall%20the%20plugin%3F\"><h3>What happens when I uninstall the plugin?<\/h3><\/dt>\n<dd><p>The two virtual-organization tables and the plugin options are removed if data removal is enabled in Escuder Media Folders settings (the default). Disable this setting to keep the organization when uninstalling. Deactivation always keeps data. On multisite, each site has its own organization and uninstall preference. WordPress attachments and files are never removed.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>0.3.1<\/h4>\n\n<ul>\n<li>Include French and Spanish fallback translations so language selection works without a separate language-pack installation.<\/li>\n<li>Keep installed WordPress.org language packs ahead of the bundled translations.<\/li>\n<li>Keep the database migration and media organization unchanged.<\/li>\n<\/ul>\n\n<h4>0.3.0<\/h4>\n\n<ul>\n<li><p>Added an optional PayPal support link on the settings page and in the directory readme.<\/p><\/li>\n<li><p>Renamed the plugin to Escuder Media Folders for directory review.<\/p><\/li>\n<li>Migrated legacy folder tables and preferences to escuder_media_folders names, preserving IDs and associations and checking for conflicts.<\/li>\n<li>Removed load_plugin_textdomain and bundled translation files; use WordPress language packs.<\/li>\n<li>Retained independent media-window filters, outside-click menu dismissal and upload refresh fixes.<\/li>\n<\/ul>\n\n<h4>0.2.7<\/h4>\n\n<ul>\n<li>Refresh the originating media library after automatically assigning an uploaded file to a folder, so the new image appears in filtered featured-image windows.<\/li>\n<\/ul>\n\n<h4>0.2.6<\/h4>\n\n<ul>\n<li>Renamed Media Arbor to Media Arbo for the first directory submission; retained existing table and option names in that version.<\/li>\n<li>Hardened HTML attribute escaping and REST parameter validation.<\/li>\n<li>Restricted shared folder changes to users who can edit other authors' posts; per-media assignment still checks edit permissions.<\/li>\n<li>Added per-site network activation, new-site setup and uninstall handling.<\/li>\n<li>Improved database failure reporting, folder traversal and dynamic media window initialization.<\/li>\n<li>Preserved the independent media-window filters and outside-click menu fixes.<\/li>\n<\/ul>\n\n<h4>0.2.5<\/h4>\n\n<ul>\n<li>Close folder action menus when clicking outside, choosing an action or pressing Escape.<\/li>\n<li>Keep the menu toggle's expanded state accessible and restore keyboard focus on Escape.<\/li>\n<\/ul>\n\n<h4>0.2.4<\/h4>\n\n<ul>\n<li>Fixed folder, All Files and Uncategorized filters targeting the wrong media frame in builders using private wp.media windows, such as Divi.<\/li>\n<li>Scoped media search and refresh after assignment to the panel's own attachment browser.<\/li>\n<li>Kept filter highlighting independent between media windows and preserved native list navigation.<\/li>\n<\/ul>\n\n<h4>0.2.3<\/h4>\n\n<ul>\n<li>Updated the plugin description, author, website, copyright, and licensing notice.<\/li>\n<\/ul>\n\n<h4>0.2.2<\/h4>\n\n<ul>\n<li>Prevented the native WordPress upload overlay from intercepting internal Escuder Media Folders drags.<\/li>\n<li>Preserved native drag-and-drop uploads for files dragged from the desktop.<\/li>\n<\/ul>\n\n<h4>0.2.1<\/h4>\n\n<ul>\n<li>Made direct single-media drag and drop the primary organization workflow.<\/li>\n<li>Improved folder-name visibility and header alignment.<\/li>\n<li>Replaced the generic panel heading with the Escuder Media Folders name.<\/li>\n<li>Removed the selection-move action.<\/li>\n<\/ul>\n\n<h4>0.2.0<\/h4>\n\n<ul>\n<li>Added the Escuder Media Folders settings menu and configurable panel options.<\/li>\n<li>Added English, French, and Spanish interfaces.<\/li>\n<li>Added an explicit action for moving selected media.<\/li>\n<li>Fixed folder names being visually clipped in the folder tree.<\/li>\n<\/ul>\n\n<h4>0.1.0<\/h4>\n\n<ul>\n<li>Initial MVP with nested folders, drag and drop, search, and native media integration.<\/li>\n<\/ul>","raw_excerpt":"Organize the WordPress Media Library in nested virtual folders without moving files or changing media URLs.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/372895","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=372895"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/escuder"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=372895"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=372895"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=372895"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=372895"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=372895"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=372895"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}