I-Soft File Manager: Foundation is a modular download manager built for modern WordPress, designed for organizations with many documents, a structured category tree, and editorial teams that need per-department write permissions.
isoft_fmf_category term maps 1:1 to a physical folder under wp-content/uploads/isoft-fmf-files/. Folder names mirror the category slug chain (skupstina-opstine/saziv-2025-2029/iv-sednica/). Rename a category slug and the folder renames on disk plus every affected file path updates in the database..htaccess-protected directory. All downloads route through a PHP handler with nonce verification, access-role checks, rate limiting, hotlink protection, and X-Sendfile / X-Accel-Redirect support.[isoft_fmf_list], [isoft_fmf_download id="123"], [isoft_fmf_categories], [isoft_fmf_search].wp/v2 with custom endpoints for listing and searching.I-Soft File Manager: Foundation stores files outside the Media Library in a predictable per-category folder tree. This is the key difference from most download managers: the filesystem is the source of truth for what’s stored where. Moving a download to a different category auto-moves its files on disk; deleting a category blocks if any downloads still reference it.
This design exists so automation tools can sync files in and out without having to understand WordPress internals. Rclone mirroring a cloud folder, an SFTP drop from a government mainframe, or a scheduled scan — all just write to isoft-fmf-files/<slug-path>/ and the plugin picks them up.
I-Soft File Manager: Foundation exposes its styling via CSS custom properties on :root so you can recolor cards from Appearance Customize Additional CSS without writing any selectors.
Example — recolor the PDF icon to match your theme blue and soften card borders:
:root {
--isoft-fmf-icon-pdf-bg: #1a73e8;
--isoft-fmf-card-border: #ddd;
}
--isoft-fmf-card-bg — Card background--isoft-fmf-card-border — Card and grid borders--isoft-fmf-row-border — Per-file row separator--isoft-fmf-title-band-bg — Grid-mode title band background--isoft-fmf-meta-color — Date / size / count text--isoft-fmf-empty-color — “No files available” text--isoft-fmf-badge-hot-bg — HOT badge background--isoft-fmf-badge-hot-color — HOT badge text--isoft-fmf-icon-color — File-type icon/badge text--isoft-fmf-icon-pdf-bg — PDF file color--isoft-fmf-icon-doc-bg — DOC / DOCX color--isoft-fmf-icon-xls-bg — XLS / XLSX color--isoft-fmf-icon-ppt-bg — PPT / PPTX color--isoft-fmf-icon-zip-bg — Archive (ZIP / RAR / 7Z) color--isoft-fmf-icon-img-bg — Image color--isoft-fmf-icon-vid-bg — Video color--isoft-fmf-icon-aud-bg — Audio color--isoft-fmf-icon-file-bg — Generic / unknown file colorFor deeper changes (layout, spacing, typography), all public classes use the .isoft-fmf- prefix with BEM naming. Key entry points:
.isoft-fmf-download-card — Outer wrapper around one download.isoft-fmf-download-card__title — Multi-file card heading.isoft-fmf-file-item — Per-file row.isoft-fmf-file-item__icon — Large file-type tile (list mode only).isoft-fmf-file-item__title — File or download title link.isoft-fmf-file-item__meta — Date / size / count meta block.isoft-fmf-file-item__action — Action column (button or status label).isoft-fmf-download-btn — The action button (intentionally not theme-locked via CSS variables; targets WP wp-element-button so theme styling stays in control).isoft-fmf-meta--type — Inline file-type badge (grid mode only).isoft-fmf-badge--hot — HOT marker.isoft-fmf-grid — Grid wrapper (use .isoft-fmf-grid--cols-3 etc. for per-column-count overrides).isoft-fmf-list-wrap — List wrapper.isoft-fmf-category-grid — Category grid wrapperFull source — including the un-minified React/JSX for the three Gutenberg blocks — is hosted publicly at:
https://github.com/I-SOFT-Mionica/isoft-fm-foundation
The compiled block bundles shipped under blocks/build/ are produced from blocks/<block-name>/{index,edit}.js via @wordpress/scripts (webpack). To rebuild from a clean checkout:
npm install
npm run build
The build script reads webpack.config.js, compiles each block’s index.js entry, and writes blocks/build/<block-name>.js plus an <block-name>.asset.php dependency manifest. Running npm run start instead watches the sources and rebuilds on save during development.