wppaste
WordPress

wp_get_themes( array $args = array() ): WP_Theme[]

Since
3.4.0
Source
wp-includes/theme.php:35
Returns an array of WP_Theme objects based on the arguments.

Description

Despite advances over get_themes(), this function is quite expensive, and grows linearly with additional themes. Stick to wp_get_theme() if possible.

Parameters

$argsarrayoptional
The search arguments.Default: array()
  • $errorsmixeddefault: false

    True to return themes with errors, false to return themes without errors, null to return all themes.
  • $allowedmixeddefault: null

    (Multisite) True to return only allowed themes for a site. False to return only disallowed themes for a site. 'site' to return only site-allowed themes. 'network' to return only network-allowed themes. Null to return all themes.
  • $blog_idintdefault: 0, synonymous for the current blog

    (Multisite) The blog ID used to calculate which themes are allowed.

Return

WP_Theme[]
Array of WP_Theme objects.

Uses · 9

Used by · 16

Show all 16

Source

function wp_get_themes( $args = array() ) {	global $wp_theme_directories; 	$defaults = array(		'errors'  => false,		'allowed' => null,		'blog_id' => 0,	);	$args     = wp_parse_args( $args, $defaults ); 	$theme_directories = search_theme_directories(); 	if ( is_array( $wp_theme_directories ) && count( $wp_theme_directories ) > 1 ) {		/*		 * Make sure the active theme wins out, in case search_theme_directories() picks the wrong		 * one in the case of a conflict. (Normally, last registered theme root wins.)		 */		$current_theme = get_stylesheet();		if ( isset( $theme_directories[ $current_theme ] ) ) {			$root_of_current_theme = get_raw_theme_root( $current_theme );			if ( ! in_array( $root_of_current_theme, $wp_theme_directories, true ) ) {				$root_of_current_theme = WP_CONTENT_DIR . $root_of_current_theme;			}			$theme_directories[ $current_theme ]['theme_root'] = $root_of_current_theme;		}	} 	if ( empty( $theme_directories ) ) {		return array();	} 	if ( is_multisite() && null !== $args['allowed'] ) {		$allowed = $args['allowed'];		if ( 'network' === $allowed ) {			$theme_directories = array_intersect_key( $theme_directories, WP_Theme::get_allowed_on_network() );		} elseif ( 'site' === $allowed ) {			$theme_directories = array_intersect_key( $theme_directories, WP_Theme::get_allowed_on_site( $args['blog_id'] ) );		} elseif ( $allowed ) {			$theme_directories = array_intersect_key( $theme_directories, WP_Theme::get_allowed( $args['blog_id'] ) );		} else {			$theme_directories = array_diff_key( $theme_directories, WP_Theme::get_allowed( $args['blog_id'] ) );		}	} 	$themes         = array();	static $_themes = array(); 	foreach ( $theme_directories as $theme => $theme_root ) {		if ( isset( $_themes[ $theme_root['theme_root'] . '/' . $theme ] ) ) {			$themes[ $theme ] = $_themes[ $theme_root['theme_root'] . '/' . $theme ];		} else {			$themes[ $theme ] = new WP_Theme( $theme, $theme_root['theme_root'] ); 			$_themes[ $theme_root['theme_root'] . '/' . $theme ] = $themes[ $theme ];		}	} 	if ( null !== $args['errors'] ) {		foreach ( $themes as $theme => $wp_theme ) {			if ( (bool) $wp_theme->errors() !== $args['errors'] ) {				unset( $themes[ $theme ] );			}		}	} 	return $themes;}

History

Introduced in 3.4.0. Unchanged from 6.7.7 through 7.1.0.

  1. 6.7.7
  2. 6.8.8
  3. 6.9.7
  4. 7.0.4
  5. 7.1.0

Signature, return type and hooks compared across 5 parsed releases.

About this page

Parsed data
Generated from the wordpress-develop 6.9.7 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.