¿Cuál es la mejor forma de incluir imágenes desde la carpeta de imágenes de la plantilla?

12 ago 2010, 18:32:16
Vistas: 13.7K
Votos: 8

¿Cuál es la mejor forma de incluir imágenes desde la carpeta de imágenes de la plantilla? ¿Es usando get_bloginfo('template_url')? Entendí que es mejor hardcodear la ruta a la carpeta de imágenes ya que de esta manera ahorras llamadas a funciones en PHP...

¿Alguna opinión?

0
Todas las respuestas a la pregunta 5
1

Entendí que es mejor codificar manualmente la ruta a la carpeta de imágenes ya que de esta manera ahorras llamadas a funciones en PHP..

Definitivamente no me preocuparía por las llamadas a funciones, la caché de objetos de WordPress manejará todo eso por ti. Podrías definir la ruta como una constante si quisieras, pero generalmente no me molestaría.

Simplemente haría:

<img src="<?php bloginfo('stylesheet_directory')"?>/images/image.png" />

Lo edité a

<img src="<?php bloginfo('stylesheet_directory');?>/images/image.png" /> (el código anterior da errores)

12 ago 2010 18:53:18
Comentarios

Solo un par de notas: primero, usaría get_stylesheet_directory_uri() en lugar de bloginfo( 'stylesheet_directory' ); segundo, si la imagen no está destinada a ser sobrescrita por un Tema Hijo, entonces usaría get_template_directory_uri().

Chip Bennett Chip Bennett
9 feb 2012 15:48:54
5

La forma más fácil y sencilla de hacerlo es definir una variable única en el archivo functions.php de tu tema.

Por ejemplo:

<?php
$theme_name_images = get_bloginfo('stylesheet_directory') . '/images/';
?>

No es necesario usar clases como sugería una respuesta anterior.

EDITADO: Debería ser get_bloginfo, en lugar de bloginfo(), como amablemente señaló Viper007Bond.

12 ago 2010 18:58:08
Comentarios

Pero esto puede ensuciar el espacio de nombres global.

WhIteSidE WhIteSidE
12 ago 2010 19:03:31

Cierto, pero es lo más simple. Nunca dije que fuera la forma más limpia de hacerlo.

john010117 john010117
12 ago 2010 19:52:12

Sí, pero ensuciar el espacio de nombres global solo es un problema si no usa una buena convención de nombres para sus variables. Por ejemplo, podría usar amits_stylesheet_directory y amits_template_url o en lugar de "amits" podría usar el nombre del cliente.

MikeSchinkel MikeSchinkel
12 ago 2010 19:52:22

bloginfo() hace echo. Lo que necesitas es get_bloginfo() que retorna el valor.

Viper007Bond Viper007Bond
12 ago 2010 22:37:48

@Viper007Bond - Gracias. Corregí mi publicación.

john010117 john010117
13 ago 2010 01:44:36
0

@Amit: Depende. La mayoría de las llamadas a funciones son bastante rápidas en PHP, así que si estás buscando rendimiento, no me preocuparía demasiado por ello. Sin embargo, entiendo cómo te sientes al ver todas esas llamadas. Aún así, nunca querría codificar rutas de forma rígida.

Si vas a usar get_bloginfo('template_url') muchas veces en tu tema, ¿por qué no asignarlo a una variable global en tu archivo functions.php y luego hacer referencia a ella en todos los lugares donde normalmente harías referencia a la llamada de función? Asegúrate de nombrarla de una manera poco probable que cause conflictos, como amits_template_url. Entonces haz esto en functions.php:

global $amits_template_url;
$amits_template_url = get_bloginfo('template_url');

Y luego en tu tema haz referencia a ella en todos los lugares donde hubieras referenciado get_bloginfo('template_url').

12 ago 2010 19:49:25
1

Bueno, depende del tipo de desarrollo que estés haciendo. Si estás desarrollando plugins, necesitas usar las funciones porque nunca sabrás con certeza cuál será la estructura de la URL. Si estás trabajando en un sitio web específico, técnicamente está bien codificarlo directamente, pero sigue siendo desaconsejable, ya que impide la posibilidad de que la estructura de la URL pueda cambiar en el futuro.

Cada vez que desarrollo plugins o temas, estructuro el programa en una clase; de esa manera, puedo guardar valores repetitivos como propiedades del objeto (por ejemplo, la URL de WP y template_url). Así puedo usarlos rápidamente sin tener que llamar a las funciones repetidamente.

12 ago 2010 18:39:03
Comentarios

Mi intención era desarrollar un tema específico para un cliente en particular (no un tema "distribuible"), ¿podrías darme un ejemplo de código para una clase así por favor?

Amit Amit
12 ago 2010 18:41:32
0

Solo enlaza tus archivos de imagen desde tu archivo CSS, lo que significa que puedes usar la ruta relativa desde el archivo CSS hasta las imágenes. Esta es una solución solo con CSS. No se necesita código PHP. El trabajo lo realiza el navegador.

24 ago 2010 17:58:36