Guía de la base de datos de WordPress

Si nos dedicamos a cualquier cosa relacionada con WordPress o tenemos pensado hacerlo, no podemos dejar de lado la comprensión de su base de datos. Dependiento del nivel en el que nos movamos, tendremos que ahondar más o menos en su comprensión pero en cualquier caso, nunca está de más conocer sus tablas y cómo está estructura.

En esta guía voy a intentar resumir la estructura de de la base de datos de WordPress de manera que sea lo más comprensible posible para todos y todas.

Espero que esta guía os sea de ayuda y os anime un poco a profundizar en el desarrollo WordPress y en su comprensión.

Antes de Empezar

Antes de empezar a ver cada una de las partes, tablas, etc… de la base de datos de WordPress, vamos a comentar lo que necesitamos par poder seguir esta guía y verlo con nuestros propios ojos a la vez que seguimos la guía.

En mi caso parto de:

  • Una instalación nueva de WordPress sin modificaciones.
  • Instalado PHP 7 en el servidor.
  • Acceso a phpMyAdmin.

Conocimientos necesarios:

Aunque creo que en este caso no es necesario un mínimo conocimiento de WordPress para ententer lo que vamos a comentar, si que creo que lo ideal sería:

  • Conocimientos básicos sobre WordPress y su estructura: posts, páginas, comentarios, etc…
  • Conocimientos sobre bases de datos: tablas, filas, campos, etc..

Estos no son requisitos imprescindibles.

Las tablas de la base de datos de WordPress

Cuando instalamos WordPress se crean 12 tablas iniciales que son las que vamos a explicar en esta guía.

Nota: Ante de continuar debemos saber que no deberíamos utilizar el prefijo por defecto que nos ofrece WordPress que no es otro que «wp_«. Deberíamos cambiarlo por otro por motivos de seguridad. Para esta guía he utilizado el prefijo por defecto por motivos didácticos.

Tras realizar una instalación de WordPress sin nada más, nos econtraremos estas tablas en nuestro phpMyAdmin:

Esta es la estructura de tablas que nos vamos a encontrar en una nueva instalación de WordPress.

A continuación vamos a resumir un poco cada una de las tablas para más adelante pasar a detallarlas un poco más cada una de ellas.

Las 12 tablas de WordPress
wp_commentmetaEsta tabla contiene contenido adicional sobre los comentarios.
wp_commentsAquí están los datos de los comentarios.
wp_linksEsta tabla está obsoleta desde la versión 3.5 de WordPress. Aquí se almacenan o almacenaban los enlaces.
wp_optionsAquí se almacenan los datos de configuración de WordPress además de datos sobre configuración de plugins, temas, etc..
wp_postmetaInformación relacionada con los posts. Esta tabla está relacionada con la tabla wp_posts.
wp_postsSe almacena todo el contenido de WordPress como entradas, páginas, ficheros, etc…
wp_termmetaMetadados relacionados con las categorías.
wp_termsAquí se almacenan las categorías y etiquetas.
wp_terms_relationshipsEn esta tabla se establece la relación entre los posts con las categorías, etiquetas, etc..
wp_term_taxonomyEstablece las características de las taxonomías como las entradas, páginas, etc…
wp_usermetaTabla con información adicional sobre los usuarios de la tabla wp_users.
wp_usersEn esta tabla es donde se almacenan todos los usuarios con su información básica como contraseña, email, etc..

Con esta breve explicación ya nos podemos hacer una idea de la estructura de la base de datos de WordPress y hacerno una idea que dónde se almacenan algunos datos aunque lo veremos un poco mejor más adelante en esta guía.

Relaciones entre las tablas de la base de datos

Para comprender un poco mejor la estructura de la base de datos de WordPress debemos entender cómo están relacionas entre ellas.

A continuación podemos ver un esquema de las relaciones entre las tablas obtenido del codex de WordPress.org.

En la imagen anterior podemos ver graficamente las relaciones entre las tablas de la base de datos de WordPress en sus últimas versiones.

Detallaremos un poco más la relación de cada una de las tablas más adelante en esta guía.

Detalle de cada una de las tablas

 

Tabla wp_commentmeta

Como ya hemos comentado anteriormente, en la tabla wp_commentmeta se almacenan los datos adicionales de o sobre los comentarios que se almacenan en una instalación de WordPress.

Estructura de la tabla wp_commentmeta:

Como podemos ver en la imagen anterior esta tabla es muy sencilla y sólo tiene 4 campos:

Campos tabla wp_commentmeta
meta_idId principal de la tabla
comment_idId del comentario (tabla wp_comments)
meta_keyClave del valor
meta_valueMeta o valor del campo

Destacaremos que el cambio comment_id hace referencia al id de la tabla wp_comments por lo tanto queda claro que ambas están relacinonada a través de este campo.

