Как получить slug активной темы WordPress?

17 мар. 2016 г., 12:41:56
Просмотры: 17.6K
Голосов: 6

Я могу получить некоторую информацию об активной теме, используя wp_get_theme(). Например:

$theme = wp_get_theme();
echo $theme->get( 'TextDomain' ); // twentyfifteen
echo $theme->get( 'ThemeURI' ); // https://wordpress.org/themes/twentyfifteen/

Есть ли способ получить slug темы? В данном случае это будет twentyfifteen. Обратите внимание, что slug темы не всегда совпадает с текстовым доменом темы. Я бы также хотел избежать замены строк в URL темы, если это возможно.

Ссылка: https://codex.wordpress.org/Function_Reference/wp_get_theme

5
Комментарии

У вас есть эта информация с помощью get_stylesheet()

mmm mmm
17 мар. 2016 г. 14:41:55

Изучив кодекс, похоже, что это невозможно без некоторых манипуляций со строками. Кажется, раньше это было возможно, но функционал устарел. Возможно, стоит пересмотреть, ЗАЧЕМ вам нужен этот слаг?

RiaanP RiaanP
17 мар. 2016 г. 13:17:01

Мне это нужно, потому что я добавляю специфичные для темы стили в плагин, который разработал, поэтому мне нужен уникальный идентификатор.

henrywright henrywright
17 мар. 2016 г. 13:21:05

@henrywright Специфичные для темы доработки следует делать в дочерней теме. Плагины предназначены для специфичных для сайта доработок ;-)

Pieter Goosen Pieter Goosen
17 мар. 2016 г. 13:47:20

@PieterGoosen Это хорошее эмпирическое правило, но есть исключения :P

henrywright henrywright
17 мар. 2016 г. 14:31:20
Все ответы на вопрос 6
0

Вы можете получить slug из таблицы options, где он хранится под именем stylesheet.

echo get_option('stylesheet');
17 мар. 2016 г. 14:42:40
0

Краткий ответ: get_stylesheet();

Технически у темы нет значения 'slug'. Вам нужно имя директории конкретной темы.

get_template();

…вернет имя директории вашей темы, или родительской темы, если текущая тема является дочерней.

get_option('stylesheet');

Всегда возвращает имя директории активной темы, независимо от того, является ли она дочерней.

get_stylesheet();

Всегда возвращает имя директории активной темы, независимо от того, является ли она дочерней. Эта функция по сути является оберткой для get_option('stylesheet');, за исключением того, что она также применяет фильтр 'stylesheet'.

function get_stylesheet() {
/**
 * Фильтрует имя текущего стиля.
 *
 * @since 1.5.0
 *
 * @param string $stylesheet Имя текущего стиля.
 */
return apply_filters( 'stylesheet', get_option( 'stylesheet' ) );
}

Я не уверен, что делает фильтр 'stylesheet'. Похоже, это может быть связано с настройщиком тем.

В подавляющем большинстве случаев эти три функции делают одно и то же, но get_stylesheet(); кажется самым надежным вариантом.

20 нояб. 2018 г. 00:36:20
0

Функция wp_get_theme получает объект WP_Theme для темы.

$theme = wp_get_theme();

if ( 'Conj' === $theme->name || 'conj' === $theme->template ) {
    // Выполнить какие-то действия...
}
23 апр. 2019 г. 15:58:15
1

Я обнаружил, что самое близкое к слагу темы — это имя директории темы. Его можно получить с помощью функции get_template():

echo get_template(); // twentyfifteen

Ссылка: https://codex.wordpress.org/Function_Reference/get_template

17 мар. 2016 г. 14:55:48
Комментарии

Это перехватит родительскую тему, если она есть.

fuxia fuxia
17 мар. 2016 г. 15:40:14
0
wp_get_active_and_valid_themes()

Я нашел это в wp-settings.php

// Загружаем функции активной темы, как родительской, так и дочерней, если применимо.
foreach ( wp_get_active_and_valid_themes() as $theme ) {
    if ( file_exists( $theme . '/functions.php' ) ) {
        include $theme . '/functions.php';
    }
}
30 июл. 2019 г. 15:25:27
2
-5

Вы можете получить его с помощью get_template_directory_uri()

17 мар. 2016 г. 14:16:18
Комментарии

Не могли бы вы объяснить, как. get_template_directory_uri() возвращает путь, а не название темы

Pieter Goosen Pieter Goosen
17 мар. 2016 г. 14:17:48

Код должен быть выделен обратными кавычками или в блоке кода.

Pieter Goosen Pieter Goosen
17 мар. 2016 г. 14:22:03