Skip to main content

Theme Switching with WP-CLI

Overview

Theme switching is one of the most common and powerful operations in WordPress management. WP-CLI makes it instant, safe, and scriptable—perfect for testing, troubleshooting, and managing multiple sites.

Understanding Theme Switching

Switching themes in WordPress changes the entire visual appearance and functionality of your site. With WP-CLI, you can:

  • Instantly activate any installed theme
  • List available themes and their status
  • Install and activate themes in one command
  • Switch themes across multiple sites simultaneously
  • Troubleshoot by reverting to default themes

Listing Themes

Before switching, you need to know what themes are available.

List All Themes

# List all installed themes
wp theme list

Output:

+-------------------+----------+--------+---------+
| name | status | update | version |
+-------------------+----------+--------+---------+
| twentytwentyfour | active | none | 1.0 |
| twentytwentythree | inactive | none | 1.0 |
| my-custom-theme | inactive | none | 1.2.3 |
+-------------------+----------+--------+---------+

List with Specific Fields

# Show only names
wp theme list --field=name

# Show name and status
wp theme list --fields=name,status

# Get only active theme
wp theme list --status=active --field=name

Check Theme Details

# Get detailed information about a specific theme
wp theme get twentytwentyfour

# Get specific field
wp theme get twentytwentyfour --field=version

Activating Themes

Basic Theme Activation

# Activate a theme by name
wp theme activate twentytwentyfour

Output:

Success: Switched to 'Twenty Twenty-Four' theme.

Activate with Verification

# Check if theme exists before activating
wp theme is-installed twentytwentyfour && wp theme activate twentytwentyfour || echo "Theme not found"

Installing and Activating Themes

Install from WordPress.org

# Install a theme from the WordPress repository
wp theme install astra

# Install and activate immediately
wp theme install astra --activate

# Install specific version
wp theme install astra --version=3.9.0

Install from ZIP File

# Install theme from local ZIP file
wp theme install /path/to/theme.zip

# Install from URL
wp theme install https://example.com/themes/custom-theme.zip --activate

Install Multiple Themes

# Install several themes at once
wp theme install astra generatepress kadence --activate
Bulk Installation

When installing multiple themes, only the last one will be activated. To install without activating:

wp theme install astra generatepress kadence

Common Theme Switching Scenarios

Scenario 1: Emergency Theme Switch (Site Broken)

Problem: A theme update broke your site.

Solution:

# Immediately switch to a default WordPress theme
wp theme activate twentytwentyfour

# Or use the latest default theme
wp theme activate $(wp theme list --status=inactive --name=twenty* --field=name | head -1)

Scenario 2: Testing a New Theme

Workflow:

# 1. Backup current theme name
CURRENT_THEME=$(wp theme list --status=active --field=name)

# 2. Install and activate test theme
wp theme install generatepress --activate

# 3. Test the site...

# 4. Revert to original theme
wp theme activate $CURRENT_THEME

Scenario 3: Switching Themes Across Multiple Sites

For WordPress Multisite:

# Switch theme on all subsites
for site_id in $(wp site list --field=blog_id); do
wp theme activate twentytwentyfour --url=$(wp site list --field=url | sed -n ${site_id}p)
echo "Switched theme for site $site_id"
done

For Multiple Separate Sites:

#!/bin/bash
# switch-themes.sh

sites=(
"/var/www/site1"
"/var/www/site2"
"/var/www/site3"
)

for site in "${sites[@]}"; do
wp theme activate twentytwentyfour --path=$site
echo "Switched theme for $site"
done

Scenario 4: A/B Testing Themes

#!/bin/bash
# ab-test-themes.sh

# Activate Theme A
wp theme activate theme-a
echo "Theme A activated. Test and press Enter to continue..."
read

# Activate Theme B
wp theme activate theme-b
echo "Theme B activated. Test and press Enter to revert..."
read

# Revert to original
wp theme activate theme-a

Advanced Theme Management

Check Theme Status

# Check if a theme is installed
wp theme is-installed astra && echo "Installed" || echo "Not installed"

# Check if a theme is active
wp theme status astra

Get Active Theme Information

# Get active theme name
wp theme list --status=active --field=name

# Get active theme version
ACTIVE_THEME=$(wp theme list --status=active --field=name)
wp theme get $ACTIVE_THEME --field=version

# Get active theme path
wp theme path $ACTIVE_THEME

Update Themes Before Switching

# Update a specific theme before activating
wp theme update astra
wp theme activate astra

# Update all themes
wp theme update --all

Theme Switching Best Practices

1. Always Backup Before Switching

# Backup database before major theme change
wp db export backup-before-theme-switch-$(date +%Y%m%d).sql

# Backup theme files
tar -czf themes-backup-$(date +%Y%m%d).tar.gz wp-content/themes/

2. Check for Theme Dependencies

# Check if theme requires specific plugins
wp theme get astra --field=requires_plugins

# Install required plugins first
wp plugin install elementor --activate
wp theme activate astra

3. Test on Staging First

