Подключение файлов в файле functions дочерней темы

26 окт. 2010 г., 08:41:35
Просмотры: 47.7K
Голосов: 9

Обычно в файле functions темы я подключаю другие файлы для поддержания порядка.

require_once("foo.php");

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

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

Не могли бы вы опубликовать больше вашего кода, чтобы показать, что именно вы делаете?

MikeSchinkel MikeSchinkel
26 окт. 2010 г. 09:45:00
Все ответы на вопрос 8
2
20

В дочерней теме правильный способ следующий:

require_once( get_stylesheet_directory() . '/foo.php');

В то время как в родительской теме вы всё ещё можете использовать:

require_once ( get_template_directory() . '/foo.php' );

get_template_directory() всё ещё работает в дочерней теме, но, к сожалению, указывает на директорию родительской темы. В вашем случае это полезно.

23 авг. 2012 г. 22:38:43
Комментарии

Мне пришлось использовать '/', например require_once( get_stylesheet_directory() . '/foo.php');

ssaltman ssaltman
2 янв. 2020 г. 21:20:07

спасибо @ssaltman. Вы правы, документация подтверждает это: https://developer.wordpress.org/reference/functions/get_stylesheet_directory/ Я отредактировал свой ответ

Christian Christian
5 янв. 2020 г. 16:45:34
3
14

Дочерние темы ссылаются на родительские темы по имени директории. В стандартной установке все темы находятся в wp-content/themes/, поэтому можно ссылаться на эти темы по относительному пути:

include '../parent-theme/some-file.php';

Если такой вариант вызывает дискомфорт, отмечу следующие константы в WordPress 3.0.1 с дочерней темой tt-child для родительской темы twentyten:

TEMPLATEPATH     /home/adam/public_html/wp3/wp-content/themes/twentyten
STYLESHEETPATH   /home/adam/public_html/wp3/wp-content/themes/tt-child

Таким образом, в дочерней теме можно использовать следующий код для обращения к директории родительской темы:

include TEMPLATEPATH . '/some-file.php';
26 окт. 2010 г. 15:50:42
Комментарии

Константа STYLESHEETPATH — это именно то, что я искал. Включения работают в дочерней теме, если использовать её.

curtismchale curtismchale
26 окт. 2010 г. 17:21:14

Я очень удивлён, что кто-то вообще может рассматривать использование жёстко заданного пути... Тема не должна работать только в одном окружении. Я бы мог понять, если бы функции get_template_directory() не существовало... но она существует. Только что заметил, что вопрос из 2010 года, лол

Christian Christian
23 авг. 2012 г. 22:44:27

Первый вариант у меня не сработал. Не уверен, почему, хотя у меня точно был правильный относительный путь к родительскому файлу. Второй вариант сработал, так что спасибо.

bowlerae bowlerae
10 июн. 2016 г. 16:58:19
0

Определенно не стоит жестко прописывать URL. Правильный способ сделать это:

require_once( get_stylesheet_directory(). '/my_included_file.php' );

Подробнее читайте в Wordpress Codex

Теперь, если вы, например, модифицируете header.php, который содержит include, ссылаться на него следует следующим образом:

require_once( get_stylesheet_directory() . '/../parenthteme/my_included_file.php' );
19 мар. 2013 г. 21:39:19
1

Привет, @curtismchale:

Не знаю, в этом ли дело, но нужно заключить foo.php в кавычки, вот так:

require_once('foo.php');

Это решит твою проблему?

26 окт. 2010 г. 09:46:24
Комментарии

Хорошее замечание. Я упустил это здесь, но у меня это было в дочерней теме.

curtismchale curtismchale
26 окт. 2010 г. 17:15:27
0

Используйте <?php get_template_part( 'имя-страницы-здесь' ); ?>. Без расширения .php

12 июл. 2011 г. 03:03:41
0

Самый простой и лучший способ подключения файлов как в functions.php темы, так и при разработке плагинов — использование dirname(__FILE__).

В вашем случае достаточно было этого:

require_once dirname(__FILE__)."/foo.php";

Если файл, который нужно подключить, находится в другой папке, например, inc, то используйте такую конструкцию:

require_once dirname(__FILE__)."/inc/foo.php"; 

Надеюсь, это поможет кому-нибудь в будущем.

15 авг. 2021 г. 03:05:32
0

Это вполне возможно и нормально подключать файлы в functions.php.

Я делаю это так в своей дочерней теме (подкаталог php используется для кода):

include 'php/core.php';

Если у вас возникают проблемы без видимой причины, попробуйте включить режим отладки в wp-config.php:

define('WP_DEBUG', true);

Возможно, происходят ошибки, которые просто не отображаются.

26 окт. 2010 г. 08:57:46
1

Я считаю, что это лучший способ получить путь к дочерней теме

<?php $get_my_path = dirname( get_bloginfo('stylesheet_url') ); ?>
<?php require_once( $get_my_path. '/my_included_file.php' ); ?>

Идея взята с http://dynamicweblab.com/2013/02/get-template-path-in-wordpress-child-themes/

19 мар. 2013 г. 22:34:35
Комментарии

require_once требует путь, а не URL.

fuxia fuxia
19 мар. 2013 г. 23:04:15