Cómo obtener la URL del tema en PHP

21 ago 2010, 00:46:43
Vistas: 138K
Votos: 41

Necesito obtener la URL de mi directorio de tema para hacer referencia a una imagen en el directorio image/headers del tema. ¿Cómo se hace esto en PHP?

0
Todas las respuestas a la pregunta 4
2
50

Esta función devolverá la URL del directorio del tema para que puedas usarla en otras funciones:

get_bloginfo('template_directory');

Alternativamente, esta función mostrará la URL del directorio del tema en el navegador:

bloginfo('template_directory');

Así que un ejemplo para una imagen en la carpeta images/headers del tema sería:

<img src="<?php bloginfo('template_directory'); ?>/images/headers/image.jpg" alt="Imagen de encabezado" title="Imagen de encabezado del tema" />
21 ago 2010 03:19:11
Comentarios

NOTA: esto te dará la ruta al tema padre si actualmente estás usando un tema hijo, y no al tema hijo activo. Una respuesta más larga a continuación explica esto con más detalle.

Jason Jason
19 oct 2016 12:40:45

Puedes simplemente usar get_template_directory_uri()

Pei Pei
20 jun 2018 05:33:33
2
32

Lo que @EAMann mencionó, con una salvedad. Eric tiene razón sobre el enfoque general y cómo funcionan las funciones bloginfo() y get_bloginfo(), así como sobre cómo pasar el parámetro 'template_directory' para obtener el valor que necesitas para (la mayoría de) los temas.

Sin embargo, hay una salvedad y esa salvedad tiene que ver con los Temas Hijos más recientes. Si estás utilizando un tema hijo, entonces 'template_directory' probablemente no sea lo que buscas, a menos que realmente estés intentando hacer referencia a una imagen que está en el directorio del tema padre. En su lugar, para temas hijos, lo que probablemente necesitas es pasar stylesheet_directory (lo sé, lo sé, los nombres no te dicen lo que son, pero así es como es). Tomando prestado un poco de la respuesta de Eric, usar stylesheet_directory se vería así (acorté el ejemplo para que no se extienda):

<img src="<?php bloginfo('stylesheet_directory'); ?>/images/header.jpg" />

Para ilustrar el punto, escribí un archivo independiente rápido que puedes colocar en la raíz de tu sitio web como test.php y ejecutar para ver lo que muestra. Primero ejecútalo con un tema normal como TwentyTen y luego con un tema hijo:

<?php
/*
* test.php - Prueba la diferencia entre Temas Regulares y Temas Hijos
*
*/

include "wp-load.php";

$bloginfo_params = array(
    'admin_email',
    'atom_url',
    'charset',
    'comments_atom_url',
    'comments_rss2_url',
    'description',
    'home',
    'html_type',
    'language',
    'name',
    'pingback_url',
    'rdf_url',
    'rss2_url',
    'rss_url',
    'siteurl',
    'stylesheet_directory',
    'stylesheet_url',
    'template_directory',
    'template_url',
    'text_direction',
    'url',
    'version',
    'wpurl',
);

echo '<table border="1">';
foreach($bloginfo_params as $param) {
    $info = get_bloginfo($param);
    echo "<tr><th>{$param}:</th><td>{$info}</td></tr>";
}
echo '</table>';

Si prestas atención, podrías notar que hay mucho más sobre lo que puedes pasar a bloginfo() y get_bloginfo(); estudia el código y la captura de pantalla a continuación para obtener ideas.

Al observar la captura de pantalla, puedes ver que stylesheet_directory devuelve lo mismo que 'template_directory' para un tema normal, pero un valor diferente, y probablemente el valor que necesitas para un tema hijo.

Los valores de retorno de get_bloginfo() con y sin un Tema Hijo en WordPress
(fuente: mikeschinkel.com)

Para mayor claridad en esta captura de pantalla, wp30.dev es un dominio que solo funciona en mi computadora local. Actualmente es una instancia de WordPress 3.0.1 y está configurada en 127.0.0.1 (igual que localhost) en mi laptop y la uso para probar ejemplos ad-hoc como este. Utilicé VirtualHostX por conveniencia en Mac OS X para ayudarme a configurar esos dominios privados no enrutables .dev, pero cualquiera puede hacerlo manualmente editando el archivo hosts de la computadora y el archivo httpd.conf.

Por cierto, en caso de que no estés familiarizado con los Temas Hijos, aquí hay otras dos respuestas de WordPress Answers que podrían ayudar:

21 ago 2010 10:50:22
Comentarios

¡Vaya, gran respuesta! Fui perezoso con el tema en el que estoy trabajando ahora y no configuré un tema hijo, pero esto será muy útil en el futuro. Felicitaciones por ese script también. Bien codificado. ¡Gracias!

crenshaw-dev crenshaw-dev
21 ago 2010 13:32:55

¡Hola, buena respuesta! Normalmente uso get_stylesheet_directory_uri(). ¿Debería usar el simple get_stylesheet_directory()?

djb djb
18 ene 2012 10:59:02
0
13

Toda la estructura del tema se construye sobre dos opciones: template (que contiene el nombre de la carpeta del tema padre) y stylesheet (que contiene el nombre de la carpeta del tema hijo). Si no se utiliza un tema hijo, estos valores son iguales.

Para tener flexibilidad con los filtros, en lugar de acceder directamente a la opción, existen respectivamente get_template() y get_stylesheet().

Ahora lo único que falta es combinar estos con la ubicación de la carpeta de temas. Esto se puede hacer con get_theme_root_uri() y nuevamente convenientemente envuelto en get_template_directory_uri() y get_stylesheet_directory_uri().

[get_]bloginfo() con los argumentos template_directory o stylesheet_directory simplemente envuelve estas funciones y hay poca razón para usarlo de esa manera. Diría que solo genera confusión al tener un argumento que dice "directory" (comúnmente relacionado con rutas locales), pero que devuelve URLs.

Resumen:

  • usa get_template_directory_uri() para referirte al tema padre o único
  • usa get_stylesheet_directory_uri() para el tema hijo o único
26 mar 2012 19:59:56
1
-1

Yo uso esto (dirname(get_bloginfo('stylesheet_url')))

26 mar 2012 19:31:05
Comentarios

¿No hay explicación de por qué esto es mejor que las otras soluciones?

fuxia fuxia
5 nov 2012 03:52:14