Bestway для определения темы и плагин путь и URL


8

Я в беспорядке. Я знаю, что это глупый вопрос. Вы видите, что путь к теме не так хорош. Так есть ли другой способ? Как я могу использовать get_template_directory()здесь?

    // theme folder path
    if ( ! defined( 'TZSC_THEME_DIR' ) ) {
        define( 'TZSC_THEME_DIR', dirname(__FILE__).'/' );
    }

    // theme folder URL
    if ( ! defined( 'TZSC_THEME_URL' ) ) {
        define( 'TZSC_THEME_URL', plugin_dir_url( __FILE__ ) );
    }

1
Зачем вам нужны константы? Они создают дополнительную зависимость от глобального состояния в вашем коде. Это очень плохо.
fuxia

Итак, вы советуете мне не использовать их? Спасибо. Это влияет на время загрузки моей страницы?
ашраф

2
Начиная с PHP 5.4 константы помещаются в конец стека, поэтому они будут читаться быстрее. Но реальная проблема здесь заключается в качестве кода: каждый раз, когда функция или класс используют эту константу, они «слишком много знают», они делают предположение о состоянии вне своего собственного кода. Это плохо. Это нарушает инкапсуляцию и затрудняет чтение кода. Зависимость WordPress от глобального состояния достаточно плохая. Не усугубляйте это в своем коде.
fuxia

Ответы:


13

Не используйте для этого константы. Не используйте глобальные константы вообще.

Существует два типа констант: константы класса / интерфейса и глобальные константы.

Константы в классах или интерфейсах хороши и иногда полезны. Чрезмерно упрощенный пример:

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()родительских темах. Оба могут быть отфильтрованы во время выполнения, так что вы можете запустить весь тест сразу.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.