Включить файлы в файл функций дочерней темы

8

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

require_once("foo.php");

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

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

Ответы:

13

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

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

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

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';
Анника Бэкстрем
источник
Постоянный STYLESHEETPATH ​​- это то, что я искал. Включает работу в детской теме, если вы используете это.
curtismchale
Я действительно удивлен, что вы можете даже подумать об использовании жестко закодированного пути ... тема не должна работать только в одной среде. Я мог бы понять, если get_template_directory () не существует ... но он существует. Я только что понял, что это вопрос с 2010 года LOL
Кристиан
Верхний вариант у меня не сработал. Я не уверен, почему, когда у меня, конечно, был правильный относительный путь к родительскому файлу. Второй вариант сработал для меня, так что спасибо.
Bowlerae
12

В детской теме правильный путь

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

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

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

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

Кристиан
источник
1
Мне пришлось использовать '/', например require_once (get_stylesheet_directory (). '/Foo.php');
ssaltman
спасибо @ssaltman. Вы правы, документация подтверждает это: developer.wordpress.org/reference/functions/… Я отредактировал свой ответ
Кристиан
2

Привет @curtismchale :

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

require_once('foo.php');

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

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

Использование <?php get_template_part( 'name-the-page-here' ); ?>. Без расширения .php

Эверальдо Матиас
источник
2

Вы определенно не хотите жестко кодировать 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' );
Марлиз Конт
источник
0

Это вполне возможно и нормально делать в том числе functions.php.

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

include 'php/core.php';

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

define('WP_DEBUG', true);

Там могут быть соответствующие ошибки, происходящие, но не отображаются.

Rarst
источник