How to Manually Install a WordPress Theme: Upload, SFTP or WP-CLI
By Manob Editorial ·

To manually install a WordPress theme, unzip your download and find the installable theme .zip (the one with style.css in its top folder). Go to Appearance → Themes → Add Theme → Upload Theme, choose that file, click Install Now, then Activate. If the upload fails, copy the unzipped folder to wp-content/themes over SFTP or run wp theme install.
Labels and commands below were checked against WordPress 7.1 and the WP-CLI docs on 13 October 2026. Older names are noted where they differ.
What do you need before you install a theme?
- An Administrator account. On a multisite network, only a Super Admin can install themes (Network Admin → Themes).
- File changes allowed. If
DISALLOW_FILE_MODSistruein wp-config.php, theme installs are blocked for everyone. - A fresh backup of files and database, or a staging copy of the site.
- A server that meets the theme's requirements. If style.css declares "Requires PHP" or "Requires at least" and your server is older, WordPress refuses the upload with "The PHP version on your server is …, however the uploaded theme requires …"
- On WordPress.com, a paid plan. Theme uploads need the Personal, Premium, Business or Commerce plan (WordPress.com support).
Which file do you actually upload?
A premium theme download is often a full package: documentation, license files, demo content, a child theme and, inside, the installable theme zip. Upload the whole package and WordPress stops with "The package could not be installed. The theme is missing the style.css stylesheet," because it expects one top-level folder containing style.css. Unzip the download first and look for this:
theme-package.zip ← don't upload this
├── documentation/
├── licensing/
├── yourtheme-child.zip ← optional child theme
└── yourtheme.zip ← upload this one
└── yourtheme/
├── style.css (starts with "Theme Name: …")
├── functions.php
└── index.php (or templates/index.html in a block theme)
A valid theme has style.css with a Theme Name header plus index.php (classic) or templates/index.html (block). Can't find it? Check the documentation folder or ask the seller.
Method 1: How do you upload a theme .zip in the dashboard?
This is the simplest method for a zipped theme, and the WordPress documentation covers it alongside the file manager and FTP routes.
- Log in as an Administrator and open Appearance → Themes.
- Click Add Theme at the top of the screen. (It was labeled "Add New Theme" in WordPress 6.4 to 6.7 and "Add New" before that.)
- Click Upload Theme. The screen reads "If you have a theme in a .zip format, you may install or update it by uploading it here."
- Click the file field (your browser labels it "Choose File" or "Browse") and select the installable theme zip. Don't unzip this one.
- Click Install Now.
- Click Live Preview to check the theme against your own content, or Activate to switch to it.
To update the theme later, upload the newer zip the same way. WordPress says "This theme is already installed," compares the versions and offers Replace installed with uploaded. Back up first.
Method 2: How do you install a theme over SFTP, FTP or a file manager?
Use this when the dashboard upload hits a size limit, times out or isn't available.
- Unzip the installable theme zip on your computer. You should get one folder, such as
yourtheme/, with style.css directly inside it. - Connect with an SFTP client such as FileZilla, Cyberduck or WinSCP, using your host's credentials. Prefer SFTP to plain FTP.
- Open
wp-content/themes/(often insidepublic_html/). - Upload the folder, not the zip, so the final path is
wp-content/themes/yourtheme/style.css. - In WordPress, open Appearance → Themes, hover over the new theme and click Activate.
In a file manager such as cPanel's, upload the zip into wp-content/themes/, choose Extract, and delete the zip. Watch for double nesting (themes/yourtheme/yourtheme/style.css). WordPress still finds a theme one level down, but lists it as yourtheme/yourtheme, which can confuse child themes and updates, so move the inner folder up. If there's no style.css at either level, the theme appears under "Broken Themes" as "Stylesheet is missing."
Method 3: How do you install a theme with WP-CLI?
If you have SSH access, wp theme install takes a theme slug, a local zip path or a zip URL. Run it from the WordPress root folder:
# install from a zip you copied to the server and activate it
wp theme install ~/yourtheme.zip --activate
# or install now and activate later
wp theme install ~/yourtheme.zip
wp theme activate yourtheme
# overwrite an older installed version
wp theme install ~/yourtheme.zip --force
# confirm which theme is active
wp theme list
WP-CLI unpacks the zip on the server, so PHP's upload limits don't apply to it.
What if the theme is bigger than the upload limit?
PHP caps uploads with two settings. According to the PHP manual, upload_max_filesize defaults to 2M and post_max_size to 8M, though most hosts set them higher. You can see your values under Tools → Site Health → Info → Server ("Upload max filesize" and "PHP post max size"). Media → Add Media File also shows "Maximum upload file size."
- If the zip exceeds
upload_max_filesize, WordPress shows "The uploaded file exceeds the upload_max_filesize directive in php.ini." - If it exceeds
post_max_size, PHP throws away the whole form submission, security token included. WordPress then shows "The link you followed has expired." Versions before 4.9 showed "Are you sure you want to do this?" for the same failed check.
The quickest fix is to skip the browser upload and use Method 2 or 3. To raise the limits instead, edit php.ini, or the .user.ini file in your site root if your host runs PHP as CGI/FastCGI (PHP rereads it every 5 minutes by default, so changes can take that long), or use your host's PHP settings panel. Both settings are PHP_INI_PERDIR, so you can't change them with ini_set() in wp-config.php. Keep post_max_size larger than upload_max_filesize:
upload_max_filesize = 64M
post_max_size = 72M
memory_limit = 256M
Does the theme need plugins or demo content?
Many premium themes rely on plugins for page building, sliders or custom post types. After activation, look for "This theme requires the following plugins: …" with a Begin installing plugins link. It comes from the TGM Plugin Activation library, which adds Appearance → Install Plugins (a page titled "Install Required Plugins"; some themes rename it). On Manob, 194 of 707 items are Elementor-compatible, so Elementor is often first on that list. Activate required plugins before importing anything.
Themes that use One Click Demo Import add Appearance → Import Demo Data, which imports content, widgets and Customizer settings; others ship their own importer. Import on a new or staging site, because it adds pages, menus and media to whatever is already there.
Should you install a child theme too?
Only if you'll edit theme code: templates, PHP functions or the theme's CSS files. A theme update replaces the parent's folder and wipes edits inside it; a child theme keeps them separate. Customizer, Site Editor and Additional CSS changes live in the database and don't need one.
Many premium packages include a child theme zip: install the parent, then upload and activate the child. To make one, create wp-content/themes/yourtheme-child/ with two files. Template must match the parent's folder name exactly (Theme Handbook):
/* style.css */
/*
Theme Name: Yourtheme Child
Template: yourtheme
*/
<?php
// functions.php: load the parent stylesheet, then the child's
add_action( 'wp_enqueue_scripts', 'yourtheme_child_styles' );
function yourtheme_child_styles() {
wp_enqueue_style( 'yourtheme-parent', get_parent_theme_file_uri( 'style.css' ) );
wp_enqueue_style( 'yourtheme-child', get_stylesheet_uri(), array( 'yourtheme-parent' ) );
}
Check how the parent loads styles first: some already enqueue the child stylesheet, and block themes often need no enqueue at all. WP-CLI can build the folder: wp scaffold child-theme yourtheme-child --parent_theme=yourtheme --activate. Activate the child before customizing, because Customizer settings are saved per theme.
What do the common theme install errors mean?
| Error message | Cause | Fix |
|---|---|---|
| The package could not be installed. The theme is missing the style.css stylesheet. | You uploaded the full package, or a zip with an extra folder level. | Upload the inner theme zip. |
| The style.css stylesheet does not contain a valid theme header. | No Theme Name: line; wrong file. | Use the theme zip, not a docs or CSS folder. |
| The parent theme could not be found. You will need to install the parent theme, …, before you can use this child theme. | You uploaded a child theme whose parent isn't installed and couldn't be fetched from WordPress.org. | Install the parent, then activate the child. |
| The parent theme is missing. Please install the "…" parent theme. | Shown under Broken Themes when a child theme's parent is missing. | Install the parent, then activate the child. |
| The uploaded file exceeds the upload_max_filesize directive in php.ini. | Zip larger than PHP's upload limit. | Use SFTP or WP-CLI, or raise the limit. |
| The link you followed has expired. (Before 4.9: "Are you sure you want to do this?") | Upload exceeded post_max_size, or the page sat open too long. | Retry; if it repeats, use SFTP or raise post_max_size. |
| Destination folder already exists. | That folder is already in wp-content/themes. | Replace installed with uploaded, or --force. |
| Could not create directory. | The server can't write to wp-content/themes. | Ask your host to fix folder permissions. |
What if the site goes white or shows a critical error after activation?
A blank page or "There has been a critical error on this website" means a PHP fatal error, often from an old PHP version, a required plugin that isn't active, or too little memory. WordPress usually emails the admin a recovery mode link. If you're locked out:
- Connect over SFTP and rename the active theme's folder, for example
yourthemetoyourtheme-off. The WordPress troubleshooting guide gives this step for a white screen. Then open Appearance → Themes: WordPress reports that the active theme is broken and reverts to a default theme if one is installed. - Turn on logging in wp-config.php with
define( 'WP_DEBUG', true );anddefine( 'WP_DEBUG_LOG', true );, reload the page, and readwp-content/debug.log. - Fix what the log names, rename the folder back, reactivate, and turn debugging off.
Next, make it yours with our guide to customizing a WordPress theme. Still choosing? Browse WordPress themes on Manob (every item can be previewed before you buy), our consulting, agency and restaurant roundups, or what a WordPress theme costs.
Frequently asked questions
Can I install a WordPress theme without the dashboard?
Yes. Copy the unzipped theme folder to wp-content/themes over SFTP or your host's file manager, or run wp theme install with WP-CLI. Then activate the theme in Appearance → Themes or with wp theme activate.
Do I unzip a WordPress theme before uploading it?
Unzip the download package to find the installable theme zip, then upload that zip without unzipping it. Unzip the theme itself only when you install over SFTP or a file manager.
Why don't I see the Upload Theme button?
You're not an Administrator, you're on multisite (only Super Admins install themes), DISALLOW_FILE_MODS is on, or your WordPress.com plan doesn't allow uploads.
Will changing my theme delete my posts and pages?
No. Posts, pages and media stay. Menus, widgets and Customizer settings are tied to the theme and may need redoing.
Can I have two themes active at once?
No. WordPress runs one active theme. A child theme runs on top of its parent, which must stay installed.
