get_template_directory_uri() y otras etiquetas URL no funcionan en el tema

20 mar 2012, 23:23:35
Vistas: 36.5K
Votos: 3

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?

0
Todas las respuestas a la pregunta 5
6

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.

21 mar 2012 00:55:31
Comentarios

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.

aboutaaron aboutaaron
21 mar 2012 01:32:11

¿Has usado var_dump en él?

Stephen Harris Stephen Harris
21 mar 2012 01:34:03

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

aboutaaron aboutaaron
21 mar 2012 01:37:11

No es WordPress: var_dump(get_template_directory_uri());

Stephen Harris Stephen Harris
21 mar 2012 01:39:01

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.

aboutaaron aboutaaron
21 mar 2012 02:42:19

Sí, imprimirá el contenido. Si lo haces en el header probablemente tendrás que buscarlo en el HTML de la página (puede estar dentro de <head>)

Stephen Harris Stephen Harris
21 mar 2012 03:22:31
Mostrar los 1 comentarios restantes
1

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.

25 jul 2013 20:27:52
Comentarios

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í.

Matt Lohkamp Matt Lohkamp
29 sept 2014 02:14:23
9

¿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.

20 mar 2012 23:54:21
Comentarios

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.

aboutaaron aboutaaron
21 mar 2012 00:39:06

Un placer - ¿lo conseguiste hacer funcionar?

Sagive Sagive
21 mar 2012 00:40:30

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().

Chip Bennett Chip Bennett
21 mar 2012 01:07:14

@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.

aboutaaron aboutaaron
21 mar 2012 01:13:29

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

Sagive Sagive
21 mar 2012 01:16:43

@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.

aboutaaron aboutaaron
21 mar 2012 01:29:58

@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é.)

Chip Bennett Chip Bennett
21 mar 2012 03:14:03

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

windyjonas windyjonas
25 nov 2013 10:38:24

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?

Sagive Sagive
26 nov 2013 00:55:31
Mostrar los 4 comentarios restantes
0

Si get_bloginfo('url') está funcionando en header.php, entonces en lugar de usar get_template_directory_uri(); utiliza la función bloginfo('stylesheet_url') que devuelve la URL del archivo CSS principal (generalmente style.css) del tema activo.

22 mar 2012 07:03:13
0

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.

9 abr 2014 21:06:26