A theme is one zip file containing the theme files. Not the package you downloaded, not a folder, and not an archive you unzipped and zipped again. Getting that one thing right avoids the error that accounts for more failed installs than everything else put together.
#Installing through the admin
This is the right route in almost every case.
Open the theme browser
Go to AppearanceThemesAdd New.
Choose Upload Theme
The button sits at the top of the screen and reveals a file picker.
Select the theme zip
Pick the theme archive itself. If you downloaded a package containing several files, unzip it on your computer first and take the theme zip from inside it.
Install
Click Install Now and wait. WordPress uploads the file, unpacks it and reports success.
Activate
Click Activate. This is a separate step, and until you take it the theme is on your site but not running it.
Installing and activating are two different actions.
A good share of "I installed the theme and the site looks the same" reports are a theme that was installed and never activated. The Themes screen shows which one is live: it is the card at the front, labelled Active.
#The error you will probably meet
"The theme is missing the style.css stylesheet", also shown as "No valid theme stylesheet found".
There are two causes, and both are about the file rather than the theme.
The first, and by far the most common: you uploaded the full package instead of the theme zip. The package contains the theme, the documentation and the license files together, and WordPress has no idea what to do with it. Unzip it and upload the theme archive from inside.
The second: the theme zip was unzipped and zipped back up. Repacking adds an extra folder level inside the archive, and WordPress looks for style.css at the top and does not find it. Upload the archive exactly as you received it.
#Other things that can stop an install
Recognizing these is the point here; each has a longer answer in the installation troubleshooting article.
- The upload is rejected as too large
upload_max_filesizeorpost_max_sizeis below the size of the zip.- The upload times out
max_execution_timeis too low for the file to arrive and unpack.- The install runs out of memory
memory_limitis too low to unpack the archive.- WordPress asks for FTP credentials
The web server cannot write to
wp-content, so WordPress falls back to asking you to do it over FTP.- The theme lands in Broken Themes
Usually a PHP version below what the theme requires.
- There is no Add New button
The host or a security plugin has disabled file installation from the admin, often through
DISALLOW_FILE_MODS.
#When the admin will not take the file at all
If the upload limit cannot be raised, the remaining route is to place the theme folder on the server yourself over SFTP. It is a normal thing to do, and there is a walkthrough for it. Try the admin route first: it handles unpacking and permissions for you, and it is harder to get wrong.
#Common questions
Where does the theme actually go?
Into wp-content/themes/, one folder per theme, which is worth knowing because it is where you look when the admin cannot tell you whether the theme installed at all.
Can I install a theme over an older copy of itself?
Yes, WordPress asks whether to replace the existing one and replacing is the correct answer when you are updating by hand, since your settings and content live in the database rather than in the theme folder and survive the swap.
Do I need to delete the old theme?
No, and it is worth keeping one default WordPress theme installed, because that is what you switch to when you need to rule the theme out as the cause of a problem.
The install still fails
Note the exact wording of the error before you change anything, because every cause on this page produces different text and the text is what tells you which one you have, then match it against the installation troubleshooting article. "Missing style.css" is the file, a timeout or a memory error is the server, and a request for FTP credentials is file permissions.
#Still stuck
Open a support ticket with the exact error text, the name of the file you uploaded, and your PHP version.
Last updated