Obtener datos de la tabla wp_commentmeta

Para obtener datos de la tabla wp_commentmeta podemo utilizar la función get_comment_meta() que nos devolverá el campo meta de un comentario.

metacomentario = get_comment_meta( $comment->comment_ID, 'mimeta', true );

Tabla wp_comments

Esta es la tabla donde se almacenan o guardan los comentarios que se han realizado en nuestro WordPress. Tanto los comentarios que se han aprobado como los que no han sido aprovados.

Estructura de la tabla wp_comments:

Campos tabla wp_comments
comment_IDId del comentario
comment_post_IDId del post (tabla wp_posts)
comment_authorAutor del comentario
comment_author_emailEmail del autor del comentario
comment_author_urlUrl del autor del comentario
comment_author_IPIp del autor del comentario
comment_dateFecha y hora del comentario
comment_date_gmtFecha y hora del comentario (gmt)
comment_contentContenido del comentario
comment_karmaMeta o valor del campo
comment_approvedAprobación del comentario (0, 1 o spam)
comment_agentBrowser, sistema operativo, etc..
comment_typeTipo (pingback | trackback)
comment_parentComentario padre del actual
user_idid del usuario si está registrado

Obtener datos de la tabla wp_comments

Para obtener datos de la tabla wp_comments podemo utilizar la función get_comments() que nos devolverá el campo meta de un comentario.

<?php
  // Mostrar por pantalla los autores de los comentarios del post con id 15

  $commentarios = get_comments('post_id=15');
  foreach($comments as $comment) :
	echo($comment->comment_author);
  endforeach;
?>

Tabla wp_links

Esta tabla se utilizaba en veriones anteriores pero se dejó de utilizar. Antes se utilizaba para la gestión de los enlaces.

Si necesistamos o queresmos volver a utilizar esta característica de WordPress la podemos seguir usando si instalamos el plugin «Link Manager«.

No se muestran detalles de esta tabla por que no se utiliza normalmente.

Para obtener más información sobre la tabla wp_links podemos visitar este enlace.

Tabla wp_options

Como ya hemos comentado al principio de esta guía en esta tabla se guardarán y gestionaran las opciones de nuestra instalación de WordPress.

Esta tabla es algo especial puesto que, en principio, no tiene ninguna relación con ningun otra tabla de la base de datos de WordPress.

Enl a siguiente captura podemos ver la tabla completa que crea WordPress tras la instalación.

Estructura de la tabla wp_options:

Esta tabla, como podemos ver, solo tiene 4 campos o filas.

Campos tabla wp_options
option_idId de la opción
option_nameNombre de la opción
option_valueValor de la opción
autoloadSi la opción se carga automaticamente

Obtener datos de la tabla wp_options

// Obtener el email del administrador

$admin_email = get_option( 'admin_email' );

 

Tabla wp_postmeta

Cada meta data de un post se almacena en la tabla wp_postmeta.

Algunos plugins también pueden utilizar esta tabla para guardar su propia información.

Estructura de la tabla wp_postmeta:

Campos tabla wp_postmeta
meta_idId de la información (meta)
post_idId del post asociado
meta_keyClave del meta
meta_valueValor del meta (información)

Obtener datos de la tabla wp_postmeta

// Obtener la información adicional o meta del post actual a través de su ID

$meta = get_post_meta( get_the_ID() );

Tabla wp_posts

Aunque todas las tablas de la base de datos son muy importantes, la tabla wp_posts es por lo menos una de las más imporntes sino la más importante.

Debemos tener en cuenta que aquí, en la tabla wp_posts se almacena la información de los posts de WordPress lo que incluye entradas, páginas, etc…

Estructura de la tabla wp_posts:

Campos tabla wp_posts
IDId de la información (meta)
post_authorAutor del post
post_dateFecha del post
post_date_gmtFecha del post (gmt)
post_contentContenido del post
post_titleTítulo del post
post_excerptExtracto del post
post_statusEstado del post (publicado, borrador, etc..)
comment_statusEstado comentarios (abiertos?)
ping_statusEstado de los pings (abiertos?)
post_passwordContraseña del post
post_nameNombre del post
to_pingUrl a la que enviar pingback
pingedUrl a la que se ha enviado pingback
post_modifiedFecha y hora de modificarción del post
post_modified_gmtFecha y hora de modificarción del post (gmt)
post_content_filteredUsado por algunos plugins de cache para guardar uan versión en caché
guidUrl permanente al post
menu_orderNúmero de orden en el menu
post_typeTipo de post (post, page…)
post_mime_typeEl Mime type de los ficheros subidos
comment_countNúmero de comentarios del post

Obtener datos de la tabla wp_posts

// Obtener los últimos 15 posts

$args = array(
  'numberposts' => 10
);
 
$latest_posts = get_posts( $args );

Tabla wp_termmeta

