it-swarm-es.com

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

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

38
Michael Crenshaw

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

get_bloginfo('template_directory');

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

bloginfo('template_directory');

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

<img src="<?php bloginfo('template_directory'); ?>/images/headers/image.jpg" />
45
EAMann

Lo que @EAMann dijo, con una advertencia. Eric tiene razón sobre el enfoque general y cómo funcionan las funciones bloginfo() y get_bloginfo() y 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 la más recienteTemas secundarios. Si está utilizando un tema secundario, entonces 'template_directory' probablemente no sea lo que quiere, a menos que realmente esté tratando de referirse a una imagen que se encuentra en el directorio del tema principal. En lugar de temas infantiles, lo que probablemente quieras es pasar stylesheet_directory (lo sé, lo sé, los nombres no te dicen lo que son, ¡pero así es como es!) Tomar un poco de la respuesta de Eric usando stylesheet_directory se vería así esto (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 como test.php y ejecutar para ver qué resultados genera. 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 nota cosas, podría notar que hay mucho más de lo que puede pasar a bloginfo() y get_bloginfo(); estudia el código y la captura de pantalla de abajo para obtener ideas.

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

 The return values of get_bloginfo() with and without a Child Theme in WordPress 
(fuente: mikeschinkel.com )

Para mayor claridad en esta captura de pantalla, wp30.dev es un dominio que solo se ejecuta 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 dominios privados .dev no enrutables, pero cualquiera puede hacerlo manualmente editando el archivo de hosts de la computadora y el? archivo httpd.conf.

Por cierto, en caso de que no esté familiarizado conTemas secundarios, ¿dónde están otras dos respuestas de WordPress que podrían ayudarlo?

32
MikeSchinkel

La estructura completa del tema se basa en dos opciones: template (manteniendo el nombre de la carpeta del tema principal) y stylesheet (manteniendo el nombre de la carpeta del tema secundario). Si no se usa un tema hijo, estos son los mismos.

Para tener flexibilidad de filtros, en lugar de acceder directamente a la opción, 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 otra vez convenientemente envuelto en get_template_directory_uri() y get_stylesheet_directory_uri() .

[get_]bloginfo() con template_directory o stylesheet_directory los argumentos simplemente envuelven esto y hay pocas razones para usarlo así. Yo diría que solo es confuso al tener un argumento que dice directorio (comúnmente relacionado con rutas locales), pero que devuelve URL.

Sumario:

  • use get_template_directory_uri() para referirse a solo o padre tema
  • use get_stylesheet_directory_uri() a only o child theme
12
Rarst