get_template_directory_uri() y otras etiquetas URL no funcionan en el tema
Estoy intentando añadir get_template_directory_uri o bloginfo() a mi archivo header.php para crear rutas relativas para los archivos CSS y JS en el tema.
Por ejemplo,
<link rel="stylesheet" href="<?php echo get_template_directory_uri(); ?>/css/style.css">
En teoría esto debería mostrar
<link rel="stylesheet" href="http://mysite.com/wp-content/themes/myTheme/css/style.css">
El problema es que cuando veo la etiqueta <head>
en el código fuente, todo lo que veo es:
<link rel="stylesheet" href="/css/style.css">
Todas las demás etiquetas de plantilla funcionan en mis archivos (get_permalink(), the_title(), etc.), pero esta no. echo get_bloginfo('url')
También funciona.
Estaba pensando en modificar el archivo wp-config.php
y hacer algo como:
define('WP_HOME','http://example.com/blog');
define('WP_SITEURL','http://example.com/blog');
...pero, no estoy seguro si esa es la mejor práctica para reescribir la URL.
¿Me estoy perdiendo algo?

Lo que tienes:
<link rel="stylesheet" href="<?php echo get_template_directory_uri(); ?>/css/style.css">
debería funcionar bien. Lo he copiado y pegado en mi header.php
y funcionó.
Pero esta no es la forma correcta de incluir archivos css o javascript. La manera apropiada es usar el hook wp_enqueue_scripts
. Por ejemplo, digamos que tienes un archivo javascript que deseas cargar y que requiere jQuery para funcionar, puedes encolar el script y listar jQuery como una dependencia. WordPress se encarga del resto:
<?php
function my_scripts_method() {
// registrar la ubicación de tu script y sus dependencias
wp_register_script('custom_script',
get_template_directory_uri() . '/js/custom_script.js',
array('jquery')
);
// encolar el script
wp_enqueue_script('custom_script');
}
add_action('wp_enqueue_scripts', 'my_scripts_method');
?>
Para estilos (se usa el mismo hook):
function my_styles_method() {
// Registrar el estilo así para un tema:
wp_register_style( 'my-custom-style', get_template_directory_uri().'/css/custom-style.css');
// encolar el estilo
wp_enqueue_style( 'my-custom-style' );
}
add_action( 'wp_enqueue_scripts', 'my_styles_method' );
Por favor lee estas páginas del Codex sobre wp_enqueue_script()
y wp_enqueue_style()
Puede que no parezca importante, pero especialmente con la carga de scripts, probablemente descubrirás que cargarlos 'manualmente' romperá tu tema y/o plugins.

Ni siquiera sabía que eso existía. Definitivamente migraré mi código a este método pronto. Mi problema actual es tratar de entender por qué <?php get_template_directory_uri() ?>
retorna vacío.

Desafortunadamente no estoy familiarizado con var_dump
en WordPress. ¿Podrías aclararlo?

No es WordPress: var_dump(get_template_directory_uri());

Perdón, lo que quiero decir es que no sé cómo usar var_dump
y leer la salida en WordPress. Asumo que simplemente llamándolo en header.php no me dará lo que busco. Aprecio tu ayuda de todos modos.

Un poco tarde en esto, pero acabo de encontrarme con el mismo problema. Mi problema fue que había reemplazado todos los archivos de mi tema con una plantilla inicial vacía y no seguí los pasos de instalación del tema, por lo que no obtenía el directorio correcto. Reactivar el tema podría ser un primer paso apropiado para encontrar una solución a este problema.

Me he encontrado con lo mismo antes - en mi caso, get_template_directory_uri()
estaba devolviendo la plantilla hija, no la principal, lo que por supuesto es exactamente lo contrario de lo que debería hacer. Cambiar a la plantilla principal y luego volver a cambiar a la hija lo solucionó completamente para mí.

¿Has probado la versión simple de bloginfo, como:
<link rel="stylesheet" type="text/css" media="all" href="<?php bloginfo('template_url'); ?>/css/style.css" />
o puedes usar tu versión (refiriéndose a get_bloginfo) pero creo que
deberías asignarla a una variable y luego hacer echo...
<link rel="stylesheet" type="text/css" media="all" href="<?php $turl = get_bloginfo('template_url'); echo $turl; ?>/css/style.css" />
...
Espero que esto ayude a resolver tu problema...
Saludos cordiales, Sagive.

Hola Sagive,
Gracias por tu respuesta.
Desafortunadamente, ninguna de tus sugerencias funciona. Sigue creando URLs relativas a "mysite.com" en lugar de "mystie.com/wp-content/themes/myTheme/"
Seguiré probando a ver si encuentro alguna solución.

En realidad, get_bloginfo( 'template_url' )
en sí mismo simplemente llama a get_template_directory_uri()
, por lo que el método más simple es usar directamente get_template_directory_uri()
.

@ChipBennett Estoy de acuerdo. Por alguna razón, mi sitio en esta instalación no llama correctamente a get_template_directory_uri()
. Esperaba que alguien hubiera experimentado algo similar.

No veo diferencia :) - bloginfo está en mi lista de snippets así que... lo prefiero... digo @aboutaaron ¿Quieres decir que todavía no funciona?

@SagiveSEO Correcto. <?php bloginfo('template_url'); ?>
¡no imprime nada! Nunca había visto esto antes. Funcionaba bien en mi versión de desarrollo y cuando moví el tema, las URLs se rompieron y por alguna razón esto ya no funciona.

@SagiveSEO ese es el punto: si echo get_template_directory_uri()
no funciona, entonces es imposible que bloginfo( 'template_url' )
funcione como alternativa. (Consulta la referencia del núcleo que enlacé.)

@aboutaaron ¿lograste que funcione? Tengo el mismo problema. get_stylesheet_directory_uri() y get_template_directory_uri() devuelven una cadena vacía.

Si obtienes una cadena vacía, entonces la página donde estás usando el comando no está dentro de WordPress... Este es un comando interno de WP y debería funcionar sin problemas: get_template_directory_uri() O get_bloginfo('template_url') - ¿en qué archivo estás usando esto?

Desactiva el tema actual (es decir, activa un tema diferente, como TwentyFourteen) y luego reactiva tu tema.
Cuando un tema se activa, WordPress pasa por una configuración inicial de URI relativos, etc. y hay casos (especialmente en el desarrollo de temas nuevos) donde WordPress no ejecuta ese código de inicialización. Desactivar y reactivar el tema asegura que WordPress tenga otra oportunidad de ejecutar la configuración de inicialización del tema.
