A lightweight WordPress library for working with themes and theme management. Provides clean APIs for theme operations, feature detection, and value/label formatting perfect for forms and admin interfaces.
- 🎯 Clean API: WordPress-style snake_case methods with consistent interfaces
- 🔍 Built-in Search: Theme search with value/label formatting
- 📋 Form-Ready Options: Perfect value/label arrays for selects and forms
- 🎨 Feature Detection: Easy theme feature and support checking
- 📄 Template Management: Page template discovery and formatting
- 🧩 Child Theme Support: Parent/child theme relationship handling
- 🏗️ Block Theme Detection: FSE and block theme identification
- 🔧 Version Checks: Theme version comparison utilities
- PHP 7.4 or later
- WordPress 5.0 or later
composer require arraypress/wp-theme-utils
use ArrayPress\ThemeUtils\Theme;
// Get current theme
$current_theme = Theme::get_current();
// Get theme by stylesheet
$theme = Theme::get( 'twentytwentyfour' );
// Check if theme exists
if ( Theme::exists( 'my-theme' ) ) {
// Theme exists
}
// Get theme information
$name = Theme::get_name();
$version = Theme::get_version();
$directory_uri = Theme::get_directory_uri();
// Check if theme is active
if ( Theme::is_active( 'twentytwentyfour' ) ) {
// Theme is active
}
// Check multiple themes
if ( Theme::is_active( [ 'theme-one', 'theme-two' ] ) ) {
// One of the themes is active
}
// Check if using default WordPress theme
if ( Theme::is_default_active() ) {
// Using a default WP theme
}
// Check theme features
if ( Theme::supports( 'post-thumbnails' ) ) {
// Theme supports featured images
}
if ( Theme::supports_gutenberg() ) {
// Theme supports Gutenberg features
}
if ( Theme::is_block_theme() ) {
// Theme is a block/FSE theme
}
// Version checking
if ( Theme::is_version( '2.0', '>=' ) ) {
// Current theme version is 2.0 or higher
}
// Child theme checking
if ( Theme::is_child() ) {
$parent = Theme::get_parent();
}
// Theme mods
$logo = Theme::get_mod( 'custom_logo', false );
use ArrayPress\ThemeUtils\Themes;
// Get all themes
$all_themes = Themes::get_all();
// Get themes as options for forms
$theme_options = Themes::get_options();
// Returns: [['value' => 'stylesheet', 'label' => 'Theme Name'], ...]
// Search themes
$search_results = Themes::search_options( 'twenty' );
// Returns: [['value' => 'twentytwentyfour', 'label' => 'Twenty Twenty-Four'], ...]
// Get page templates
$templates = Themes::get_page_templates();
$template_options = Themes::get_page_template_options();
// Get filtered theme lists
$child_themes = Themes::get_child_themes();
$parent_themes = Themes::get_parent_themes();
$block_themes = Themes::get_block_themes();
$default_themes = Themes::get_default_themes();
// Get themes by feature
$post_format_themes = Themes::get_by_feature( 'post-formats' );
// Get themes by author
$author_themes = Themes::get_by_author( 'WordPress.org' );
// Count themes
$theme_count = Themes::count();
// Check if multiple themes exist
if ( Themes::all_exist( [ 'theme-one', 'theme-two' ] ) ) {
// All themes exist
}
// Get page templates from current theme
$templates = Themes::get_page_templates();
// Returns: ['' => 'Default Template', 'page-custom.php' => 'Custom Page']
// Get as form options
$template_options = Themes::get_page_template_options();
// Returns: [['value' => '', 'label' => 'Default Template'], ...]
// Without default template
$templates = Themes::get_page_templates( false );
$options = Themes::get_page_template_options( false );
// Check if current theme supports specific features
$features_to_check = [ 'post-thumbnails', 'custom-logo', 'html5' ];
$supported_features = Theme::get_supported_features( $features_to_check );
// Get theme hierarchy information
if ( Theme::is_child() ) {
$parent_themes = Theme::get_parent_themes();
foreach ( $parent_themes as $parent ) {
echo "Parent: " . $parent->get( 'Name' ) . "\n";
}
}
// Search for themes with specific capabilities
$modern_themes = Themes::search( 'gutenberg' );
// Get customizer URL for current theme
$customizer_url = Theme::get_customizer_url();
// Advanced feature checking examples
$required_features = [ 'post-thumbnails', 'custom-header', 'custom-background' ];
$optional_features = [ 'custom-logo', 'widgets', 'html5' ];
// Check if theme meets requirements
if ( Theme::supports_all_features( $required_features ) ) {
$bonus_features = Theme::get_supported_features( $optional_features );
echo "Theme ready! Bonus features: " . implode( ', ', $bonus_features );
} else {
$missing_features = Theme::get_unsupported_features( $required_features );
echo "Missing required features: " . implode( ', ', $missing_features );
}
// Check for modern theme capabilities
$modern_features = [ 'align-wide', 'responsive-embeds', 'editor-styles' ];
if ( Theme::supports_any_features( $modern_features ) ) {
echo "Theme has modern Gutenberg support";
}
- Value/Label Format: Perfect for forms and selects
- Feature Detection: Easy theme capability checking
- Block Theme Support: FSE and block theme identification
- Template Management: Page template discovery and formatting
- Child Theme Handling: Parent/child relationships
- Version Utilities: Theme version comparison
- Search Functionality: Built-in theme search
- PHP 7.4+
- WordPress 5.0+
Contributions are welcome! Please feel free to submit a Pull Request.
This project is licensed under the GPL-2.0-or-later License.