get_stylesheet(): string
- Since
- 1.5.0
- Source
wp-includes/theme.php:181
Returns the folder name of the theme currently serving the front end, read from the stylesheet option and passed through the stylesheet filter. Use it when you need the active theme's slug for building paths, cache keys, or conditional logic, not the parent theme's slug (that's get_template()). A common mix-up is expecting a directory path or URI back; this returns only the theme folder name, so pass it to get_stylesheet_directory() or get_stylesheet_directory_uri() when you need a location on disk or on the web.
Description
The theme name that is currently set as the front end theme.
For all intents and purposes, the template name and the stylesheet name are going to be the same for most cases.
Compatibility
- WordPress
- since 1.5.0
- PHP
- 7.4–8.6-dev
- 6.7.7
- 6.8.8
- 6.9.7
- 7.0.4
- 7.1.0
Present in every tracked release (6.7.7 to 7.1.0), and compiles on PHP 7.4 through 8.6-dev.
Return value
string- Stylesheet name.
Code examples
Every example is editable and runs in a real WordPress booted in your browser by WordPress Playground. Press Run, then edit the code: clicking away re-runs it. Nothing is sent anywhere until you do.
Get the slug of the currently active theme
Print the raw value returned by get_stylesheet() with no arguments.
$active_theme_slug = get_stylesheet();
echo esc_html( 'Active stylesheet: ' . $active_theme_slug );For a child theme this returns the child theme's folder name, not the parent's.
Build a theme-aware transient key so cached data invalidates on theme switch
Cache a computed value (post 2's price meta) under a key that includes the active theme so switching themes automatically busts the cache.
$post_id = 2;
$cache_key = 'price_display_' . get_stylesheet() . '_' . $post_id;
$cached = get_transient( $cache_key );
if ( false === $cached ) {
$price = get_post_meta( $post_id, 'price', true );
$cached = 'Price: ' . esc_html( $price );
set_transient( $cache_key, $cached, HOUR_IN_SECONDS );
echo esc_html( 'Computed fresh: ' ) . $cached;
} else {
echo esc_html( 'Served from cache: ' ) . $cached;
}Run the snippet twice to see the second run hit the cached branch.
Common problems and fixes · 3
- Why does get_stylesheet() return the child theme name instead of the parent theme?
- Why did paths built from get_stylesheet() break after I filtered it?
- Why does concatenating get_stylesheet() into a URL give me a broken link?
Why does get_stylesheet() return the child theme name instead of the parent theme?
Why did paths built from get_stylesheet() break after I filtered it?
Why does concatenating get_stylesheet() into a URL give me a broken link?
Alternatives and related functions
get_template- When you need the parent theme's folder name rather than the active child theme's.
get_stylesheet_directory- When you need the absolute filesystem path to the active theme's folder, not just its name.
get_stylesheet_directory_uri- When you need a public URL into the active theme's folder, for enqueuing assets.
wp_get_theme- When you need theme metadata such as version, author, or display name rather than just the folder slug.
Performance profile
How much work a call to get_stylesheet() does, and what it touches: the algorithmic scaling, the Zend instruction count per call across PHP versions, the hooks it hands control to, and the core code that calls it. Measured from the compiled opcodes, not a stopwatch, so every number is identical on any machine running the same PHP version, and every function in core is ranked by cost.
- Cost class
- Moderate
- Scaling
- Constant
- Instructions
- 8
- Plugin surface
- 1 hook
- Called by
- 48
Reads stored settings via get_option(), cached per request but not free on a cold cache.
No loop in the body: the same number of instructions runs whatever you pass in.
Executed per call on PHP 8.5. The body compiles to 8.
Third-party callbacks on 'stylesheet' run inside this call, and their cost is not bounded by anything here.
48 places in core call this, so the cost is paid more often than your own code shows.
What it touches
- hookthird-party callbacks
apply_filters()called directly - optionoption read or write
get_option()called directly - cacheobject cache
wp_cache_get()one call below get_stylesheet() - serializeserialisation
maybe_unserialize()one call below get_stylesheet()
Further down the call graph this can also reach query and transient. Those are the worst case, several calls deep and usually down an error path, not what a normal call pays.
What one call costs · 1 distinct outcome
One number would be a lie: the work depends on which branch runs. These are every distinct cost get_stylesheet() can have, taken from its control-flow graph on PHP 8.5.
| When | Instructions | Calls it makes |
|---|---|---|
| always | 8 | get_option(), apply_filters() |
Across PHP versions
Compiles the same on PHP 7.4, 8.1, 8.2, 8.3, 8.4, 8.5 and 8.6-dev: 8 instructions, 8 executed per call, 0 branches. The work does not change between versions.
An instruction is not a fixed amount of time, so a matching count is not necessarily the same speed; what it rules out is a difference in the work itself.
Hooks and filters fired · 1
One hook fires while get_stylesheet() runs, in this order:
Uses · 2
- apply_filters()Calls the callback functions that have been added to a filter hook.
- get_option()Retrieves an option value based on an option name.
Used by · 48
- Custom_Background::ajax_background_add()Handles Ajax request for adding custom background context to an attachment.
- Custom_Image_Header::ajax_header_add()Given an attachment ID for a header image, updates its "last used" timestamp to now.
- Custom_Image_Header::ajax_header_remove()Given an attachment ID for a header image, unsets it as a user-uploaded header image for the active theme.
- Custom_Image_Header::customize_set_last_used()Updates the last-used postmeta on a header image attachment after saving a new header image via the Customizer.
- Custom_Image_Header::get_uploaded_header_images()Gets the previously uploaded header images.
- Custom_Image_Header::set_header_image()Chooses a header image, selected from existing uploaded and default headers, or provides an array of uploaded header data (either new, or from media library).
- Theme_Upgrader::bulk_upgrade()Upgrades several themes at once.
- Theme_Upgrader::current_after()Turns off maintenance mode after upgrading the active theme.
- Theme_Upgrader::current_before()Turns on maintenance mode before attempting to upgrade the active theme.
- Theme_Upgrader_Skin::after()Performs an action following a single theme update.
- WP_Block_Templates_Registry::register()Registers a template.
- WP_Customize_Manager::__construct()Constructor.
Show all 48
- WP_Customize_Manager::register_controls()Registers some default controls.
- WP_Navigation_Block_Renderer::get_overlay_blocks_from_template_part()Gets the inner blocks for the navigation block from an overlay template part.
- WP_REST_Edit_Site_Export_Controller::export()Output a ZIP file with an export of the current templates and template parts from the site editor, and close the connection.
- WP_REST_Global_Styles_Controller::get_theme_item()Returns the given theme global styles config.
- WP_REST_Global_Styles_Controller::get_theme_items()Returns the given theme global styles variations.
- WP_REST_Templates_Controller::prepare_item_for_database()Prepares a single template for create or update.
- _build_block_template_object_from_post_object()Builds a block template object from a post object.
- _build_block_template_result_from_file()Builds a unified template object based on a theme file.
- _get_block_template_file()Retrieves the template file from the theme for a given slug.
- _get_block_templates_files()Retrieves the template files from the theme.
- _inject_theme_attribute_in_block_template_content()Parses wp_template content and injects the active theme's stylesheet as a theme attribute into each wp_template_part
- _inject_theme_attribute_in_template_part_block()Injects the active theme's stylesheet as a `theme` attribute into a given template part block.
- block_template_part()Prints a block template part.
- get_block_asset_url()Gets the URL to a block asset.
- get_block_file_template()Retrieves a unified template object based on a theme file or plugin registration.
- get_block_templates()Retrieves a list of unified template objects based on a query.
- get_body_class()Retrieves an array of the class names for the body element.
- get_edit_post_link()Retrieves the edit post link for post.
- get_stylesheet_directory()Retrieves stylesheet directory path for the active theme.
- get_stylesheet_directory_uri()Retrieves stylesheet directory URI for the active theme.
- get_the_block_template_html()Returns the markup for the current template.
- is_theme_paused()Determines whether a theme is technically active but was paused while loading.
- render_block_core_template_part()Renders the `core/template-part` block on the server.
- upgrade_650()Executes changes made in WordPress 6.5.0.
- validate_current_theme()Checks that the active theme has the required files.
- wp_edit_theme_plugin_file()Attempts to edit a file for a theme or plugin.
- wp_filter_wp_template_unique_post_slug()Generates a unique slug for templates.
- wp_generate_block_templates_export_file()Creates an export of the current templates and template parts from the site editor at the specified path in a ZIP file.
- wp_get_custom_css()Fetches the saved Custom CSS content for rendering.
- wp_get_custom_css_post()Fetches the `custom_css` post for a given theme.
- wp_get_theme()Gets a WP_Theme object for a theme.
- wp_get_themes()Returns an array of WP_Theme objects based on the arguments.
- wp_prepare_themes_for_js()Prepares themes for JavaScript.
- wp_set_unique_slug_on_create_template_part()Sets a custom slug when creating auto-draft template parts.
- wp_theme_has_theme_json()Checks whether a theme or its parent has a theme.json file.
- wp_update_custom_css_post()Updates the `custom_css` post for a given theme.
Source code
function get_stylesheet() { /** * Filters the name of current stylesheet. * * @since 1.5.0 * * @param string $stylesheet Name of the current stylesheet. */ return apply_filters( 'stylesheet', get_option( 'stylesheet' ) );}Changelog
Introduced in 1.5.0. Unchanged from 6.7.7 through 7.1.0.
Signature, return type and hooks compared across 5 parsed releases.
About this page
- Parsed data
- Generated from the wordpress-develop 7.1.0 tag, from
src/wp-includes/theme.php, and regenerated for each WordPress release so it tracks the code rather than a snapshot of it. - Corrections
- Something wrong on this page? Report it and it gets fixed in the next regeneration.