No use constantes para eso. No use constantes globales en absoluto.
Hay dos tipos de constantes: constantes de clase / interfaz y constantes globales.
Las constantes en clases o interfaces están bien y a veces son útiles. Un ejemplo demasiado 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, '>=' );
}
}
Pero tenga en cuenta que estas constantes son siempre públicas. Si los cambia más tarde, puede romper el código que depende de ellos.
Esto es peor con las constantes globales. Imagina lo siguiente:
define( 'THEME_URI', get_template_directory_uri() );
Y luego una función para una imagen de encabezado predeterminada:
function get_default_header_image()
{
return THEME_URI . '/img/default-header.jpg';
}
Esta función asume algo que está fuera de su control, sabe demasiado. ¿Cómo se prueba esa función con diferentes valores para la constante? No puedes
Supongamos que desea probar qué sucede cuando la constante se establece en un directorio no existente o en otro servidor más lento. Pero una vez que ha definido la constante, no puede cambiar su valor. No puede ejecutar todas las pruebas de una vez, esto hace que las pruebas sean más difíciles de lo necesario.
Y en un tema secundario que intenta usar su propia imagen predeterminada, ¿cómo implementa eso? La constante se establece por el tema principal. Puede agregar un cheque con defined()
, pero eso hace que sea más difícil ver dónde se escribió realmente su valor.
Sería mucho mejor reescribir la función para:
function get_default_header_image( $base )
{
return esc_url( $base ) '/img/default-header.jpg';
}
Dije antes, las constantes son una API. Las API deberían ser fáciles de cambiar, pero es realmente difícil desaprobar una constante, porque PHP no registra el acceso. Por lo tanto, su mensaje de desaprobación nunca llegará a otros desarrolladores, excepto cuando lean su código fuente o sus documentos con mucho cuidado. Confía en mí, no lo hacen.
Uso get_stylesheet_directory_uri()
en temas secundarios y get_template_directory_uri()
en temas principales. Ambos se pueden filtrar en tiempo de ejecución, por lo que puede ejecutar todas sus pruebas a la vez.