20 ene 2009

Mostrar campos personalizados en WordPress

Escribí hace un tiempo un post que explicaba una forma de agregar campos personalizados (custom fields) al editor de WordPress, y en el código había una forma de mostrar luego el contenido de esos campos en nuestro template.

Pero como algunos me preguntaron de nuevo como se hacía, ya sea en relación al post mencionado o simplemente con la duda de como usar y aprovechar la administración de campos personalizados que aparece por defecto en el editor de WP (y dado que a veces el Codex parece no ayudar tanto); voy a tratar de resumir cómo se hace para mostrar el contenido de un campo personalizado en nuestro template de WordPress.

Podemos mostrar el contenido de un campo personalizado usando la función get_post_meta.

Si queremos obtener el valor de un campo de nombre “texto”, se usaría, dentro del loop de WP, de esta forma:

get_post_meta($post->ID, 'texto', true);

Eso nos devuelve un único valor (el “true” final especifica esto, sino la función devuelve un array con los resultados) de un campo personalizado llamado “texto” (o sea, que tenga como clave o key la palabra “texto”) que esté relacionado al post que se está mostrando (tomando el ID del post como variable en el loop).

El contenido del campo puede mostrarse directamente en el template añadiendo donde queramos ese código y escribiendo un “echo” delante de la función:

echo get_post_meta($post->ID, 'texto', true);

Pero seguramente, para mantener el diseño del sitio más prolijo o para poder personalizar la forma en la que se muestra este texto, lo mejor es primero comprobar si el campo que queremos mostrar existe para cada post y sólo en ese caso mostrar su contenido, para lo que podríamos usar un código como el siguiente:

$texto = get_post_meta($post->ID, 'texto', true);
if ($texto) { echo '<div class="texto">'. $texto.'</div>'; }

O sea: Lo mismo que antes, pero mostrando algo sólo si el campo personalizado “texto” tiene contenido y metiendo dicho contenido (por ejemplo) dentro de un div con una clase especial al que podríamos darle un estilo propio. También podríamos agregar algún texto antes o después del contenido si nos hace falta.

Algunos usos típicos de esto, perfectamente aplicados al código que acabo de poner, podrían ser “Estoy escuchando”, “Estoy leyendo”, “Fuente”, “Mi humor” y cosas así.

Y como ya había comentado, también existen otras dos funciones para obtener la información de campos personalizados. En ambos casos devuelven distintas clases de arrays y podrían ser necesarias para trabajar con los datos de campos personalizados de otras formas: get_post_custom y get_post_custom_values.

12comentarios

Escrito el 20 de ene de 2009 en Desarrollando.
Etiquetas: , , , , .

Posts relacionados:

Agregar campos personalizados a la administración de WordPress Muchas veces tener simplemente “título”, “entrada” y &#...

Queries personalizados en WordPress Algo que me preguntaron varias veces sobre WordPress es cómo había hecho los q...

Hace X: Plugin para mostrar entradas publicadas hace x tiempo en WordPress Trabajando en la renovación y optimización de uno de los proyectos de Nicestre...

Tipos de post personalizados en WordPress 3.0 Dos artículos geniales para entender exactamente todo lo que podemos llegar a h...

Estilos para cada tipo de página en WordPress 2.8 Otra novedad que me parece muy útil de la nueva versión de WordPress es la fun...

WordPress 2.8 y taxonomías personalizadas La versión 2.8 de WordPress ya está lanzada y trae unas cuantas novedades. Una...

