Theme Customization with WP-CLI
While WP-CLI cannot replicate the visual Theme Customizer interface, it provides powerful commands for managing theme modifications (theme mods), scaffolding custom themes, and automating theme-related configurations.
Understanding Theme Customization in WP-CLI
Theme customization in WordPress typically happens through the visual Customizer (Appearance → Customize). However, WP-CLI offers complementary capabilities:
- Managing theme modifications (theme mods) programmatically
- Scaffolding custom themes from templates
- Exporting/importing theme settings
- Automating theme configuration across multiple sites
WP-CLI cannot provide live visual previews like the Theme Customizer. For visual design work, use wp-admin. Use WP-CLI for automation, bulk operations, and programmatic theme management.
Managing Theme Modifications (Theme Mods)
Theme mods are settings stored in the database that control theme appearance and behavior.
View Current Theme Mods
# Get all theme mods for the active theme
wp theme mod list
# Get a specific theme mod value
wp theme mod get header_textcolor
Set Theme Modifications
# Set a theme mod value
wp theme mod set header_textcolor "#ff0000"
# Set background color
wp theme mod set background_color "ffffff"
# Set custom logo (requires attachment ID)
wp theme mod set custom_logo 123
Remove Theme Modifications
# Remove a specific theme mod
wp theme mod remove header_textcolor
# Remove all theme mods (reset to defaults)
wp option delete theme_mods_twentytwentyfour
To find the attachment ID for logos or images:
wp media list --fields=ID,title,file
Common Theme Mod Examples
Example 1: Set Site Logo
# First, upload the logo and get its ID
wp media import /path/to/logo.png --porcelain
# Returns: 456
# Set the logo
wp theme mod set custom_logo 456
Example 2: Configure Header Settings
# Set header text color
wp theme mod set header_textcolor "333333"
# Hide site title
wp theme mod set header_text 0
# Show site title
wp theme mod set header_text 1
Example 3: Background Customization
# Set background color
wp theme mod set background_color "f5f5f5"
# Set background image (requires attachment ID)
wp theme mod set background_image 789
# Set background repeat
wp theme mod set background_repeat "no-repeat"
# Set background position
wp theme mod set background_position_x "center"
Scaffolding Custom Themes
WP-CLI can generate a starter theme structure, saving hours of manual setup.
Create a Basic Theme
# Scaffold a new theme
wp scaffold _s my-custom-theme --theme_name="My Custom Theme" --author="Your Name"
What this creates:
- Complete theme directory structure
style.csswith proper headersfunctions.phpwith basic setup- Template files (index.php, header.php, footer.php, etc.)
- Based on Underscores (_s) starter theme
Scaffold with Advanced Options
# Create theme with specific options
wp scaffold _s my-theme \
--theme_name="My Theme" \
--author="John Doe" \
--author_uri="https://example.com" \
--sassify \
--activate
Options explained:
--theme_name- Human-readable theme name--author- Theme author name--author_uri- Author website URL--sassify- Include Sass/SCSS support--activate- Activate theme immediately after creation
Scaffold Child Theme
# Create a child theme
wp scaffold child-theme my-child-theme --parent_theme=twentytwentyfour --theme_name="My Child Theme"
This creates:
- Child theme directory
style.csswith proper parent theme referencefunctions.phpthat enqueues parent styles
Exporting and Importing Theme Settings
Export Theme Mods
# Export all theme mods to JSON
wp theme mod list --format=json > theme-mods-backup.json
# Export specific theme mods
wp option get theme_mods_twentytwentyfour --format=json > twentytwentyfour-mods.json
Import Theme Mods
# Import theme mods from exported file
# (Requires custom script or manual application)
# Set individual mods from backup
wp theme mod set header_textcolor "$(cat backup.json | jq -r '.header_textcolor')"
For bulk importing, create a bash script that reads your JSON export and applies each setting:
#!/bin/bash
# import-theme-mods.sh
while IFS= read -r line; do
key=$(echo $line | jq -r '.key')
value=$(echo $line | jq -r '.value')
wp theme mod set "$key" "$value"
done < theme-mods.json
Working with Menus via WP-CLI
Menus are a key part of theme customization.
List Menus
# List all menus
wp menu list
# Get menu details
wp menu item list <menu-id>
Create and Assign Menus
# Create a new menu
wp menu create "Main Menu"
# Assign menu to a theme location
wp menu location assign main-menu primary
# Add items to menu
wp menu item add-post main-menu 123 --title="About Us"
wp menu item add-custom main-menu "Contact" https://example.com/contact
Automating Theme Configuration
Example: Bulk Theme Setup Script
#!/bin/bash
# setup-theme.sh - Automate theme configuration
# Set theme mods
wp theme mod set header_textcolor "333333"
wp theme mod set background_color "ffffff"
# Upload and set logo
LOGO_ID=$(wp media import /path/to/logo.png --porcelain)
wp theme mod set custom_logo $LOGO_ID
# Create and configure menu
wp menu create "Main Navigation"
wp menu location assign main-navigation primary
wp menu item add-post main-navigation 2 --title="Home"
wp menu item add-post main-navigation 5 --title="About"
echo "Theme configuration complete!"
Multi-Site Theme Configuration
# Apply same theme settings across all sites in a network
for site_url in $(wp site list --field=url); do
wp theme mod set header_textcolor "333333" --url=$site_url
wp theme mod set background_color "ffffff" --url=$site_url
echo "Configured theme for $site_url"
done
Advanced Theme Customization
Modify Theme Support Features
# Check what features current theme supports
wp theme list --fields=name,version,status
# Enable/disable features (requires functions.php modification)
# WP-CLI can't directly modify theme support, but can scaffold code
Generate Custom Template Files
# Scaffold a custom page template
wp scaffold template-part my-custom-template --theme=my-theme
# This creates: wp-content/themes/my-theme/template-parts/my-custom-template.php
Troubleshooting Theme Customization
Reset Theme to Defaults
# Remove all theme modifications
wp option delete theme_mods_$(wp theme list --status=active --field=name)
# Deactivate and reactivate theme
ACTIVE_THEME=$(wp theme list --status=active --field=name)
wp theme activate twentytwentyfour
wp theme activate $ACTIVE_THEME
Check for Theme Errors
# Enable debug mode
wp config set WP_DEBUG true --raw
# Check for PHP errors in theme files
wp eval 'error_log(print_r(get_theme_mods(), true));'
# View error log
tail -f /path/to/wp-content/debug.log
Best Practices
1. Always Backup Before Customization
# Export current theme mods before making changes
wp theme mod list --format=json > backup-$(date +%Y%m%d).json
# Backup entire database
wp db export backup-$(date +%Y%m%d).sql
2. Use Child Themes for Customization
# Never modify parent themes directly
wp scaffold child-theme my-child --parent_theme=twentytwentyfour
wp theme activate my-child
3. Test on Staging First
# Clone production to staging
wp db export production.sql
# Transfer to staging
wp db import production.sql --url=staging.example.com
# Test customizations on staging
wp theme mod set header_textcolor "ff0000" --url=staging.example.com
4. Document Your Customizations
# Create a customization log
echo "$(date): Set header color to #333333" >> theme-changes.log
wp theme mod set header_textcolor "333333"
Common Theme Mod Keys
Different themes use different mod keys. Here are common ones:
| Theme Mod Key | Purpose | Example Value |
|---|---|---|
custom_logo | Site logo | Attachment ID (e.g., 123) |
header_textcolor | Header text color | Hex color (e.g., "333333") |
header_text | Show/hide site title | 0 (hide) or 1 (show) |
background_color | Background color | Hex color (e.g., "ffffff") |
background_image | Background image | Attachment ID |
background_repeat | Background repeat | repeat, no-repeat, etc. |
nav_menu_locations | Menu assignments | Array of menu IDs |
To discover what mods your theme uses:
wp theme mod list
Or check the theme's customizer.php or functions.php files.
Quick Reference
Essential Commands
# View all theme mods
wp theme mod list
# Get specific mod
wp theme mod get custom_logo
# Set mod
wp theme mod set header_textcolor "333333"
# Remove mod
wp theme mod remove header_textcolor
# Scaffold new theme
wp scaffold _s my-theme --activate
# Create child theme
wp scaffold child-theme my-child --parent_theme=twentytwentyfour
Common Workflows
# Complete theme setup workflow
wp scaffold child-theme my-site-theme --parent_theme=twentytwentyfour
wp theme activate my-site-theme
wp theme mod set header_textcolor "333333"
LOGO_ID=$(wp media import logo.png --porcelain)
wp theme mod set custom_logo $LOGO_ID
Summary
| Task | WP-CLI Capability | Recommended Approach |
|---|---|---|
| Visual Design | ❌ Limited | Use wp-admin Customizer |
| Theme Mods Management | ✅ Full support | Use WP-CLI for automation |
| Theme Scaffolding | ✅ Excellent | Use WP-CLI to save time |
| Bulk Configuration | ✅ Excellent | Use WP-CLI for multiple sites |
| Live Preview | ❌ Not available | Use wp-admin |
| Menu Management | ✅ Full support | Use WP-CLI for automation |
WP-CLI excels at automating theme configuration and scaffolding themes, but cannot replace the visual Theme Customizer for design work. Use both tools strategically based on your needs.
Next Steps
- Learn theme switching: Theme Activation & Switching
- Explore plugin management: Plugin Management
- Master database operations: Database Management