Codex

Interested in functions, hooks, classes, or methods? Check out the new WordPress Code Reference!

es:Using Custom Fields

WordPress tiene la habilidad de permitirle a los autores asignar campos personalizados a una entrada. Esta información arbitraria es conocida como metadatos, y pueden incluir información como:

  • Humor: Feliz y alegre
  • Actualmente leyendo: Las mil y una noches
  • Escuchando: Te solté la rienda
  • Clima: Caluroso

Con algo más de esfuerzo, es posible llevar a cabo acciones mas complejas, como usar los metatados para guardar la fecha de expiración de una entrada.

Los metadatos se manejan en pares de clave/valor (Key/Value). La clave es el nombre el elemento del metadato, mientras que el valor es la información que aparecerá en la lista de metadatos de cada entrada individual a la que la información esté asociada.

Las claves pueden ser usadas más de una vez por entrada. Por ejemplo, si estuvieses leyendo dos libros diferentes (un libro técnico en el trabajo y uno de ficción en casa) podrías crear una clave "leyendo" y usarla dos veces en la misma entrada, una vez para cada libro.

Aquí hay un ejemplo de como se vería esta información en una entrada:

Actualmente Leyendo: Las mil y una noches

Humor de hoy: Feliz y alegre

Uso

Vamos a poner en acción el ejemplo anterior. Añadiremos dos campos personalizados, uno llamado «Actualmente leyendo» y el otro «Humor de hoy». Las siguientes instrucciones mostrarán como añadir esta información a una entrada usando campos personalizados (Custom Fields).

  1. Después de haber escrito la entrada del blog, ve al área titulada Custom Fields.
  2. Para crear un nuevo campo personalizado (Custom Field) llamado "Actualmente leyendo", introduce el texto "Actualmente leyendo" (sin las comillas) en el campo de texto titulado Key.
  3. La clave (Key) recién creada ahora necesita que se le asigne un valor (Value), que en nuestro caso sera el nombre del libro que estamos leyendo, "Las mil y una noches". Introduce "Las mil y una noches en el campo Value, una vez más sin usar las comillas.
  4. Haz clic en el botón Add Custom Field para guardar esta información acerca de la entrada de blog.

Para agregar tu "Humor de hoy" simplemente repite el proceso, añadiendo "Humor de hoy" al campo Key y una descripción del humor en Value , haciendo clic en Add Custom Field y finalizando con un clic en SAVE, para guardar toda la entrada incluyendo los metadatos.

En tu siguiente entrada del blog podrás agregar un nuevo libro y humor a tus metadatos. En la sección Custom Fields el campo Key ahora tendrá un menú con los campos previamente introducidos. Selecciona "Actualmente leyendo" y solamente introduce el nombre del nuevo libro que estas leyendo en el campo Value. Haz clic en Add Custom Field y repite el proceso para agregar el Humor de hoy.

Solamente necesitas crear una clave una sola vez y después puedes asignar un valor a esa clave por cada entrada de blog si así lo deseas. También puedes asignar mas de un valor a una llave para una entrada. Esto puede ser útil para aquellos que leen mas de un libro a la vez por ejemplo.

Mostrando los campos personalizados

Con un "campo personalizado" añadido a la entrada, es hora de mostrar tus libros y humor al mundo. Para mostrar el campo personalizado en cada entrada, usa la función de plantilla the_meta(). La función debe ir dentro del Loop para funcionar como debe. Mucha gente la agrega the_meta() al final de sus entradas o en su sección de metadatos de la entrada. Aquí esta un ejemplo básico de uso del tag:

<?php the_meta(); ?>

Puede que se vea de la siguiente manera en el código fuente:

<ul class='post-meta'>
<li><span class='post-meta-key'>Actualmente leyendo:</span> Las mil y una noches</li>
<li><span class='post-meta-key'>Humor de hoy:</span> Feliz y alegre</li>
</ul>

La función de plantilla automáticamente encierra los metadatos en una lista sin ordenar a la que se le asigna la clase CSS post-meta. La clave (Key) a su vez, va en un span con la clase CSS post-meta-key para que se le pueda dar estilo a través de tu hoja CSS.

