WP_GET_THEMES() │ Функция для получения тем WordPress

# 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()

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *