get_template_directory_uri() в дочерней теме указывает на дочернюю тему

17 мая 2017 г., 00:09:17
Просмотры: 25.6K
Голосов: 8

Согласно документации (https://codex.wordpress.org/Child_Themes и https://developer.wordpress.org/reference/functions/get_template_directory_uri/), я понимаю, что get_template_directory_uri() должна возвращать URL каталога родительской темы при использовании в дочерней теме. Но у меня это не работает.

В дочерней теме, которую я пытаюсь разработать, когда я использую get_template_directory_uri(), она возвращает URL каталога дочерней темы, а не каталога родительской темы. Если я нажму на "Детали темы" для дочерней темы на странице управления темами, WordPress указывает, что тема является дочерней для другой темы, именно так, как я и ожидал. У меня есть строка

Template: parent

в файле style.css дочерней темы.

Другие важные факты:

  • Я использую WordPress Multi-Site
  • Я разработал родительскую тему и использую её для одного из других сайтов в моей Multi-Site, и она работает отлично
  • Обе темы (родительская и дочерняя) активированы в сети и доступны на сайте, над которым я работаю
  • Я попробовал указать дочернюю тему на twentyfourteen и наблюдаю то же поведение, поэтому не думаю, что проблема в родительской теме
  • Я отключил все плагины, чтобы проверить, не является ли один из них причиной проблемы - безуспешно, ни один из плагинов не является причиной
  • Я создал копию twentyfourteen и сделал её дочерней темой моей родительской темы, и возникает та же проблема
  • В моей копии twentyfourteen я также добавил строку Template: в style.css, чтобы сделать её дочерней темой twentyfourteen, и я наблюдаю то же поведение (то есть, страница управления темами указывает, что скопированная тема является дочерней для twentyfourteen, но функция get_template_directory_uri не даёт мне каталог родительской темы)

Есть ли у кого-нибудь предложения о том, в чём может быть проблема? Или я неправильно интерпретирую, как должна работать get_template_directory_uri()?

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

Какая у вас текущая строка Template: parent?

hwl hwl
17 мая 2017 г. 02:21:11

Если вы используете связку дочерней/родительской темы на одиночной установке сайта, работает ли функция get_template_directory_uri() корректно?

Nathan Johnson Nathan Johnson
17 мая 2017 г. 03:19:52

@hwl - при попытке указать Twenty Fourteen в качестве родительского шаблона, строка была "Template: twentyfourteen". И на странице управления темами указано, что дочерняя тема ссылается на Twenty Fourteen как на родительскую тему.

Bill Bill
17 мая 2017 г. 21:30:43

@NathanJohnson - Я установил тестовый сайт WordPress (не мультисайт, без плагинов, очень стандартный), и get_template_directory_uri() работает как ожидалось — он корректно указывает на родительскую тему в дочерней теме. Я постепенно переношу изменения конфигурации на тестовый сайт (например, делаю его мультисайтом, настраиваю wp-config.php, .htaccess...), но пока не смог воспроизвести проблему на тестовом сайте, так что я пока не знаю, в чём именно проблема. Возможно, мне просто придётся сделать резервную копию базы данных мультисайта, с которым я работаю, и переустановить его.

Bill Bill
17 мая 2017 г. 21:33:34
Все ответы на вопрос 2
2
11

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

echo get_stylesheet_directory_uri();
17 мая 2017 г. 00:35:26
Комментарии

Спасибо за ответ, но я использую дочернюю тему и пытаюсь получить таблицу стилей родительской темы, а не дочерней. Я следую инструкциям на https://codex.wordpress.org/Child_Themes по подключению таблицы стилей родительской темы вместе с дочерней в дочерней теме, но функция get_template_directory_uri(), которую они используют в примере, возвращает URL дочерней темы, что не помогает мне получить URL для таблицы стилей родительской темы.

Bill Bill
17 мая 2017 г. 02:31:48

Ой, извините, я неправильно понял ваш вопрос. 1) Есть ли URL, демонстрирующий это поведение, чтобы мы могли взглянуть подробнее? 2) Просто чтобы убедиться, я предполагаю, что вы используете правильный handle при подключении стиля родительской темы?

Celso Bessa Celso Bessa
17 мая 2017 г. 03:58:17
2

ПРИЧИНА

После тщательного анализа кода WordPress и базы данных, проблема заключалась в том, что функция

get_option('template')

вызываемая через

wp-includes/theme.php : get_template()

возвращала дочернюю тему вместо родительской, но только для одного конкретного сайта в моей мультисайтовой сети. При проверке таблицы wp_{SITE-ID}_options для этого сайта, запись в базе данных, где

option_name = "template"

указывала на дочернюю тему, а не на родительскую. Непонятно, почему в разделе "Сведения о теме" в админ-панели отображалось, что проблемная тема является дочерней, хотя запись в базе данных была некорректной.

Точная причина повреждения этой записи в БД неизвестна, но когда я изначально разрабатывал проблемную дочернюю тему, она сломала всю мою мультисайтовую сеть WordPress (включая админ-панель). Временное переименование папки темы на сервере, чтобы WordPress использовал тему по умолчанию, могло стать причиной этой проблемы.

РЕШЕНИЕ

Переключение темы на другую и обратно на дочернюю тему исправило ситуацию - это привело к обновлению соответствующей записи в базе данных (option_name = "template" в wp_{SITE-ID}_options), установив правильное значение - родительскую тему.

18 мая 2017 г. 23:29:01
Комментарии

Ты герой. Спасибо, что поделился своим решением. Мне досталась плохо сделанная "дочерняя" тема, которая некорректно ссылалась на родительскую. Твое решение оказалось идеальным.

Glitcher Glitcher
1 авг. 2018 г. 13:59:34

Герой, который нам нужен, но которого мы не заслуживаем. У меня тоже сработало. Спасибо.

Sajidur Rahman Sajidur Rahman
15 сент. 2022 г. 12:40:02