7.x system.api.php hook_custom_theme()

Return the machine-readable name of the theme to use for the current page.

This hook can be used to dynamically set the theme for the current page request. It should be used by modules which need to override the theme based on dynamic conditions (for example, a module which allows the theme to be set based on the current user's role). The return value of this hook will be used on all pages except those which have a valid per-page or per-section theme set via a theme callback function in hook_menu(); the themes on those pages can only be overridden using hook_menu_alter().

Note that returning different themes for the same path may not work with page caching. This is most likely to be a problem if an anonymous user on a given path could have different themes returned under different conditions.

Since only one theme can be used at a time, the last (i.e., highest weighted) module which returns a valid theme name from this hook will prevail.

Return value

The machine-readable name of the theme that should be used for the current page request. The value returned from this function will only have an effect if it corresponds to a currently-active theme on the site. Do not return a value if you do not wish to set a custom theme.

Related topics

4 functions implement hook_custom_theme()

Note: this list is generated by pattern matching, so it may include some functions that are not actually implementations of this hook.

menu_get_custom_theme in includes/menu.inc
Gets the custom theme for the current page, if there is one.
menu_set_custom_theme in includes/menu.inc
Sets a custom theme for the current page, if there is one.
menu_test_custom_theme in modules/simpletest/tests/menu_test.module
Implement hook_custom_theme().
system_custom_theme in modules/system/system.module
Implements hook_custom_theme().
1 invocation of hook_custom_theme()
menu_get_custom_theme in includes/menu.inc
Gets the custom theme for the current page, if there is one.


modules/system/system.api.php, line 2400
Hooks provided by Drupal core and the System module.


function hook_custom_theme() {

  // Allow the user to request a particular theme via a query parameter.
  if (isset($_GET['theme'])) {
    return $_GET['theme'];


stuchl4n3k’s picture

It should be noted, that the theme you want to activate must be enabled first at admin/appearance.

mgzrobles’s picture

be careful with use menu_get_object at this point. Maybe you get some issue with first page load.

ndvo’s picture

Is there a similar hook for Drupal 8?

jonhattan’s picture

jansete’s picture

Use theme() functions in this hook (using media in a node_load() for example) initialize your default theme before.

dman’s picture

If you are just trying to trigger the admin theme for certain cases, (eg webforms or registrations)
check out hook_admin_paths() - that's a preferred way to do that cleanly.