¿Cómo obtengo la URL del tema en PHP?

38

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

Michael Crenshaw
fuente

Respuestas:

47

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

get_bloginfo('template_directory');

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

bloginfo('template_directory');

Entonces, un ejemplo para una imagen en la images/headerscarpeta de temas sería:

<img src="<?php bloginfo('template_directory'); ?>/images/headers/image.jpg" />
EAMann
fuente
NOTA: esto le dará la ruta al tema principal si actualmente está utilizando un tema secundario y no el tema secundario activo. Una respuesta más larga a continuación explica esto con más detalle.
Jason
2
Simplemente puede usarget_template_directory_uri()
Pei
32

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

Sin embargo, hay una advertencia y esa advertencia es con los nuevos temas infantiles . Si está utilizando un tema secundario, 'template_directory'probablemente no sea lo que desea a menos que realmente esté tratando de hacer referencia a una imagen que está en el directorio del tema principal. En cambio para los temas niño lo que es probable que desee es pasar stylesheet_directory(ya sé, ya sé, los nombres no le dicen lo que son, pero bueno, eso es sólo la forma en que lo es!) Tomando prestado un poco de la respuesta de Eric usando stylesheet_directorysería el siguiente ( Acorté el ejemplo para que no se ajustara):

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

Para ilustrar el punto, escribí un archivo independiente rápido que puede colocar en la raíz de su sitio web test.phpy ejecutar para ver qué produce. Primero ejecute con un tema regular como TwentyTen y luego ejecute con un tema secundario:

<?php
/*
* test.php - Test the difference between Regular and Child Themes
*
*/

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 notas cosas, puedes notar que hay mucho más a lo que puedes pasar bloginfo()y get_bloginfo(); estudie el código y la captura de pantalla a continuación para obtener ideas.

Mirando la captura de pantalla, puede ver que stylesheet_directorydevuelve lo mismo que 'template_directory'para un tema normal pero con un valor diferente, y probablemente el valor que necesita para un tema secundario.

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

Para mayor claridad en esta captura de pantalla, wp30.deves un dominio que se ejecuta solo en mi computadora local. Actualmente es una instancia de WordPress 3.0.1 y está configurado en 127.0.0.1(igual que localhost) en mi computadora portátil y lo uso para probar ejemplos ad-hoc como este. Utilicé VirtualHostX como una conveniencia en Mac OS X para ayudarme a configurar esos .devdominios privados no enrutables , pero cualquiera puede hacerlo manualmente editando el archivo host de la computadora y el? archivo httpd.conf.

Por cierto, en caso de que no esté familiarizado con Child Themes, ¿ dónde hay otras dos respuestas de WordPress que podrían ayudar?

MikeSchinkel
fuente
Wow, gran respuesta. Fui vago con el tema en el que estoy trabajando ahora y no configuré un tema secundario, pero esto será muy útil en el futuro. Felicitaciones por ese guión también. Bien codificado ¡Gracias!
Michael Crenshaw
Hola, buena respuesta! Yo suelo usar get_stylesheet_directory_uri(). ¿Debo estar usando ol 'simple get_stylesheet_directory()?
djb
13

Toda la estructura del tema se basa en dos opciones: template(mantener la carpeta del tema principal namre) y stylesheet(mantener la carpeta del tema secundario namr). Si no se utiliza un tema secundario, estos son los mismos.

Para tener flexibilidad de los filtros, en lugar de tener acceso a la opción directamente, hay en consecuencia get_template()y get_stylesheet().

Ahora lo único que falta es combinarlos 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 template_directoryo stylesheet_directoryargumentos simplemente los envuelve y hay pocas razones para usarlo así. Diría que solo es confuso tener argumentos que dicen directorio (comúnmente se relaciona con rutas locales), pero devuelve URL.

Resumen:

  • use get_template_directory_uri()para referirse solo o tema principal
  • utilizar get_stylesheet_directory_uri()a única o un niño tema
Rarst
fuente
-1

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

fja3omega
fuente
1
¿Ninguna explicación por qué esto es mejor que las otras soluciones?
fuxia