Bestway para definir o caminho e o URL do tema e do plug-in

8

Eu estou em uma bagunça. Eu sei que esta é uma pergunta boba.Você vê o caminho do tema não é tão bom.Então existe alguma outra maneira? Como posso usar get_template_directory() aqui?

    // 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__ ) );
    }
    
por ashraf 10.08.2014 / 15:11

1 resposta

13

Não use constantes para isso. Não use constantes globais.

Existem dois tipos de constantes: constantes de classe / interface e constantes globais.

Constantes em classes ou interfaces são boas e, às vezes, úteis. Um exemplo excessivamente simplista:

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, '>=' );
    }
}

Mas tenha em mente que essas constantes são sempre públicas. Se você alterá-las mais tarde, poderá quebrar o código que depende delas.

Isso é pior com constantes globais. Imagine o seguinte:

define( 'THEME_URI', get_template_directory_uri() );

E, em seguida, uma função para uma imagem de cabeçalho padrão:

function get_default_header_image()
{
    return THEME_URI . '/img/default-header.jpg';
}

Essa função faz uma suposição sobre algo que está fora de controle, sabe demais. Como você testa essa função com valores diferentes para a constante? Você não pode.

Digamos que você queira testar o que acontece quando a constante é definida como um diretório não existente ou para outro servidor mais lento. Mas depois de definir a constante, você não poderá alterar seu valor. Você não pode executar todos os testes de uma só vez, isso torna o teste mais difícil do que o necessário.

E em um tema filho que tenta usar sua própria imagem padrão - como você implementa isso? A constante é definida pelo tema pai. Você poderia adicionar uma verificação com defined() , mas isso dificulta ver onde seu valor foi realmente gravado.

Seria muito melhor reescrever a função para:

function get_default_header_image( $base )
{
    return esc_url( $base ) '/img/default-header.jpg';
}

Eu disse anteriormente, as constantes são uma API. As APIs devem ser fáceis de alterar, mas é realmente difícil preterir uma constante, porque o PHP não registra o acesso. Assim, sua mensagem de depreciação nunca chegará a outros desenvolvedores, exceto quando eles lerem seu código-fonte ou seus documentos com muito cuidado. Confie em mim, eles não.

Use get_stylesheet_directory_uri() em temas filhos e get_template_directory_uri() em temas pais. Ambos podem ser filtrados em tempo de execução, para que você possa executar todo o seu teste de uma só vez.

    
por fuxia 10.08.2014 / 17:15