12 comentarios

  1. Avatar

    bueno, yo preciso hacer lo que tu dices pero DE PROGRAMACION NADA; no se nada de action, funcion, get, array y nada. He visto que has hecho un plug in que segun parece genero el archivo php, lo subo y listo.

    No probe pero suponiendo que funciona ya tengo el campo, pero sin embargo hasta aqui solo podria cargar el contenido, pero no se veria en el blog porque hay que agregarlo en el theme o template

    COmo hago yo que no entiendo nada? te contrato? haces una version 2.0 del plug in y ya lo introduces tambien en el theme :-) hazlo comercialmente, por lo que vi varios lo precisan, otros lo precisan pero no lo googlean, creo que podrias venderlo, yo lo pago, si me lo das resuelto LO COMPRARIA porque 5 horas como dijo uno por ahi que ahorro no es lo mio, yo podria estar 5 años y no entenderia, un programador por 5 horas donde vivo me combraria no menos de $ 200, lo que son unos 50 dolares, asi que si anda POR QUE NO PAGAR al menos 40 dolares, si vendes en el mundo 1000 de estos creo que tienes una buena platita potencialmente

    Saludos, si haces algo me avisas

  2. Avatar

    @toba: La forma de mostrar el campo es justamente la que comentaba en este post… Si lo vas a usar vos, la otra parte ni hace falta supongo… podés resolverlo con la gestión de campos personalizados por defecto.

    El incluirlo en el theme, depende del theme en sí… podría llegar a automatizarse con una función, pero también habría que hacerla a medida según el nombre del campo (o campos si hay varios) y eso…

    En fin, habría que verlo para cada caso… Si querés podés contactarme a ver si puedo darte una mano u orientarte en cómo podría hacerse

  3. Avatar

    Si el ejemplo quiero almacenar la ruta de una imagen.
    ¿como podia hacer el codigo para que me tresntara una imagen?
    Gracias

  4. Avatar

    @antuan: No entendí muy bien la pregunta, pero creo que algo así:

    Escribiendo la ruta en un custom field con el nombre “imagen”, tendrías que agregar algo así en tu template, dentro del loop, en el lugar que quisieras que aparezca (si existe) la imágen:

    $imagen = get_post_meta($post->ID, 'imagen', true);
    if ($imagen) { echo '<img src="'. $imagen.'" alt="" />'; }

  5. Avatar

    Excelente este sitio man, muy lindo y se nota que tiene mucho código.

  6. Avatar

    muy bueno gracias

  7. Avatar

    ¿y para que en ste caso solo se muestre en caso de rellenar el campo del customfield, que deberia modificar?

    <a href="" rel="bookmark" title="Read the rest of "><img src="ID, "image_value", true);?>" />

    • Avatar

      Supongo que quisiste poner algo así, que haga que sólo si existe el campo “imagen” se muestre dentro de un enlace…

      $imagen = get_post_meta($post->ID, 'imagen', true);
      if ($imagen) { echo '<a href="" rel="" title=""><img src="'. $imagen.'" alt="" /></a>'; }

  8. Avatar

    Como no se muestra bien el codigo te pongo un enlace al mismo…gracias..
    http://www.adsltodo.com/codigo.txt

    • Avatar

      Ah, entonces lo que puse arriba debería funcionar, pero como ya estás dentro de un “echo” deberías usar get_permalink(); y the_title_attribute('echo=0');… funciona?

  9. Avatar

    Muchas gracias por la explicación, me ha funcionado genial!

Dejar un comentario

Para que tu comentario salga con tu avatar en este y muchos otros blogs, debes registrarte en Gravatar.
Puedes darle estilo a tu comentario usando estos tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Twitteando Microblogging or something

Gravatar de Leo Ver archivo en Twitter +

Fotografiando Mis últimas fotos en Flickr

  • Llueve
  • To do
  • Guante
  • iPad en SocialSnack
  • HTML5 for web designers
  • Atardecer
  • Nube
  • Siguiendo los penales
  • Irrepetible
  • Hoy juega brasil...
  • Atardecer
  • Pochocleta

Ver archivo en Flickr +

Viendo Películas y series que veo

  • Dead Set
  • Inception
  • Shutter Island
  • Cop Out
  • The Box
  • Alice in Wonderland

Ver archivo de Viendo +

Leyendo Pasando por mi mesita de luz

  • HTML5 For Web Designers
  • Mort
  • 20th Century Ghosts
  • World War Z
  • Vampiria
  • Cuentos Completos I

Ver archivo de Leyendo +

Randomizando Posts al azar en imágenes

  • Cuentos Completos I
  • The Long Tail
  • House MD
  • The Golden Compass
  • The Dip
  • Cashback
  • Shrek the Third
  • Brutal Legend
  • Superbad

Acerca de

Gravatar de Leo Soy un desarrollador web de Buenos Aires. En este blog escribo sobre diseño, desarrollo, internet, tecnología, música, ocio y la vida misma. Más sobre mi »

Hace un año...