Não use constantes para isso. Não use constantes globais.
Existem dois tipos de constantes: constantes de classe / interface e constantes globais.
As 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 lembre-se, essas constantes são sempre públicas. Se você os alterar posteriormente, poderá quebrar o código que depende deles.
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 assume que algo 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 é configurada para um diretório inexistente 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 os testes mais difíceis 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ê pode adicionar uma verificação com defined()
, mas isso torna mais difícil ver onde seu valor foi realmente escrito.
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 descontinuar uma constante, porque o PHP não registra o acesso. Portanto, sua mensagem de descontinuação nunca alcançará 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 pais. Ambos podem ser filtrados em tempo de execução, para que você possa executar todos os seus testes ao mesmo tempo.