wp-content/plugins/halyard/halyard.php
Halyard
Folders for the media library that are a taxonomy, not a rewritten upload path.
== Description ==
Media folder plugins that move files on disk break every URL you have already published, and they break it silently, months later, when someone reorganises. Halyard stores folders as a hierarchical taxonomy and never touches the uploads directory.
Because it is a taxonomy, everything else works: WP-CLI, the REST API, bulk edit, and any plugin that queries attachments. Uninstalling leaves your files exactly where they always were, with some unused terms.
Drag-and-drop in the grid view, keyboard-reachable in the list view, and a folder filter in the block editor’s media modal — which is where you are when you actually need it.
== Screenshots ==
Numbered the way they ship in /assets/. Click any one to see it full width.
== Installation ==
- Install and activate the plugin.
- Create folders in the sidebar of Media → Library.
- Drag files onto a folder, or use Bulk Actions in list view.
Existing files land in Unfiled. Nothing is moved or renamed, ever.
== Frequently asked questions ==
Do the folders appear in the upload path?
No, and that is deliberate. The path stays /uploads/2026/04/ so published URLs keep working forever.
Can I restrict folders by role?
Yes, per folder. It hides them from the library UI; it is organisation, not security.
Multisite?
Folders are per site. A network-wide shared library is a different plugin with different trade-offs.
== Changelog ==
= 3.2.1 =
- Fixed: the folder filter was missing from the block editor’s media modal when the modal opened from a gallery block.
= 3.2.0 =
- Keyboard drag alternative in list view: select, then Move to folder from Bulk Actions.
= 3.0.0 =
- Folders converted from a custom table to a taxonomy. Existing folders are migrated on activation.