Cómo establecer una variable global en functions.php

15 ene 2013, 01:02:27
Vistas: 46.4K
Votos: 5

Quiero poder mostrar la URL de la imagen destacada de una entrada y después de buscar un poco en la web, encontré lo siguiente que funciona bien cuando lo coloco en un bucle en mi plantilla de página principal.

<?php $thumbSmall = wp_get_attachment_image_src( get_post_thumbnail_id($post->ID), 'small' );
$urlSmall = $thumbSmall['0']; ?>

<?php echo $urlSmall; ?>

Sin embargo, quiero usar la variable $urlSmall en otros lugares además de la plantilla de la página principal, y aquí es donde mis limitadas habilidades de programación me fallan. Intenté simplemente copiar y pegar

wp_get_attachment_image_src( get_post_thumbnail_id($post->ID), 'small' );
$urlSmall = $thumbSmall['0'];

en mi functions.php pero eso no funcionó. Necesito que estas variables sean reconocidas globalmente. ¿Qué debo hacer aquí? ¿escribir algún tipo de función?

2
Comentarios

Esto es más una pregunta de PHP que de WordPress, en mi opinión

shea shea
15 ene 2013 07:20:45

Lo que significa que...

Josef Ulander Josef Ulander
15 ene 2013 20:49:49
Todas las respuestas a la pregunta 2
2

Puedes convertir tu fragmento de código en una función que devuelva la URL de la miniatura de una entrada:

function wpse81577_get_small_thumb_url( $post_id ) {
    $thumbSmall = wp_get_attachment_image_src( get_post_thumbnail_id( $post_id ), 'small' );
    return $thumbSmall['0'];
}

Uso, proporcionando el ID de una entrada:

<?php echo wpse81577_get_small_thumb_url( 59 ); ?>
15 ene 2013 02:16:18
Comentarios

Genial, pero ¿cómo obtengo el ID del post en <?php echo wpse81577_get_small_thumb_url( 59 ); ?> dinámicamente? Quiero usarlo dentro de un loop.

Josef Ulander Josef Ulander
15 ene 2013 20:39:26

ej. wpse81577_get_small_thumb_url( $post->ID );, wpse81577_get_small_thumb_url( get_the_ID() );, ...

diggy diggy
15 ene 2013 20:54:20
3

Pregunta pura de PHP, realmente.

global $urlSmall;
$urlSmall = $thumbSmall['0'];

Si declaras la variable con la palabra clave global cuando la inicializas, estará disponible a partir de entonces. Puedes importarla, por así decirlo, con...

global $urlSmall;
var_dump($urlSmall);

Puedes hacer lo mismo asignando pares clave/valor directamente al array $GLOBALS.

$GLOBALS['urlSmall'] = $thumbSmall['0'];

Esa parece ser la respuesta más directa a la pregunta:

Necesito que estas variables sean reconocidas globalmente. ¿Qué hago aquí?

Sin embargo, puede haber mejores formas de manejar los datos.

15 ene 2013 02:18:26
Comentarios

¡Bueno, parece funcionar para mí! Pero s_ha_dum, ¿cómo podría lograr algo similar sin usar variables globales?

Josef Ulander Josef Ulander
15 ene 2013 20:41:02

Lo siento, me apresuré, no resolvió mi problema. Cuando sigo tus sugerencias y pongo global $urlSmall; var_dump($urlSmall); en mi plantilla de página frontal, simplemente imprime NULL en la página.

Josef Ulander Josef Ulander
15 ene 2013 20:48:50

Si quieres que tus variables sean accesibles globalmente, necesitas usar variables globales. Otra opción es crear una función como se sugiere en otra respuesta. No sé por qué no puedes hacer que funcione. Sí que funciona. Debes asegurarte de que el archivo donde se define la variable se ejecute antes de intentar usar la variable, así que quizás ese sea el problema.

s_ha_dum s_ha_dum
15 ene 2013 21:34:43