Key takeaways
- WordPress offers four upload routes: the Media Library uploader, editor drag-and-drop, FTP for bulk transfers, and importing from external URLs.
- FTP bypasses PHP limits like upload_max_filesize and max_execution_time, but files stay invisible in the Media Library until a plugin or importer registers them.
- Files dropped directly into wp-content/uploads need a database attachment entry, because WordPress tracks media in the posts table, not just the filesystem.
- Raise upload_max_filesize, post_max_size, and max_execution_time together via php.ini or your hosting panel to fix single large file uploads.
- For client handovers, upload through the Media Library so attachment metadata, folders, ALT text, and cleanup tools work as expected.
WordPress provides four methods for uploading media: the Media Library uploader, drag-and-drop into the editor, FTP for bulk transfers, and importing from an external URL. The right choice depends on file count, file size, and your host's upload limits. This guide walks through each method step by step, followed by a decision table to help you choose the best option for your needs.
What are the different ways to upload media in WordPress?
WordPress offers four practical routes for getting files into the media library, each suited for different job sizes.
Media Library uploader
The Media Library screen allows for single files or small batches via Add New. This method is fine for a handful of images but can be cumbersome for larger uploads.
Drag-and-drop from the editor
In the block editor, dragging an image onto a block uploads it directly into the library. This method is fast for one-off placements but skips the library's organization step.
FTP for bulk files
For hundreds of files, upload via FTP and register them with a plugin. FTP bypasses PHP timeouts, but files remain invisible in the library until they are scanned in.
Importing from external URLs
Plugins can sideload images from a URL, which is useful when migrating content or pulling assets from a staging copy.
| Method | Best for | Watch out for |
|---|---|---|
| Media Library | Under ~20 files | Batch timeouts |
| Editor drag-and-drop | One-off placements | No folder organization |
| FTP | Hundreds of files | Files not registered |
| External URL import | Migrations | Hotlinked originals |
Regardless of the method you choose, media uploads can accumulate and clutter your library. FoldRocket enhances this process by adding virtual folders and unused-media cleanup features. You can learn more about how it compares to WP Media Folder.
How does the upload process differ between the block editor and the Media Library?
Where the file lands in both cases
Both methods ultimately place files in the Media Library within wp-content/uploads. Uploading from the block editor attaches the file to that post immediately. In contrast, uploading via Media → Add New leaves the file unattached until you insert it into a post.
When to upload from the editor vs the library first
Use the editor when working on a single post with a specific image. Upload to the library first when an image will appear on multiple pages, during content staging, or when preparing for a client handover. This approach simplifies future cleanup, as unattached files are easier to manage in one view. Remember to pay attention to ALT text and filenames during upload (see here).
When should you use FTP instead of the Media Library for uploads?
The decision framework: file count, file size, hosting limits
Use the Media Library for jobs involving roughly 20 files or fewer. Switch to FTP for hundreds of images, when restoring a migrated site, or for files exceeding the PHP upload_max_filesize limit. FTP bypasses PHP entirely, making size limits and timeout issues irrelevant. However, WordPress will not recognize these files until you register them. As a general rule, use FTP for client handover archives, video files, and bulk photo sets, while reserving the Media Library for files that clients will edit later.
How to FTP upload to wp-content/uploads correctly
Maintain the existing folder structure: wp-content/uploads/YYYY/MM/ for date-specific files, or an uploads/ root for batch imports. Keep the original filenames to ensure correct URLs, as renaming after registration alters permalinks. Upload in binary mode and confirm that file permissions are set to 644 for proper web server access.
Registering FTP files so WordPress sees them
Files uploaded via FTP remain invisible in the Media Library until WordPress creates attachment entries in the database. The standard solution is the WordPress importer, which handles attachments during content import. Export an XML file from a staging site where files were uploaded normally, then import it on the live site with "download and import file attachments" checked. Alternatively, use plugins that scan uploads/ to register orphaned files, but be aware that they may handle metadata differently. Always allocate time for this step, as an FTP upload without registration is only half the job.
Why do uploaded files fail to appear in the Media Library after FTP transfer?
WordPress tracks uploads in the database, not just the filesystem. Each file in wp-content/uploads requires a corresponding entry in the posts table (attachment post type) along with metadata for size, dimensions, and ALT text. FTP merely places the file on disk, leaving it as an orphaned file that the Media Library cannot recognize.
Plugins that scan and register orphaned files
The solution is to run a scan-and-register process. Plugins like Media File Renamer (Meow Apps) address this issue from the renaming side, while several folder plugins offer sync features. A scanner will traverse the uploads folder, create attachment entries for missing files, and attach the expected metadata. Run this process after any bulk FTP job to ensure files behave like standard uploads.
The honest limits: what FoldRocket cleanup does and does not cover
FoldRocket cleanup identifies unused media, duplicates, and unregistered files, with detailed documentation on the sync workflow available here. However, it cannot replace a proper handover process: registering a file does not equate to knowing which page uses it, and cleanup runs on a schedule you control, rather than automatically on every FTP transfer. If you frequently upload hundreds of files via FTP, plan for a scan each time.
How do you import media from an external URL into the WordPress Media Library?
The Media Library lacks a built-in "add from URL" button. You have three options: save the file and upload it normally, hotlink it, or use the WordPress importer to sideload media attached to a post.
Save a copy vs hotlinking: why hotlinking breaks
Hotlinking involves pointing your <img> tags to someone else's server. If that site blocks hotlinking, moves the file, or goes offline, your images will break, and you will have no local copy. Saving a copy avoids these issues: download the file, upload it through the block editor or Media Library, and WordPress will generate thumbnails on your server.
Importing during migration with the WordPress importer
During content migration, navigate to Tools > Import and run the WordPress importer, which sideloads images from the source feed into your library. Be mindful of your limits: the importer adheres to PHP defaults like upload_max_filesize (2M), post_max_size (8M), and max_execution_time (30 seconds) (PHP manual), which can stall large imports on shared hosting.
Risks: broken source URLs and duplicate imports
Re-running the importer can lead to duplicate media entries, and files with broken source URLs during import will result in broken attachments. After a significant import, run a cleanup pass to identify unused media and duplicates, then rename files to ensure URLs match their content. The Media File Renamer plugin can automate this workflow.
What are the WordPress upload size limits and how do you raise them?
The three limits that actually bite: upload_max_filesize, post_max_size, max_execution_time
Three PHP settings determine whether a file uploads successfully or results in an error: upload_max_filesize limits individual file sizes, post_max_size caps the entire request (it must be equal to or larger than the upload limit), and max_execution_time can terminate slow uploads. Shared hosts often set upload_max_filesize to 2–8 MB, which a typical camera photo can easily exceed.
Raising limits: php.ini, .htaccess, and asking your host
The cleanest solution is to create a php.ini or .user.ini file in the site root that sets all three values together. On Apache, you can use php_value upload_max_filesize 64M in your .htaccess file if your host permits it. For managed hosts, contacting support or adjusting settings in the hosting panel is usually quicker than guessing which file the server reads.
When raising limits is the wrong fix
If you are uploading many large files through the dashboard, simply raising limits will not prevent timeouts. For such cases, consider chunked uploads or FTP, as discussed earlier. Increasing limits addresses single large files but does not resolve issues with multiple large files.
How do you bulk upload hundreds of files without timing out?
Chunking uploads and why the HTTP uploader stalls
The Media Library uploader processes files through PHP one HTTP request at a time, with each request limited by upload_max_filesize and max_execution_time. Attempting to upload hundreds of images can cause the browser to stall or the request to fail mid-batch. WordPress outlines these limits directly, detailing common upload errors and size restrictions. Chunking your uploads into smaller groups of 10-20 files can help ensure each request completes successfully.
FTP plus a registration plugin as the reliable path
For large uploads, consider bypassing HTTP altogether. Use FTP or your host's file manager, then run a plugin that scans the uploads folder and registers the files as attachments. This method avoids PHP timeouts since the heavy lifting occurs outside of WordPress. However, be aware that files will be unsorted, unrenamed, and may duplicate existing library content.
Cleaning up after the bulk import: duplicates and unused media
Bulk imports often lead to cluttered media libraries. After registering files, conduct an audit for duplicates and unused media before your client accesses the library. FoldRocket can assist with this cleanup, scanning for unused files, removing duplicates, and organizing the remaining files into virtual folders for a more professional handover.
Which upload method should you use for client handovers and multi-site work?
For client handovers, always upload through the Media Library or use drag-and-drop, avoiding raw FTP. Library uploads generate essential attachment metadata, which is necessary for folders, ALT text, and cleanup tools to function. Files transferred solely via FTP will require a sync plugin before delivery.
Handing over cleaner sites: naming, folders, and ALT text before delivery
Rename files descriptively before uploading, organize them into virtual folders by client project, and ensure ALT text is filled out for every image. A cluttered library is often the first issue clients notice. If you inherit a messy site, run a cleanup pass for unused media and duplicates before handing over control.
Staging and multi-site: uploads don't consume seats
If you manage staging copies or a multi-site network, verify how your tools count installations. FoldRocket licenses by user, not by site, so staging environments and client sites under one freelancer do not multiply seat costs (pricing). In contrast, folder plugins like HappyFiles or FileBird typically charge per site, which can add up across a network.
Where FoldRocket fits in the workflow
Leverage FoldRocket for library management tasks such as organizing folders, cleanup, renaming, and optional AI features using your own API key. It is transparent about its limitations: it does not handle FTP synchronization directly, and AI features require a key you provide. Pair it with a sync plugin if you need to upload in bulk via FTP.
FAQ
Can I upload files directly to wp-content/uploads and have WordPress recognize them?
No. WordPress tracks media in the database, not just the filesystem, so files placed via FTP remain invisible until an attachment entry exists in the posts table. Use a scan-and-register plugin afterward, or import through the WordPress importer with "download and import file attachments" checked to ensure normal upload behavior.
Does uploading via FTP count against my hosting bandwidth or storage differently?
No. Storage and bandwidth usage is the same regardless of the transfer method; FTP simply bypasses PHP limits like upload_max_filesize and max_execution_time. The key difference lies in metadata: FTP files lack attachment entries, consuming disk space while remaining invisible in the Media Library until registered.
How do I find and delete media I uploaded but never used on the page?
Run a cleanup scan. Plugins like FoldRocket can identify files with no attachment to published content, flag duplicates, and allow for bulk deletion. This is particularly important after migrations or bulk imports, as these processes often result in orphaned files and unintended duplicates.
Is there a limit to how many files the WordPress Media Library can hold?
There is no hard limit; the library can accommodate tens of thousands of files. Practical limitations arise from database size, admin screen performance, and user patience when navigating a cluttered library. If browsing becomes sluggish, implementing virtual folders and conducting regular cleanup passes for unused media becomes essential.
Why does my upload work locally but fail on the live site?
Local environments typically have more generous PHP settings; shared hosts often default upload_max_filesize to 2-8 MB and max_execution_time to 30 seconds. Check these three limits on your live host, raise them via php.ini, .user.ini, or your hosting panel, or consider using FTP for large files.