Campos personalizados II

sisi escribió esto a las 19:33

Hace ya tiempo que os hablaba de los campos personalizados y de una forma de mostrarlos, mediante un plugin, en la barra lateral del blog:
http://sisifodichoso.org/2006/08/09/campos-personalizados/
Pero como creo que entonces no quedó claro qué son realmente los campos personalizados y cómo se utilizan en WordPress, voy a contar aquí mi experiencia y lo que he ido aprendiendo yo al respecto.

Los campos personalizados forman parte de una información de cada post llamada metadatos. Cada post tiene asociada una serie de metadatos que se almacenan en una tabla de la base de datos de WordPress llamada wp_postmeta.

tabla wp-postmeta

En esta imagen se aprecia la estructura de la tabla: cada campo tiene un nombre, meta_key, y tiene un valor, meta_value, que varía de un post a otro, post_id, en función de si lo hemos cambiado o no al editar o escribir el post.
Supongamos que quiero que la gente que lee mi blog se vaya enterando de mis progresos en las carreras al mismo tiempo que leen entradas sobre otros temas. Creo, al escribir o editar el post, un campo llamado “corro” que, lo voy cambiando de valor según vaya progresando o cambiando de entrenamiento. Además creo otro campo llamado “leo” para que sepáis qué libro estoy leyendo.

Para acceder a los metadatos de cada post, se acude a una función llamada the_meta() tal y como se explica aquí:

o bien se utiliza algún plugin que nos facilite la tarea.

En realidad, no hay más que incluir este código en nuestro index.php, dentro del loop:
<p><strong>Mientras escribo este post:</strong></p>
<?php the_meta(); ?>

para mostrar el resultado:

aspecto de campos personalizados

Sencillo ¿no? pero volvamos a nuestra base de datos

tabla wp-postmeta

… vemos que en el post 119 corrí 27′ y en el 123 hice series.
Ha sido muy importante para mí entender que en esta tabla, wp-postmeta, se almacenan todos los valores que ese campo personalizado ha ido tomando a lo largo del tiempo. Así por ejemplo, si yo en el post 120 estaba leyendo el libro A y en el post 150 el libro B, ambos valores se conservan en la base de datos de tal forma que siempre que se acuda al post 120 aparecerá que entonces leía el libro A y en el 150 leía el libro B. Yo estaba errada en esto: pensaba que sólo se almacenaba el último valor. Y lo pensaba así, porque al ver los campos en la barra lateral y no en cada post, se veía siempre el último valor de cada campo.
Teniendo esto en cuenta, no sorprende ver cómo nuestra tabla de metadatos va creciendo y creciendo a lo largo del tiempo, conforme crece el número de posts de nuestro blog y actualizamos el valor de nuestros campos.

un campo en wp-postmeta

Los campos personalizados son enormemente versátiles y se utilizan ampliamente, no sólo por los usuarios de WordPress, sino también en el funcionamiento de muchos plugins de muy diversa índole. Y esto tiene grandes ventajas pero también algún inconveniente. Supongamos que queremos prescindir de un plugin que llevamos tiempo utilizando y que hace uso de los campos personalizados: con esto quiero decir que el plugin ha creado una serie de campos personalizados en mi base de datos que, por regla general, no se borrarán cuando lo desactive.
En la imagen tenéis un ejemplo de “campo residual” que se ha quedado en mi base de datos aunque ya no utilice el plugin que lo creó:

un campo que ya no utilizo

Llegamos pues a la cuestión ¿Cómo borro un campo personalizado de todos los posts?.
Evidentemente no soy el primer usuario de WordPress que se hace esta pregunta, http://wordpress.org/support/topic/96356, y la solución aportada en este enlace, acceder a tu base de datos mediante phpMyAdmin por ejemplo y ejecutar esta orden de SQL:

DELETE FROM wp_postmeta WHERE meta_key = 'NOMBRE_CAMPO';

es, podríamos decir, la canónica pero, desde luego, no es la más cómoda. Sobre todo para aquellos que no se sienten muy seguros al manejar su base de datos (queda pendiente un post sobre ciertas inseguridades “necesarias” que evitan muchos desastres mayores).

