Не используйте для этого константы. Не используйте глобальные константы вообще.
Существует два типа констант: константы класса / интерфейса и глобальные константы.
Константы в классах или интерфейсах хороши и иногда полезны. Чрезмерно упрощенный пример:
interface Requirements
{
const MIN_PHP_VERSION = 5.4;
public function php_is_good();
}
class Theme_Requirements implements Requirements
{
public function php_is_good()
{
return version_compare( PHP_VERSION, self::MIN_PHP_VERSION, '>=' );
}
}
Но имейте в виду, эти константы всегда публичны. Если вы измените их позже, вы можете нарушить код, который зависит от них.
Это хуже с глобальными константами. Представьте себе следующее:
define( 'THEME_URI', get_template_directory_uri() );
А затем функция для изображения заголовка по умолчанию:
function get_default_header_image()
{
return THEME_URI . '/img/default-header.jpg';
}
Эта функция делает предположение о том, что находится вне ее контроля, она знает слишком много. Как вы тестируете эту функцию с различными значениями для константы? Ты не можешь.
Допустим, вы хотите проверить, что происходит, когда константа установлена в несуществующий каталог или на другой, более медленный сервер. Но как только вы определили константу, вы не можете изменить ее значение. Вы не можете запустить все тесты за один раз, это делает тестирование сложнее, чем необходимо.
И в дочерней теме, которая пытается использовать свой собственный образ по умолчанию - как вы это реализуете? Константа задается родительской темой. Вы можете добавить проверку с помощью defined()
, но это усложнит, чтобы увидеть, где на самом деле было написано его значение.
Было бы намного лучше переписать функцию так:
function get_default_header_image( $base )
{
return esc_url( $base ) '/img/default-header.jpg';
}
Я говорил ранее, константы - это API. API-интерфейсы должны легко меняться, но на самом деле трудно устареть константе, потому что PHP не регистрирует доступ. Таким образом, ваше сообщение об устаревании никогда не будет достигнуто другими разработчиками, за исключением случаев, когда они очень внимательно прочитают ваш исходный код или ваши документы. Поверь мне, они этого не делают.
Используйте get_stylesheet_directory_uri()
в дочерних и get_template_directory_uri()
родительских темах. Оба могут быть отфильтрованы во время выполнения, так что вы можете запустить весь тест сразу.