En este tabla se almacenan los metadatos relacionados con las categorías.

Estructura de la tabla wp_termmeta:

Campos tabla wp_termmeta
meta_idId de la información (meta)
term_idId del término
meta_keyClave del meta
meta_valueValor del meta (información)

Obtener datos de la tabla wp_termmeta

// Obtener el valor del término 'color'

$color = get_term_meta( $term_id, 'color', true );

Tabla wp_terms

En la tabla wp_terms se guardan tanto las categorías como las etiquetas para los posts y páginas.

Estructura de la tabla wp_terms:

Campos tabla wp_terms
term_idId de término
nameNombre del término
slugSlug del término
term_groupAgrupación de terminos (alias)

Obtener datos de la tabla wp_terms

// Obtener todas la información de los términos de la categoría con ID 1

$term = get_term( 1 , 'category' );
echo $term->name;

Tabla wp_term_relationships

Los posts están relacionados con categorías y etiquetas por la tabla wp_terms y esta asociación es mantenida en la tabla wp_term_relationships.

Estructura de la tabla wp_term_relationships:

Campos tabla wp_term_relationships
obtect_idId de término
term_taxonomy_idNombre del término
term_orderSlug del término

Obtener datos de la tabla wp_term_relationships

// Devuelve una lista de términos de taxonomía de productos que se aplican a $post

$product_terms = wp_get_object_terms( $post->ID,  'product' );
 
if ( ! empty( $product_terms ) ) {
    if ( ! is_wp_error( $product_terms ) ) {
        echo '<ul>';
            foreach( $product_terms as $term ) {
                echo '<li><a href="' . esc_url( get_term_link( $term->slug, 'product' ) ) . '">' . esc_html( $term->name ) . '</a></li>'; 
            }
        echo '</ul>';
    }
}

Tabla wp_term_taxonomy

Esta tabla almacena la información que describe la taxonomía como categorías, tags, cpt... para las entradas de la tabla wp_terms.

Estructura de la tabla wp_term_taxonomy:

Campos tabla wp_term_taxonomy
term_taxonomy_idId del témino de taxonomía
term_idId del término
taxonomyNombre de la taxonomía
descriptionDescripción
parentPadre
countNúmero

Tabla wp_usermeta

En la tabla wp_usermeta se almacenan datos adicionales de los usuarios.

A continuación podemos ver el contenido de la tabla wp_usermeta tras la instalación de WordPress:

Estructura de la tabla wp_usermeta

Campos tabla wp_usermeta
umeta_idId de la tabla
user_idId del usuario (tabla wp_users)
meta_keyClave de la información o meta
meta_valueValor de la información o meta

Obtener datos de la tabla wp_usermeta

// Obtener y mostrar toda la información meta de un usuario a través de su id

<?php
  $metauser = get_user_meta( 1 );
  print_r( $metauser );
?>

Tabla wp_users

Como su nombre indica, aquí se almacenan los datos de los usuarios: nombre, email, etc

Esta tabla está directamente relacionada con la tabla wp_usermeta.

Estructura de la tabla wp_users:

Campos tabla wp_users
IDId del usuario
user_loginLogin o username para acceder
user_passContraseña del usuario (encriptada)
user_nicenameNombre del usuario que se muestra
user_emailEmail del usuario
user_urlCampo url del usuario
user_registeredFecha y hora en que se registró el usuario
user_activation_keySe usa para reestablecer las contraseñas
user_statusSe usaba antes
display_namenombre del usuario elegido para mostrar (user_login, user_nicename…)

Obtener datos de la tabla wp_users

// Obtener una lista de todos los usuarios con el nombre 'oscar'

$usuarios_oscar = get_users( array( 'search' => 'oscar' ) );

Conclusión

Si habéis llegado hasta aquí es que le habeis prestado algo de atención a esta guía.

Ya se que no es lo más detallada que cabría esperar pero la idea es dar una base, unas pinceladas sobre las que ahora podréis trabajar vosotros, hacer pruebas y sacarle el mayor partido posible a el desarrollo con WordPress.

El conocimiento de la base de datos de WordPress nos va a ayudar muchísimo, nos va a abrir algunas puertas que si no supiéramos cómo funciona nos costaría más llevarlo a cabo.

Para terminar, espero que os sea de ayuda lo máximo posible.

Saludos y hasta la próxima!

6 comentarios en «Guía de la base de datos de WordPress»

  1. Oscar. Muy bueno tu artículo. Me gusta el tema de las bases datos. Es muy importante pero pocos lo tocan. Y tu lo abres bien. Gracias! Voy a seguir tus trabajos!

    Responder
  2. Hola, excelente tutorial. Pero quisiera saber como puedo conocer el Id de una tabla donde se almacenan una pdf que tengo alojado en wordpress, a traves del plugins Send PDF for Contact Form 7.

    Responder

Deja un comentario