Bien pues, todo esto me animó a hacer mi propio plugin que borrara los campos personalizados de las entradas que queramos de forma rápida y sencilla. El plugin tiene el originalísimo nombre de “DeleteCustom” y podéis encontrar más información sobre su funcionamiento aquí: http://sisifodichoso.org/proyectos/deletecustom/.
Por supuesto que no me hago responsable de los daños irreparables que se pudieran producir por su utilización y, en cualquier caso, sea cual sea el método empleado, siempre es buena idea, antes de nada, hacer una copia de seguridad válida de la base de datos ;-)

Comparte este artículo:
  • Meneame
  • del.icio.us
  • Digg
  • Facebook
  • TwitThis
  • Google
  • Live
  • E-mail this story to a friend!
  • Print this article!

12 comentarios en “Campos personalizados II”


  1. merak dice:

    huy qué idioma más raro ;-)


  2. sisifodichoso dice:

    ji ji sí …:lol:


  3. Ana dice:

    Pero mira que eres apañá, tú. :D

    Estaba cantado que me iba a enterar de lo que son los campos personalizados el mismo día que dejara WordPress en pos de yo que sé qué.

    Muy bien explicado. Tendré que mirar si tengo de eso yo también.


  4. Alfonso dice:

    Me ha encantado ese detalle de válida, la de disgustos que nos habríamos ahorrado todos..jejeje

    Veo que sigues buscándole los intríngulis al WP y mejorando tus ritmos… ya estás por debajo de la hora en competición… ;)


  5. sisifodichoso dice:

    Gracias Ana, :-)
    estuve echando un vistazo a tu chiringuito nuevo (tiene muy buena pinta). He oído cosas muy buenas de Joomla. No sé si tendrá los campos personalizados, pero seguro que tiene algo potente, algún módulo o como se llame aquí, que hace algo similar … en pos de un cambio porque lo estabas necesitando ¿no? supongo que nunca sabemos a donde nos van a llevar las cosas que iniciamos … afortunadamente ;-)

    En realidad, Alfonso, no hago más que seguir este consejo de Ana del 30 de diciembre “Seguro que tienes un buen backup … ” de cuando hice la migración … desde entonces me aseguro siempre de que las copias de la base de datos valen realmente para algo … ¡Cuánta sabiduría en sus palabras! … ;-)
    Y de los ritmos mejor no hablar … :lol:


  6. Ana dice:

    Ese es mi problema ahora… ¡que me viene grande! Estoy perdidísima y sin tiempo para sentarme tranquila a empollarme el manual, pero creo que me va a hacer crecer :-)
    La necesidad de acabar con algunas cosas era realmente acuciante, pero tampoco era cuestión de terminar con todo :-D
    Es que una es bruta para todo :mrgreen:


  7. Ana dice:

    Hay un dicho que lo deja claro: “cría backups y échate a dormir” :P


  8. sisifodichoso dice:

    ¿El manual? ¿Te refieres a ese PDF de 196 páginas que lleva dormido en mi escritorio varias semanas?
    :lol: igual no hace falta leerlo todo ¿no? (yo así lo espero) imagino que has empezado con casi lo justo para luego ir aumentando el número de módulos… Pero claro, el hecho de que se pueda registrar la gente cambia bastante el concepto … uhmmm te esperan horas y horas de diversión amiga ;-)


  9. Ana dice:

    Sastamente. Ese mismo. Y van por ahí los tiros. De momento muy participativo no está :mrgreen: , pero tampoco me mola que esté tan cerrado; tengo que investigar por ahí. Y me has cogido el espíritu. Empiezo con nada y sin tener ni idea, pero sabiendo que hay un mundo entero ahí esperando a ser descubierto… así que sí, me esperan horas y horas.
    Lo del registro abierto está dejado a propósito. Por ver cómo lo podrían aprovechar ciertas personas y hacer algo molón a partir de ahí.
    Pero bueno, primero el manual ese…


  10. sisifodichoso dice:

    Permaneceremos atentos a nuestras pantallas ;-)


  11. Leonardo Parada | Blog » Blog Archive » Como mostrar miniaturas en la portada dice:

    [...] theme ocupa la funcion de campos personalizados (tambien conocidos como customs fields) para hacer aparecer una imagen junto al post seleccionado [...]


  12. Luarev dice:

    Yo tengo que solucionar un problema de diseño (con urgencia) que no tengo claro todavía. Creo que la solución puede venir de la mano de los campos persoanlizados.
    Algo que con seguridad puede ayudarme es que alguno de ustedes me muestre alguna aplicación de éstos campos, que sea típica y de gran utilidad. Estoy agradecido de antemano.