{"id":253423,"date":"2025-11-24T14:32:46","date_gmt":"2025-11-24T14:32:46","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/physical-media-folders\/"},"modified":"2026-07-19T19:59:10","modified_gmt":"2026-07-19T19:59:10","slug":"physical-media-folders","status":"publish","type":"plugin","link":"https:\/\/fa.wordpress.org\/plugins\/physical-media-folders\/","author":6331257,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"2.0","stable_tag":"2.0","tested":"7.0.2","requires":"5.8","requires_php":"7.4","requires_plugins":null,"header_name":"Physical Media Folders","header_author":"vinodkram","header_description":"Create\/select real folders under \/wp-content\/uploads and upload files directly into them. File URLs include the actual folder path.","assets_banners_color":"","last_updated":"2026-07-19 19:59:10","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":10,"downloads":1141,"num_ratings":0,"support_threads":1,"support_threads_resolved":1,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.1":{"tag":"1.0.1","author":"vinodkram","date":"2025-12-09 09:44:16"},"2.0":{"tag":"2.0","author":"vinodkram","date":"2026-07-19 19:59:10"}},"upgrade_notice":{"2.0":"<p>Version 2.0 adds an improved physical-folder interface, nested directories, selected-folder uploads, stronger validation, and improved WordPress compatibility.<\/p>"},"ratings":[],"assets_icons":{"icon-256x256.png":{"filename":"icon-256x256.png","revision":3415237,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.1","2.0"],"block_files":[],"assets_screenshots":{"screenshot-1.jpg":{"filename":"screenshot-1.jpg","revision":3613874,"resolution":"1","location":"assets","locale":"","width":1544,"height":500},"screenshot-1.png":{"filename":"screenshot-1.png","revision":3415237,"resolution":"1","location":"assets","locale":"","width":772,"height":250},"screenshot-2.jpg":{"filename":"screenshot-2.jpg","revision":3613874,"resolution":"2","location":"assets","locale":"","width":1544,"height":500},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3415237,"resolution":"2","location":"assets","locale":"","width":772,"height":250},"screenshot-3.jpg":{"filename":"screenshot-3.jpg","revision":3613874,"resolution":"3","location":"assets","locale":"","width":1544,"height":500},"screenshot-4.jpg":{"filename":"screenshot-4.jpg","revision":3613874,"resolution":"4","location":"assets","locale":"","width":1544,"height":500},"screenshot-5.jpg":{"filename":"screenshot-5.jpg","revision":3613874,"resolution":"5","location":"assets","locale":"","width":1544,"height":500},"screenshot-6.jpg":{"filename":"screenshot-6.jpg","revision":3613874,"resolution":"6","location":"assets","locale":"","width":1544,"height":500}},"screenshots":{"1":"Built for agencies, publishers, and every team that outgrew the flat Media Library","2":"Browse your real folder structure and pick where files go","3":"Select files, see exactly which folder they'll land in","4":"Instant confirmation \u2014 every upload shows its real folder path","5":"A native Folder column, right inside the Media Library you already use","6":"Filter your entire library by folder, right alongside dates"}},"plugin_section":[],"plugin_tags":[272366,130330,233,251127,272365],"plugin_category":[],"plugin_contributors":[272367],"plugin_business_model":[],"class_list":["post-253423","plugin","type-plugin","status-publish","hentry","plugin_tags-file-organization","plugin_tags-media-folders","plugin_tags-media-library","plugin_tags-physical-folders","plugin_tags-upload-folders","plugin_contributors-vinodram","plugin_committers-vinodkram"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/physical-media-folders\/assets\/icon-256x256.png?rev=3415237","icon_2x":"https:\/\/ps.w.org\/physical-media-folders\/assets\/icon-256x256.png?rev=3415237","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/physical-media-folders\/assets\/screenshot-1.png?rev=3415237","caption":"Built for agencies, publishers, and every team that outgrew the flat Media Library"},{"src":"https:\/\/ps.w.org\/physical-media-folders\/assets\/screenshot-2.png?rev=3415237","caption":"Browse your real folder structure and pick where files go"},{"src":"https:\/\/ps.w.org\/physical-media-folders\/assets\/screenshot-3.jpg?rev=3613874","caption":"Select files, see exactly which folder they'll land in"},{"src":"https:\/\/ps.w.org\/physical-media-folders\/assets\/screenshot-4.jpg?rev=3613874","caption":"Instant confirmation \u2014 every upload shows its real folder path"},{"src":"https:\/\/ps.w.org\/physical-media-folders\/assets\/screenshot-5.jpg?rev=3613874","caption":"A native Folder column, right inside the Media Library you already use"},{"src":"https:\/\/ps.w.org\/physical-media-folders\/assets\/screenshot-6.jpg?rev=3613874","caption":"Filter your entire library by folder, right alongside dates"}],"raw_content":"<!--section=description-->\n<p>Physical Media Folders is a WordPress media folder plugin that creates real directories inside <code>\/wp-content\/uploads<\/code>.<\/p>\n\n<p>Use it to create physical media folders, browse existing upload directories, select a destination folder, and upload new files directly into that location.<\/p>\n\n<p>The selected directory becomes part of the stored file path and public media URL.<\/p>\n\n<p>For example, a file uploaded into a folder named <code>press-kit<\/code> can be stored at:<\/p>\n\n<pre><code>\/wp-content\/uploads\/press-kit\/company-profile.pdf\n<\/code><\/pre>\n\n<p>Its public URL will also include the physical folder path:<\/p>\n\n<pre><code>https:\/\/example.com\/wp-content\/uploads\/press-kit\/company-profile.pdf\n<\/code><\/pre>\n\n<p>Unlike virtual media folder plugins that primarily organize attachments using database records, taxonomies, or metadata, Physical Media Folders works with actual directories on the server.<\/p>\n\n<p>The folder structure shown by the plugin reflects the physical structure available through FTP, hosting file managers, server backups, and other filesystem tools.<\/p>\n\n<p>Uploaded files are also registered as standard WordPress Media Library attachments, allowing them to remain available through the regular WordPress media workflow.<\/p>\n\n<h4>Create physical folders in WordPress uploads<\/h4>\n\n<p>Physical Media Folders lets authorized WordPress users create meaningful directories inside the active uploads location.<\/p>\n\n<p>Folders can be used to organize media by:<\/p>\n\n<ul>\n<li>Client<\/li>\n<li>Project<\/li>\n<li>Department<\/li>\n<li>Product<\/li>\n<li>Campaign<\/li>\n<li>Documentation type<\/li>\n<li>Press resource<\/li>\n<li>Course module<\/li>\n<li>Content category<\/li>\n<\/ul>\n\n<p>Nested folder structures can also be created when more detailed organization is required.<\/p>\n\n<p>Examples include:<\/p>\n\n<pre><code>\/wp-content\/uploads\/clients\/client-name\/\n\n\/wp-content\/uploads\/products\/product-name\/\n\n\/wp-content\/uploads\/courses\/module-1\/\n\n\/wp-content\/uploads\/press-kit\/brand-assets\/\n<\/code><\/pre>\n\n<h4>Upload media directly into a selected folder<\/h4>\n\n<p>The plugin provides a dedicated screen under:<\/p>\n\n<p><strong>Media &gt; Physical Folders<\/strong><\/p>\n\n<p>From this screen, users can:<\/p>\n\n<ol>\n<li>Browse existing directories under the WordPress uploads folder.<\/li>\n<li>Create a new physical folder.<\/li>\n<li>Create a nested folder structure.<\/li>\n<li>Select an upload destination.<\/li>\n<li>Choose a file from their computer.<\/li>\n<li>Upload the file directly into the selected directory.<\/li>\n<\/ol>\n\n<p>The uploaded file is then registered as a normal WordPress attachment.<\/p>\n\n<p>For supported image files, WordPress can also generate its standard attachment metadata and image sizes.<\/p>\n\n<h4>Physical folders compared with virtual media folders<\/h4>\n\n<p>Many WordPress media organization plugins create virtual folders.<\/p>\n\n<p>Virtual folders can be useful for organizing attachments inside the WordPress Dashboard, but they do not always change where the files are physically stored on the server.<\/p>\n\n<p>Physical Media Folders uses real filesystem directories.<\/p>\n\n<p>This means the folder structure visible through the plugin also exists inside <code>\/wp-content\/uploads<\/code>.<\/p>\n\n<p>Physical folders may be useful when you need:<\/p>\n\n<ul>\n<li>Predictable upload paths<\/li>\n<li>Meaningful directory names<\/li>\n<li>Clean, path-based media URLs<\/li>\n<li>Filesystem organization visible through FTP<\/li>\n<li>Easier navigation through a hosting file manager<\/li>\n<li>Separation of files by client, project, product, or department<\/li>\n<li>A folder structure that remains visible outside WordPress<\/li>\n<\/ul>\n\n<h4>Clean file paths and predictable media URLs<\/h4>\n\n<p>Files uploaded through the plugin retain the selected folder as part of their path.<\/p>\n\n<p>Instead of relying only on date-based upload directories, you can create paths that describe the purpose of the file.<\/p>\n\n<p>For example:<\/p>\n\n<pre><code>\/uploads\/press-kit\/logo.png\n\n\/uploads\/client-a\/contracts\/agreement.pdf\n\n\/uploads\/products\/product-one\/manual.pdf\n\n\/uploads\/training\/module-two\/video.mp4\n<\/code><\/pre>\n\n<p>This can make file locations easier to understand for administrators, developers, content editors, and teams working with server files.<\/p>\n\n<h4>Key features<\/h4>\n\n<ul>\n<li>Create real folders inside <code>\/wp-content\/uploads<\/code><\/li>\n<li>Create nested physical folder structures<\/li>\n<li>Browse existing upload directories in a folder tree<\/li>\n<li>Select a destination folder before uploading<\/li>\n<li>Upload new media directly into the selected physical directory<\/li>\n<li>Include the folder path in the final media URL<\/li>\n<li>Register uploaded files in the WordPress Media Library<\/li>\n<li>Generate standard WordPress image attachment metadata<\/li>\n<li>Follow WordPress file-type restrictions<\/li>\n<li>Follow the configured WordPress upload-size limit<\/li>\n<li>Restrict folder operations to users with upload permissions<\/li>\n<li>Use nonce verification for administrative actions<\/li>\n<li>Validate paths to prevent directory traversal<\/li>\n<li>Prevent navigation through symbolic links<\/li>\n<li>Use prefixed plugin identifiers to reduce conflicts<\/li>\n<li>Provide a lightweight, focused administration interface<\/li>\n<li>Require no separate configuration screen<\/li>\n<\/ul>\n\n<h4>WordPress-native upload handling<\/h4>\n\n<p>Physical Media Folders uses WordPress upload and attachment APIs for file processing.<\/p>\n\n<p>The plugin respects:<\/p>\n\n<ul>\n<li>WordPress user capabilities<\/li>\n<li>WordPress upload permissions<\/li>\n<li>Allowed MIME types<\/li>\n<li>Maximum upload sizes<\/li>\n<li>Attachment creation<\/li>\n<li>Image metadata generation<\/li>\n<li>Existing upload-directory settings<\/li>\n<\/ul>\n\n<p>This helps uploaded files remain compatible with the standard Media Library workflow.<\/p>\n\n<h4>Current limitations<\/h4>\n\n<p>The current version focuses on creating folders and uploading new files into selected physical directories.<\/p>\n\n<p>It does not currently:<\/p>\n\n<ul>\n<li>Automatically move existing Media Library files<\/li>\n<li>Move existing attachments between folders<\/li>\n<li>Rename existing folders<\/li>\n<li>Delete existing folders<\/li>\n<li>Filter the standard Media Library grid by physical folder<\/li>\n<li>Replace the default WordPress media modal<\/li>\n<li>Automatically register files uploaded through FTP<\/li>\n<li>Synchronize manually created filesystem files<\/li>\n<li>Provide confirmed WordPress Multisite support<\/li>\n<li>Guarantee compatibility with every CDN or media-offloading plugin<\/li>\n<\/ul>\n\n<p>These limitations are stated clearly so administrators can evaluate whether the plugin matches their workflow.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin files to <code>\/wp-content\/plugins\/physical-media-folders<\/code>, or install the plugin through the WordPress Plugins screen.<\/li>\n<li>Activate <strong>Physical Media Folders<\/strong> through the Plugins screen.<\/li>\n<li>Open <strong>Media &gt; Physical Folders<\/strong>.<\/li>\n<li>Create a new folder or select an existing upload directory.<\/li>\n<li>Choose a file and upload it into the selected physical folder.<\/li>\n<li>Confirm that the uploaded file appears in the WordPress Media Library.<\/li>\n<\/ol>\n\n<p>Before enabling the plugin on an established production website, test it on a staging environment.<\/p>\n\n<p>Your hosting environment must allow WordPress to create directories and upload files inside the active WordPress uploads location.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"how%20do%20i%20create%20physical%20folders%20in%20wordpress%20uploads%3F\"><h3>How do I create physical folders in WordPress uploads?<\/h3><\/dt>\n<dd><p>Open <strong>Media &gt; Physical Folders<\/strong> in the WordPress Dashboard.<\/p>\n\n<p>Select the uploads root or an existing directory, click the option to create a new folder, and enter the folder name.<\/p>\n\n<p>The plugin creates an actual directory inside the active WordPress uploads location.<\/p><\/dd>\n<dt id=\"can%20i%20upload%20wordpress%20media%20to%20a%20custom%20folder%3F\"><h3>Can I upload WordPress media to a custom folder?<\/h3><\/dt>\n<dd><p>Yes.<\/p>\n\n<p>Select a physical folder from the folder tree and upload a new file. The file will be stored directly inside the selected directory.<\/p><\/dd>\n<dt id=\"does%20the%20selected%20folder%20appear%20in%20the%20media%20url%3F\"><h3>Does the selected folder appear in the media URL?<\/h3><\/dt>\n<dd><p>Yes.<\/p>\n\n<p>Files uploaded through the plugin include the selected folder path in their stored location and public attachment URL.<\/p>\n\n<p>For example:<\/p>\n\n<pre><code>\/wp-content\/uploads\/press-kit\/document.pdf\n<\/code><\/pre><\/dd>\n<dt id=\"are%20uploaded%20files%20added%20to%20the%20wordpress%20media%20library%3F\"><h3>Are uploaded files added to the WordPress Media Library?<\/h3><\/dt>\n<dd><p>Yes.<\/p>\n\n<p>Files uploaded through the Physical Folders screen are registered as standard WordPress attachments and appear in the Media Library.<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20move%20existing%20media%20library%20files%3F\"><h3>Does the plugin move existing Media Library files?<\/h3><\/dt>\n<dd><p>No.<\/p>\n\n<p>The current version does not move existing attachments automatically or manually. It creates physical folders and uploads new files into the selected directory.<\/p><\/dd>\n<dt id=\"can%20i%20move%20an%20existing%20attachment%20into%20another%20folder%3F\"><h3>Can I move an existing attachment into another folder?<\/h3><\/dt>\n<dd><p>Not currently.<\/p>\n\n<p>Moving existing Media Library attachments between physical folders is not included in this version.<\/p><\/dd>\n<dt id=\"can%20i%20rename%20or%20delete%20folders%3F\"><h3>Can I rename or delete folders?<\/h3><\/dt>\n<dd><p>Not currently.<\/p>\n\n<p>The plugin supports browsing, creating, and selecting physical folders.<\/p>\n\n<p>Folder renaming and deletion are not included in the current version.<\/p><\/dd>\n<dt id=\"what%20is%20the%20difference%20between%20physical%20and%20virtual%20media%20folders%3F\"><h3>What is the difference between physical and virtual media folders?<\/h3><\/dt>\n<dd><p>Virtual media folders usually organize attachments through database records, metadata, or taxonomies without changing the physical file location.<\/p>\n\n<p>Physical Media Folders creates actual directories inside the WordPress uploads folder and stores uploaded files in those directories.<\/p><\/dd>\n<dt id=\"will%20deactivating%20the%20plugin%20break%20existing%20file%20urls%3F\"><h3>Will deactivating the plugin break existing file URLs?<\/h3><\/dt>\n<dd><p>Deactivating the plugin does not delete or relocate previously uploaded files.<\/p>\n\n<p>Existing files remain in their physical directories, and their URLs should continue working as long as the files and server configuration remain unchanged.<\/p>\n\n<p>The Physical Folders interface and folder-specific upload workflow will not be available while the plugin is inactive.<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20replace%20the%20standard%20wordpress%20media%20library%3F\"><h3>Does the plugin replace the standard WordPress Media Library?<\/h3><\/dt>\n<dd><p>No.<\/p>\n\n<p>The plugin adds a separate <strong>Media &gt; Physical Folders<\/strong> screen.<\/p>\n\n<p>Files uploaded through this screen are still registered in the standard WordPress Media Library.<\/p><\/dd>\n<dt id=\"can%20i%20upload%20files%20directly%20into%20the%20uploads%20root%3F\"><h3>Can I upload files directly into the uploads root?<\/h3><\/dt>\n<dd><p>Yes.<\/p>\n\n<p>You can select the uploads root or choose a directory below it before uploading.<\/p><\/dd>\n<dt id=\"which%20file%20types%20can%20be%20uploaded%3F\"><h3>Which file types can be uploaded?<\/h3><\/dt>\n<dd><p>The plugin follows the file types allowed by WordPress for the current user and website configuration.<\/p>\n\n<p>Disallowed file types will be rejected.<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20allow%20executable%20php%20files%20to%20be%20uploaded%3F\"><h3>Does the plugin allow executable PHP files to be uploaded?<\/h3><\/dt>\n<dd><p>No.<\/p>\n\n<p>Uploads are validated using WordPress file-type rules.<\/p>\n\n<p>The plugin also adds protective files to newly created or used directories where supported. Server-level upload security remains the responsibility of the hosting provider or website administrator.<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20follow%20the%20wordpress%20maximum%20upload%20size%3F\"><h3>Does the plugin follow the WordPress maximum upload size?<\/h3><\/dt>\n<dd><p>Yes.<\/p>\n\n<p>The plugin applies the maximum upload size configured for the WordPress website and hosting environment.<\/p><\/dd>\n<dt id=\"can%20files%20added%20through%20ftp%20be%20synchronized%20automatically%3F\"><h3>Can files added through FTP be synchronized automatically?<\/h3><\/dt>\n<dd><p>No.<\/p>\n\n<p>Files manually uploaded through FTP or a hosting file manager are not automatically registered as WordPress Media Library attachments.<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20support%20wordpress%20multisite%3F\"><h3>Does the plugin support WordPress Multisite?<\/h3><\/dt>\n<dd><p>WordPress Multisite compatibility has not yet been formally tested.<\/p>\n\n<p>Test the plugin on a staging multisite installation before enabling it across a production network.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20cdn%20or%20media-offloading%20plugins%3F\"><h3>Does it work with CDN or media-offloading plugins?<\/h3><\/dt>\n<dd><p>Compatibility depends on how the other plugin changes upload paths, attachment URLs, or file-storage behavior.<\/p>\n\n<p>Test the plugin combination on a staging website before using it in production.<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20change%20existing%20wordpress%20upload%20settings%3F\"><h3>Does the plugin change existing WordPress upload settings?<\/h3><\/dt>\n<dd><p>No.<\/p>\n\n<p>The plugin applies its custom directory only during uploads initiated through the Physical Folders screen.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>2.0<\/h4>\n\n<ul>\n<li>Added an improved physical-folder interface.<\/li>\n<li>Added physical folder creation.<\/li>\n<li>Added nested folder creation.<\/li>\n<li>Added browsing of existing upload directories.<\/li>\n<li>Added folder selection before uploading.<\/li>\n<li>Added direct uploads into selected physical directories.<\/li>\n<li>Added WordPress Media Library attachment registration.<\/li>\n<li>Added WordPress image metadata generation.<\/li>\n<li>Added WordPress file-type validation.<\/li>\n<li>Added upload-size validation.<\/li>\n<li>Added user-capability verification.<\/li>\n<li>Added nonce verification for administrative actions.<\/li>\n<li>Added directory traversal protection.<\/li>\n<li>Added symbolic-link traversal protection.<\/li>\n<li>Added additional upload-directory protection where supported.<\/li>\n<li>Added uniquely prefixed classes, methods, actions, handles, and identifiers.<\/li>\n<li>Improved admin upload behavior.<\/li>\n<li>Improved plugin security.<\/li>\n<li>Improved WordPress coding-standard compatibility.<\/li>\n<li>Improved WordPress Plugin Check compatibility.<\/li>\n<li>Improved plugin documentation and screenshot descriptions.<\/li>\n<\/ul>\n\n<h4>1.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<\/ul>\n\n<h4>1.1.4<\/h4>\n\n<ul>\n<li>Fix text domain to 'physical-media-folders' in headers and i18n calls.<\/li>\n<li>Align readme plugin name with header.<\/li>\n<\/ul>","raw_excerpt":"Create real media folders in WordPress uploads and store files in physical directories with clean, path-based URLs.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/fa.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/253423","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fa.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/fa.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/fa.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=253423"}],"author":[{"embeddable":true,"href":"https:\/\/fa.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/vinodkram"}],"wp:attachment":[{"href":"https:\/\/fa.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=253423"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/fa.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=253423"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/fa.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=253423"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/fa.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=253423"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/fa.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=253423"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/fa.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=253423"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}