This is a fallback, and most people never need it. The normal route is uploading the zip through the admin, which handles unpacking and permissions for you.
#When it is justified
- The archive is larger than your host upload limit
- The upload times out partway
- Your host or a security plugin removed the ability to install files from the admin
- WordPress shows an FTP credentials form instead of installing
File access does not depend on PHP limits, so it works where the admin gives up.
#What you need
Access to the site files, meaning SFTP, FTP, or your hosting panel file manager, and the theme archive unpacked on your own computer.
Use SFTP rather than plain FTP wherever your host offers it.
Plain FTP sends your password in clear text, so anyone watching traffic on a shared network can read it. Credentials come from your hosting panel, usually in an FTP accounts section, and any standard client works. FileZilla, Cyberduck and WinSCP are free and do the job.
#The process
Unpack the theme archive locally
Inside there should be one folder containing the theme files. If it unpacked into a folder containing another folder, the inner one is what you upload.
Connect and open the themes folder
Navigate to wp-content/themes/.
Upload the whole theme folder
This is the long step. A theme has a lot of files, so it can take several minutes. Do not interrupt it.
Wait for the client to report a clean finish
If some files did not transfer, the theme behaves strangely afterwards. Re-uploading is faster than working out which file is missing.
Activate
Back in the admin, go to AppearanceThemes. The theme is already in the list. Click Activate.
#The mistakes this route invites
You uploaded the archive instead of the unpacked folder. WordPress does not see a theme at all.
An extra folder level. themes/your-theme/your-theme/style.css instead of themes/your-theme/style.css. This is the most common manual upload error, and the symptom is the theme not appearing.
Not everything transferred. The connection dropped partway. The theme exists and the site looks broken or throws errors.
File ownership. After uploading, the files may be owned by a different user than the one PHP runs as. That is a question for your host, and it shows up as permission errors later rather than immediately.
#What support covers on this route
If you choose to install over FTP or SFTP, you should know how your server works. Connection problems, ports, files that will not unzip, permissions and server limits are hosting matters, and they are not covered by support, as the Support Policy sets out. Your host is the one who can see and change them.
Support does cover the theme itself once it is on the server intact. If you are unsure about any part of the transfer, use the admin upload instead, or ask your host to place the files for you.
#Plugins work the same way
The Pro plugin and the companion plugin install the same way, into wp-content/plugins/ instead.
If the theme had to go on this way, the plugin almost certainly will too. The limits that stopped one stop the other.
#Common questions
The theme still does not appear in the admin
Check the folder depth first. style.css has to sit directly inside the theme folder, not one level deeper, and that accounts for most cases. Then confirm your client reported the transfer as finished with no skipped files. A theme that appears but breaks the site usually has missing files.
Which folder do I upload into?
wp-content/themes/ for a theme and wp-content/plugins/ for a plugin, one folder per item. Nothing else about the layout matters.
My client cannot connect to the server
The host, port, protocol and credentials all come from your hosting account, so your host is the one to ask. Support cannot see or change your server's connection settings.
WordPress keeps asking me for FTP credentials in the admin
It means the web server cannot write to wp-content itself, so WordPress offers to do the write over FTP instead. You can fill the form in, but raise the underlying file ownership with your host, because it will come back on every update.
#Still stuck
Open a support ticket and say what you tried and where it stopped. Your product, your domain, a screenshot and the exact message you saw are usually enough to settle it in one reply.
Last updated