{"id":297959,"date":"2026-05-21T15:47:06","date_gmt":"2026-05-21T15:47:06","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/dm-directory-file-uploader\/"},"modified":"2026-08-08T10:34:07","modified_gmt":"2026-08-08T10:34:07","slug":"medianest-upload-manager","status":"publish","type":"plugin","link":"https:\/\/sq-xk.wordpress.org\/plugins\/medianest-upload-manager\/","author":20958488,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"2.0.0","stable_tag":"2.0.0","tested":"7.0.3","requires":"6.7","requires_php":"7.4","requires_plugins":null,"header_name":"MediaNest Upload Manager","header_author":"DilipMorhavadiya","header_description":"Upload files into a dedicated uploads subfolder, browse the directory structure in wp-admin, and import files into the Media Library.","assets_banners_color":"6081b0","last_updated":"2026-08-08 10:34:07","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/profiles.wordpress.org\/dilip2615\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":280,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.1.1":{"tag":"1.1.1","author":"dilip2615","date":"2026-08-01 12:46:20"},"2.0.0":{"tag":"2.0.0","author":"dilip2615","date":"2026-08-08 10:34:07"}},"upgrade_notice":{"2.0.0":"<p>Major update: file management, settings, bulk import, REST API, activity log, Gutenberg block, frontend shortcode, and developer hooks.<\/p>"},"ratings":[],"assets_icons":{"icon-256x256.png":{"filename":"icon-256x256.png","revision":3544749,"resolution":"256x256","location":"assets","locale":"","width":1254,"height":1254}},"assets_banners":{"banner-772x250.png":{"filename":"banner-772x250.png","revision":3544749,"resolution":"772x250","location":"assets","locale":"","width":1908,"height":824}},"assets_blueprints":{},"all_blocks":{"medianest-upload-manager\/file-browser":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"medianest-upload-manager\/file-browser","version":"2.0.0","title":"MediaNest File Browser","category":"media","icon":"portfolio","description":"Display files from the MediaNest staging folder.","textdomain":"medianest-upload-manager","editorScript":"mediupma-block-editor","attributes":{"folder":{"type":"string","default":""},"title":{"type":"string","default":"MediaNest Files"}},"supports":{"html":false}}},"tagged_versions":["1.1.1","2.0.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3542368,"resolution":"1","location":"assets","locale":"","width":1376,"height":768}},"screenshots":[]},"plugin_section":[],"plugin_tags":[2466,88,87,84,259],"plugin_category":[50,59],"plugin_contributors":[225800,274157,170166],"plugin_business_model":[],"class_list":["post-297959","plugin","type-plugin","status-publish","hentry","plugin_tags-directory","plugin_tags-files","plugin_tags-import","plugin_tags-media","plugin_tags-upload","plugin_category-media","plugin_category-utilities-and-tools","plugin_contributors-dilip2615","plugin_contributors-dixitpujara","plugin_contributors-rafikwp","plugin_committers-dilip2615","plugin_committers-dixitpujara","plugin_committers-rafikwp"],"banners":{"banner":"https:\/\/ps.w.org\/medianest-upload-manager\/assets\/banner-772x250.png?rev=3544749","banner_2x":false,"banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/medianest-upload-manager\/assets\/icon-256x256.png?rev=3544749","icon_2x":"https:\/\/ps.w.org\/medianest-upload-manager\/assets\/icon-256x256.png?rev=3544749","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/medianest-upload-manager\/assets\/screenshot-1.png?rev=3542368","caption":""}],"raw_content":"<!--section=description-->\n<p>MediaNest Upload Manager is a complete media staging and workflow platform for WordPress.<\/p>\n\n<p><em>Features:<\/em><\/p>\n\n<ul>\n<li>Chunked uploads (Plupload) with pause\/cancel<\/li>\n<li>Folder drag-and-drop upload<\/li>\n<li>Directory browser with search and filter<\/li>\n<li>File preview (images, PDF) and URL copy<\/li>\n<li>Delete, rename, and move files<\/li>\n<li>Single, bulk, and folder import to Media Library<\/li>\n<li>Import status tracking in tree view<\/li>\n<li>Settings page (file types, roles, duplicates, import destination)<\/li>\n<li>Activity \/ audit log<\/li>\n<li>REST API (<code>\/wp-json\/mediupma\/v1\/<\/code>)<\/li>\n<li>Action\/filter hooks for developers<\/li>\n<li>Gutenberg block: MediaNest File Browser<\/li>\n<li>Frontend shortcode: <code>[medianest_upload folder=\"client-name\"]<\/code><\/li>\n<li>Webhook notifications (optional)<\/li>\n<\/ul>\n\n<h3>Shortcode<\/h3>\n\n<p>Display a frontend upload form for logged-in users:<\/p>\n\n<p>[medianest_upload folder=\"optional\/subfolder\" roles=\"subscriber,contributor\"]<\/p>\n\n<p><em>Attributes:<\/em><\/p>\n\n<ul>\n<li>folder -&gt; Target subfolder inside the staging directory (optional).<\/li>\n<li>roles -&gt; Comma-separated WordPress roles allowed to upload (optional).<\/li>\n<\/ul>\n\n<h3>REST API<\/h3>\n\n<p>The REST API lets external tools and custom integrations work with the staging folder. Enable it in Media \u2192 MediaNest Settings.<\/p>\n\n<p>Namespace: mediupma\/v1<br \/>\nBase URL: \/wp-json\/mediupma\/v1\/<\/p>\n\n<h4>Authentication<\/h4>\n\n<p>Requests must be made by a logged-in WordPress user. Send the REST nonce header: X-WP-Nonce<\/p>\n\n<p>You can also use Application Passwords. Each endpoint checks plugin capabilities (view, import, delete, or manage_options).<\/p>\n\n<h4>GET \/files<\/h4>\n\n<p>List all files and folders in the staging directory.<\/p>\n\n<p>Example: GET \/wp-json\/mediupma\/v1\/files<\/p>\n\n<p>Returns a tree array with file name, relative path, size, mime type, and URL.<\/p>\n\n<p>Permission: User can view staging files.<\/p>\n\n<h4>POST \/import<\/h4>\n\n<p>Import one or more staging files into the Media Library.<\/p>\n\n<p>Example: POST \/wp-json\/mediupma\/v1\/import<\/p>\n\n<p>Body: JSON object with a relatives array of file paths, e.g. invoices\/2026\/photo.jpg<\/p>\n\n<p>Returns success, failed, and skipped arrays.<\/p>\n\n<p>Permission: User can import files.<\/p>\n\n<h4>DELETE \/files\/{path}<\/h4>\n\n<p>Delete a file or empty folder from the staging directory.<\/p>\n\n<p>Example: DELETE \/wp-json\/mediupma\/v1\/files\/invoices\/2026\/photo.jpg<\/p>\n\n<p>Returns a success message on delete.<\/p>\n\n<p>Permission: User can delete staging files.<\/p>\n\n<h4>GET \/activity<\/h4>\n\n<p>Retrieve the latest activity log entries (upload, import, delete).<\/p>\n\n<p>Example: GET \/wp-json\/mediupma\/v1\/activity<\/p>\n\n<p>Returns an entries array with action, relative path, user, and timestamp.<\/p>\n\n<p>Permission: User can view staging files.<\/p>\n\n<h4>GET \/settings<\/h4>\n\n<p>Read plugin settings. The webhook URL is excluded for security.<\/p>\n\n<p>Example: GET \/wp-json\/mediupma\/v1\/settings<\/p>\n\n<p>Permission: manage_options (administrator only).<\/p>\n\n<h3>Developer Hooks<\/h3>\n\n<p>Extend or customize plugin behavior using WordPress actions and filters.<\/p>\n\n<h4>Action Hooks<\/h4>\n\n<p>Run custom code when staging files are uploaded, imported, or deleted.<\/p>\n\n<p>Upload:<\/p>\n\n<ul>\n<li>mediupma_before_upload -&gt; Before upload completes. Args: relative path, user ID.<\/li>\n<li>mediupma_after_upload -&gt; After file is saved. Args: relative path, user ID.<\/li>\n<\/ul>\n\n<p>Import:<\/p>\n\n<ul>\n<li>mediupma_before_import -&gt; Before Media Library import. Args: relative path, user ID.<\/li>\n<li>mediupma_after_import -&gt; After successful import. Args: attachment ID, relative path, user ID.<\/li>\n<\/ul>\n\n<p>Delete:<\/p>\n\n<ul>\n<li>mediupma_before_delete -&gt; Before delete. Args: relative path, user ID.<\/li>\n<li>mediupma_after_delete -&gt; After delete. Args: relative path, user ID.<\/li>\n<\/ul>\n\n<h4>Filter Hooks<\/h4>\n\n<p>Modify plugin defaults and permissions.<\/p>\n\n<ul>\n<li>mediupma_allowed_extensions -&gt; Filter allowed file extensions. Args: extensions array.<\/li>\n<li>mediupma_import_attachment_args -&gt; Filter attachment data before import. Args: args array, relative path.<\/li>\n<li>mediupma_can_manage -&gt; Filter user permission for an action. Args: can (bool), user ID, action name.<\/li>\n<\/ul>\n\n<h4>Example<\/h4>\n\n<p>Use add_action on mediupma_after_import with 3 parameters: attachment ID, relative path, and user ID.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin folder to <code>\/wp-content\/plugins\/<\/code><\/li>\n<li>Activate the plugin through the Plugins menu in WordPress<\/li>\n<li>Go to Media -&gt; MediaNest Upload Manager<\/li>\n<li>Configure settings at Media -&gt; MediaNest Settings<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20plugin%20create%20files%20outside%20wordpress%20uploads%3F\"><h3>Does this plugin create files outside WordPress uploads?<\/h3><\/dt>\n<dd><p>No. All content stays inside your WordPress uploads directory.<\/p><\/dd>\n<dt id=\"can%20i%20allow%20video%20files%3F\"><h3>Can I allow video files?<\/h3><\/dt>\n<dd><p>Yes. Go to Media -&gt; MediaNest Settings and configure allowed extensions.<\/p><\/dd>\n<dt id=\"how%20do%20i%20add%20frontend%20upload%20for%20clients%3F\"><h3>How do I add frontend upload for clients?<\/h3><\/dt>\n<dd><p>Use the shortcode: <code>[medianest_upload folder=\"client-deliveries\" roles=\"subscriber\"]<\/code><\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>2.0.0<\/h4>\n\n<ul>\n<li>Added file management: delete, rename, and move files from the directory browser.<\/li>\n<li>Added bulk import, folder import, and import status tracking in the tree view.<\/li>\n<li>Added image\/PDF preview, copy URL, search, and file-type filters.<\/li>\n<li>Added settings page for file types, roles, duplicate handling, import destination, and uninstall cleanup.<\/li>\n<li>Added activity log, REST API, developer hooks, optional webhooks, Gutenberg block, and frontend shortcode.<\/li>\n<li>Added folder upload and upload queue pause\/cancel controls.<\/li>\n<li>Added video and audio file support (configurable in settings).<\/li>\n<li>Improved chunked upload performance with memory-efficient file append.<\/li>\n<li>Fixed Copy URL on HTTP and local development sites.<\/li>\n<li>Added activation hook, translations support, and role-based permissions.<\/li>\n<\/ul>\n\n<h4>1.1.1<\/h4>\n\n<ul>\n<li>Updated branding and improved admin\/readme wording for WordPress.org.<\/li>\n<li>Security: restrict uploads and imports to images (JPG, PNG, GIF, WebP) and PDF only.<\/li>\n<li>Security: server-side content validation (image MIME detection, PDF magic bytes).<\/li>\n<li>Security: harden upload subfolders with index.php and .htaccess (Apache).<\/li>\n<li>Security: validate assembled file size after chunked uploads.<\/li>\n<li>Initial release.<\/li>\n<\/ul>","raw_excerpt":"Upload files into a dedicated uploads subfolder, browse from wp-admin, and import into the Media Library.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/sq-xk.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/297959","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sq-xk.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/sq-xk.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/sq-xk.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=297959"}],"author":[{"embeddable":true,"href":"https:\/\/sq-xk.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/dilip2615"}],"wp:attachment":[{"href":"https:\/\/sq-xk.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=297959"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/sq-xk.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=297959"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/sq-xk.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=297959"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/sq-xk.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=297959"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/sq-xk.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=297959"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/sq-xk.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=297959"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}