Para personalizar la forma en que se muestra la lista de metadatos, cambia las reglas de tu hoja de estilos (CSS). Por ejemplo, agreguemos algunos estilos a nuestro ejemplo de arriba. Los añadidos en la hoja de estilos serían estos:

.post-meta {font-variant: small-caps; color: maroon; }
.post-meta-key {color: green; font-weight: bold; font-size: 110%; }
  • Actualmente leyendo: Las mil y una noches
  • Humor de hoy: Feliz y alegre

También existen muchos plugins de WordPress en el Directorio Oficial de Plugins de WordPress que añaden funciones al trabajo de mostrar metadatos. Una búsqueda de los términos "Custom Field Plugins" en un motor de búsqueda debe arrojar todavía más resultados.

Técnicas avanzadas

Las siguientes son técnicas más avanzadas para obtener y personalizar metadatos y campos personalizados.

Obtener campos personalizados

Para obtener metadatos hay que usar la función get_post_meta():

 get_post_meta($post_id, $key, $single);
  • $post_id es el número identificador de la entrada de la cual quieres obtener los metadatos. Usa $post->ID para obtener el número de identificación de la entrada.
  • $key es una cadena que contiene el nombre del metadato que deseas obtener.
  • $single puede ser verdadero (true) o falso false. Si se declara como verdadero la función retornará un solo resultado como una cadena. Si es declarado falso (o no se declara) la función retornara una matriz con los campos personalizados.

Detalles de implementación

La información PostMeta es guardada en una tabla en la base de datos, $wpdb->postmeta. Esta tabla contiene cuatro campos:

  • meta_id: Un ID único por cada entrada.
  • post_id: El ID de la entrada para estos metadatos.
  • meta_key: El nombre de la clave (Key).
  • meta_value: El valor asociado a dicha clave (Value).

Los valores de esta tabla se distribuyen en una matriz multidimensional llamada $post_meta_cache justo después de que la matriz $posts sea llamada en wp-blog-header.php. Esta variable solamente contendrá valores para la lista de entradas llamados para la construcción de la pagina actual. La estructura de la matriz se asemejará a algo como esto:

 [
   postid1 => [
     [
       key1 => [val1, val2, ...],
       key2 => [val1, val2, ...],
       ...
     ],
   postid2 => [ ... ],
   ...
 ]

Si quisieras obtener los valores de "Leyendo Actualmente" para la entrada 256 usarías el siguiente código PHP:

 // Llamar array de valores acerca de lo que estoy leyendo
 $readinglist = $post_meta_cache[256]['Actualmente leyendo'];
No olvides que $readinglist no sera un valor único, sino un array.
Desde WordPress 2.1, $post_meta_cache ya no se rellena. Obtén los valores usando las funciones mencionadas abajo.

Funciones PostMeta

Funciones internas

Está pensado que estas funciones se usen dentro del Loop y todas retornen matrices.

get_post_custom()
Obtener todos los metadatos llave/valor para la entrada actual.
get_post_custom_keys()
Obtener listado de los nombres de las llaves para la entrada actual.
get_post_custom_values($key)
Obtener listado de valore para una llave en particular, para la entrada actual.
get_post_meta($post_id, $key, $single = false)
De WordPress 1.5 en adelante, esta función regresa los metadatos sin problemas de cacheo. La función requiere la ID de la entrada, la llave, y si $single es declarado verdadero (true), regresara solamente el primer resultado como un valor (no como un array) para ser usado por PHP.
Este código retornará el metadato resultante (observa la añadidura de "echo"):
<?php echo get_post_meta($post->ID, 'mykey', true); ?>

Funciones de plantilla

Al tiempo de este escrito solamente hay una función de plantilla:

the_meta()
Regresa una lista sin ordenar conteniendo los metadatos de la entrada actual, usando la clase post-meta para la etiqueta UL, y usando la clase post-meta-key para las etiquetas LI.

Esperamos que desarrolladores independientes logren crear muchos usos interesantes para metadatos de las entradas en forma de plugins. La función the_meta() es solo un ejemplo básico.

Actualmente solamente puedes agregar y eliminar entradas. La habilidad de modificar entradas existentes será implementadas después.