# On staging environment
wp theme install new-theme --activate
# Test thoroughly...

# On production (after successful staging test)
wp theme install new-theme --activate

4. Document Theme Switches

# Log theme changes
echo "$(date): Switched from $(wp theme list --status=active --field=name) to twentytwentyfour" >> theme-changes.log
wp theme activate twentytwentyfour

Troubleshooting Theme Switches

Theme Won't Activate

# Check for PHP errors
wp theme activate problematic-theme 2>&1 | tee theme-error.log

# Enable debug mode
wp config set WP_DEBUG true --raw
wp config set WP_DEBUG_LOG true --raw

# Try activating again and check logs
wp theme activate problematic-theme
tail -f wp-content/debug.log

Broken Site After Theme Switch

# Immediately revert to default theme
wp theme activate twentytwentyfour

# Check for missing plugins
wp plugin list --status=inactive

# Activate required plugins
wp plugin activate elementor

Theme Not Found

# Verify theme is installed
wp theme list

# Check theme directory exists
ls -la wp-content/themes/

# Reinstall theme
wp theme install theme-name --force

Automating Theme Switches

Scheduled Theme Switch (Cron)

# Add to crontab: Switch to maintenance theme at 2 AM daily
0 2 * * * cd /var/www/html && wp theme activate maintenance-theme

# Switch back at 3 AM
0 3 * * * cd /var/www/html && wp theme activate main-theme

Conditional Theme Switching

#!/bin/bash
# conditional-theme-switch.sh

# Switch theme based on environment
if [ "$ENVIRONMENT" == "production" ]; then
wp theme activate production-theme
elif [ "$ENVIRONMENT" == "staging" ]; then
wp theme activate staging-theme
else
wp theme activate development-theme
fi

Theme Switching in WordPress Multisite

Network-Wide Theme Management

# Enable a theme for the entire network
wp theme enable twentytwentyfour --network

# Disable a theme network-wide
wp theme disable old-theme --network

# Activate theme on specific subsite
wp theme activate twentytwentyfour --url=subsite.example.com

Bulk Subsite Theme Switching

# Switch all subsites to the same theme
wp site list --field=url | xargs -I {} wp theme activate twentytwentyfour --url={}

# Switch only specific subsites
for url in site1.example.com site2.example.com; do
wp theme activate new-theme --url=$url
done

Performance Considerations

Theme Switching Impact

AspectImpactMitigation
Page CacheCleared automaticallyRebuild cache after switch
Widget AreasMay change/disappearDocument widget configurations
Menu LocationsMay need reassignmentUse same location names
Theme ModsLost when switchingExport before switching
Custom CSSTheme-specific, lostUse child theme or plugin

Minimize Downtime

# Pre-install theme before switching
wp theme install new-theme

# Switch during low-traffic period
wp theme activate new-theme

# Clear all caches
wp cache flush
wp rewrite flush

Quick Reference

Essential Commands

# List all themes
wp theme list

# Get active theme
wp theme list --status=active --field=name

# Activate theme
wp theme activate twentytwentyfour

# Install and activate
wp theme install astra --activate

# Check if installed
wp theme is-installed astra

# Get theme details
wp theme get astra

# Update theme
wp theme update astra

# Delete theme
wp theme delete old-theme

Common Workflows

# Safe theme switch workflow
CURRENT=$(wp theme list --status=active --field=name)
wp db export backup.sql
wp theme activate new-theme
# Test site...
# If issues: wp theme activate $CURRENT

# Install, test, and revert
wp theme install test-theme --activate
# Test...
wp theme delete test-theme --force

Comparison: WP-CLI vs wp-admin

TaskWP-CLIwp-admin
SpeedInstantRequires page loads
Bulk OperationsEasy (scripts)One at a time
Preview❌ No live preview✅ Theme Customizer preview
Automation✅ Fully scriptable❌ Manual only
Recovery✅ Works when site broken❌ May be inaccessible
Multisite✅ Bulk subsite switching⚠️ One site at a time
When to Use wp-admin

Use wp-admin's Theme Customizer when you need to preview theme changes before activating. WP-CLI is best for instant switching, troubleshooting, and automation.

Safety Checklist

Before switching themes in production:

  • Backup database: wp db export backup.sql
  • Backup theme files: tar -czf themes-backup.tar.gz wp-content/themes/
  • Test on staging environment first
  • Document current theme and version
  • Check for theme-specific plugins
  • Verify menu locations are compatible
  • Export theme mods: wp theme mod list --format=json > mods-backup.json
  • Schedule during low-traffic period
  • Have rollback plan ready

Summary

AspectDetails
Primary Commandwp theme activate THEME_NAME
Best ForEmergency fixes, bulk operations, automation
SpeedInstant (< 1 second)
SafetyAlways backup first
MultisiteFull support for network and subsites
LimitationNo visual preview (use wp-admin for that)
Key Takeaway

WP-CLI makes theme switching instant and scriptable. Use it for troubleshooting, testing, and managing multiple sites. For visual design decisions, use wp-admin's Theme Customizer.

Next Steps