Custom WordPress plugin that replaces the default flat media library with a structured folder view. Features: hierarchical folders via custom taxonomy, sidebar folder tree, drag & drop, modal integration with Elementor/builders, bulk assign, upload auto-assign, toast notifications. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
127 lines
4.6 KiB
Markdown
127 lines
4.6 KiB
Markdown
---
|
|
phase: 01-media-folders-plugin
|
|
plan: 01
|
|
subsystem: media
|
|
tags: [wordpress, plugin, taxonomy, ajax, vanilla-js]
|
|
|
|
requires: []
|
|
provides:
|
|
- Custom taxonomy media_folder (hierarchical)
|
|
- AJAX CRUD endpoints for folder management
|
|
- Folder tree sidebar UI (vanilla JS)
|
|
affects: [02-media-library-grid, 03-media-modal]
|
|
|
|
tech-stack:
|
|
added: []
|
|
patterns: [custom taxonomy for virtual folders, MFP_ class prefix, vanilla JS UI]
|
|
|
|
key-files:
|
|
created:
|
|
- wp-content/plugins/media-folder-pro/media-folder-pro.php
|
|
- wp-content/plugins/media-folder-pro/includes/class-taxonomy.php
|
|
- wp-content/plugins/media-folder-pro/includes/class-ajax-handler.php
|
|
- wp-content/plugins/media-folder-pro/assets/css/admin.css
|
|
- wp-content/plugins/media-folder-pro/assets/js/folder-tree.js
|
|
modified: []
|
|
|
|
key-decisions:
|
|
- "Plugin renamed to media-folder-pro (user request)"
|
|
- "Author set to Project Pro (https://www.project-pro.pl)"
|
|
- "Vanilla JS instead of jQuery for tree UI"
|
|
- "MFP_ prefix for all classes and constants"
|
|
|
|
patterns-established:
|
|
- "MFP_Taxonomy centralizes all taxonomy operations"
|
|
- "MFP_Ajax_Handler with nonce + capability check on every endpoint"
|
|
- "Assets loaded only on upload.php and media-new.php"
|
|
- "CustomEvent 'mfp-folder-selected' for cross-component communication"
|
|
|
|
duration: ~15min
|
|
started: 2026-03-28
|
|
completed: 2026-03-28
|
|
---
|
|
|
|
# Phase 1 Plan 01: Plugin Foundation + Taxonomy Summary
|
|
|
|
**WordPress plugin "Media Folder Pro" with hierarchical media_folder taxonomy, 5 AJAX CRUD endpoints, and vanilla JS folder tree sidebar UI.**
|
|
|
|
## Performance
|
|
|
|
| Metric | Value |
|
|
|--------|-------|
|
|
| Duration | ~15min |
|
|
| Tasks | 3 completed |
|
|
| Files created | 5 |
|
|
|
|
## Acceptance Criteria Results
|
|
|
|
| Criterion | Status | Notes |
|
|
|-----------|--------|-------|
|
|
| AC-1: Plugin aktywuje sie bez bledow | Pass | Plugin header, taxonomy registration, autoload — all correct |
|
|
| AC-2: CRUD folderow dziala przez AJAX | Pass | 5 endpoints with nonce verification + capability check |
|
|
| AC-3: Drzewko folderow renderuje sie poprawnie | Pass | Sidebar with tree, context menu, inline rename, expand/collapse |
|
|
|
|
## Accomplishments
|
|
|
|
- Custom taxonomy `media_folder` registered for `attachment` post type (hierarchical, hidden UI, REST enabled)
|
|
- 5 AJAX endpoints: create, rename, delete, move, get_folders — all with security checks
|
|
- Folder tree sidebar with context menu (right-click), inline rename, expand/collapse, active state
|
|
|
|
## Files Created/Modified
|
|
|
|
| File | Change | Purpose |
|
|
|------|--------|---------|
|
|
| `wp-content/plugins/media-folder-pro/media-folder-pro.php` | Created | Main plugin file — singleton, hooks, asset loading |
|
|
| `wp-content/plugins/media-folder-pro/includes/class-taxonomy.php` | Created | MFP_Taxonomy — register, get_folder_tree, folder_has_children, would_create_cycle |
|
|
| `wp-content/plugins/media-folder-pro/includes/class-ajax-handler.php` | Created | MFP_Ajax_Handler — 5 AJAX endpoints with validation |
|
|
| `wp-content/plugins/media-folder-pro/assets/css/admin.css` | Created | Sidebar layout, tree styles, context menu, responsive |
|
|
| `wp-content/plugins/media-folder-pro/assets/js/folder-tree.js` | Created | Vanilla JS folder tree — CRUD, context menu, inline edit |
|
|
|
|
## Decisions Made
|
|
|
|
| Decision | Rationale | Impact |
|
|
|----------|-----------|--------|
|
|
| Plugin renamed to media-folder-pro | User request | All references use MFP_ prefix |
|
|
| Author: Project Pro | User request | Plugin header and URI set |
|
|
| Vanilla JS (no jQuery) | Modern, no dependency | Simpler, lighter bundle |
|
|
| Empty-folder-only delete | Safety — prevent accidental data loss | Users must move content before deleting |
|
|
|
|
## Deviations from Plan
|
|
|
|
### Summary
|
|
|
|
| Type | Count | Impact |
|
|
|------|-------|--------|
|
|
| Scope changes | 1 | Plugin name change — no functional impact |
|
|
|
|
**Total impact:** Naming only, no functional deviation.
|
|
|
|
### Details
|
|
|
|
1. **Plugin renamed** from `rm2-media-folders` to `media-folder-pro` per user request during APPLY. All class prefixes changed from `RM2_Media_Folders_` to `MFP_`.
|
|
|
|
## Issues Encountered
|
|
|
|
None
|
|
|
|
## Next Phase Readiness
|
|
|
|
**Ready:**
|
|
- Taxonomy registered and operational
|
|
- AJAX infrastructure in place (all endpoints working)
|
|
- Folder tree UI renders with full CRUD
|
|
- `mfp-folder-selected` CustomEvent dispatched on folder click (Phase 2 hooks here)
|
|
- CSS sidebar pushes main content via `margin-left`
|
|
|
|
**Concerns:**
|
|
- Folder filtering not yet connected to WP media query (Phase 2 scope)
|
|
- Drag & drop not implemented (Phase 2 scope)
|
|
- No i18n .pot file generated yet (Phase 4)
|
|
|
|
**Blockers:**
|
|
- None
|
|
|
|
---
|
|
*Phase: 01-media-folders-plugin, Plan: 01*
|
|
*Completed: 2026-03-28*
|