# WP_GET_THEMES() │ WP 3.4.0
Функция wp_get_themes()
возвращает массив объектов тем WordPress на основе заданных параметров. Несмотря на то, что функция get_themes()
была улучшена, wp_get_themes()
остается достаточно ресурсоемкой, особенно если у вас много тем. Если это возможно, лучше использовать функцию wp_get_theme()
.
## Использование
Функция вызывается следующим образом:
```php
wp_get_themes( $args );
Параметры
$args
(массив) — аргументы для поиска тем, по умолчанию пустой массив. Вот основные параметры, которые можно задать:
-
errors (разное)
Указывает, нужно ли возвращать темы с ошибками.true
— возвращает темы с ошибками.false
(по умолчанию) — возвращает только безошибочные темы.null
— возвращает все темы.
-
allowed (разное)
Указывает, какие темы показывать на многосайтовой установке.true
— возвращает только допустимые темы для сайта.false
— возвращает только недопустимые темы.'site'
— возвращает только разрешенные темы для сайта.'network'
— возвращает только разрешенные темы на уровне сети.null
(по умолчанию) — возвращает все темы.
-
blog_id (int)
Указывает идентификатор блога, для которого будут определяться разрешенные темы.
Значение по умолчанию:0
(текущий блог).
Примеры
Получение данных всех существующих тем
$themes = wp_get_themes();
В переменной $themes
будет массив, содержащий доступные темы. Например, он может выглядеть так:
Array
(
[twentyfourteen] => WP_Theme Object
(
[theme_root] => C:/sites/example.com/www/wp-content/themes
[headers] => Array
(
[Name] => Twenty Fourteen
[ThemeURI] => http://wordpress.org/themes/twentyfourteen
[Description] => В 2014 году наша стандартная тема поможет вам создать адаптивный сайт-галерею с современным дизайном.
[Author] => команда WordPress
[Version] => 1.0
...
)
...
)
)
Примечания
- Глобальная переменная:
$wp_theme_directories
Изменения
Функция wp_get_themes()
была введена в версии 3.4.0.
Код функции
Ниже представлен код функции wp_get_themes()
из файла wp-includes/theme.php
:
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 ) {
$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;
}
Связанные функции
Вот несколько связанных функций, которые могут вам пригодиться:
add_theme_support()
get_stylesheet()
get_template()
is_child_theme()
wp_head()