
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.
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
@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
Si el ejemplo quiero almacenar la ruta de una imagen.
¿como podia hacer el codigo para que me tresntara una imagen?
Gracias
@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="" />'; }
Excelente este sitio man, muy lindo y se nota que tiene mucho código.
muy bueno gracias
¿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);?>" />
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>'; }
Como no se muestra bien el codigo te pongo un enlace al mismo…gracias..
http://www.adsltodo.com/codigo.txt
Ah, entonces lo que puse arriba debería funcionar, pero como ya estás dentro de un “echo” deberías usar
get_permalink();ythe_title_attribute('echo=0');… funciona?Muchas gracias por la explicación, me ha funcionado genial!
De nada!
Hola! muy bueno el aporte, me gustaría saber si se puede usar con algún plugin tipo “Fields”, que te agrega un bloque con los campos ya predeterminados. Tengo esta duda, por que estoy tratando de adaptar ese plugin para obtener el contenido de dos campos, y agregarlos al post mismo.
Tengo instalado un plugin que se llama WordPress Post Tabs que agrega tabs a cada post, pero se tienen que ingresar en la parte html, y como mi sitio lo van a usar usuarios sin conocimientos en html, necesito que cuando llenen los dos campos, me genere dos tabs, en el que cada uno muestre la información de esos campos.
En principio, mientras el plugin guarde los campos como campos personalizados tradicionales, no debería haber ningún problema!