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_commentmeta | Esta tabla contiene contenido adicional sobre los comentarios. |
wp_comments | Aquí están los datos de los comentarios. |
wp_links | Esta tabla está obsoleta desde la versión 3.5 de WordPress. Aquí se almacenan o almacenaban los enlaces. |
wp_options | Aquí se almacenan los datos de configuración de WordPress además de datos sobre configuración de plugins, temas, etc.. |
wp_postmeta | Información relacionada con los posts. Esta tabla está relacionada con la tabla wp_posts. |
wp_posts | Se almacena todo el contenido de WordPress como entradas, páginas, ficheros, etc… |
wp_termmeta | Metadados relacionados con las categorías. |
wp_terms | Aquí se almacenan las categorías y etiquetas. |
wp_terms_relationships | En esta tabla se establece la relación entre los posts con las categorías, etiquetas, etc.. |
wp_term_taxonomy | Establece las características de las taxonomías como las entradas, páginas, etc… |
wp_usermeta | Tabla con información adicional sobre los usuarios de la tabla wp_users. |
wp_users | En 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_id | Id principal de la tabla |
comment_id | Id del comentario (tabla wp_comments) |
meta_key | Clave del valor |
meta_value | Meta 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_ID | Id del comentario |
comment_post_ID | Id del post (tabla wp_posts) |
comment_author | Autor del comentario |
comment_author_email | Email del autor del comentario |
comment_author_url | Url del autor del comentario |
comment_author_IP | Ip del autor del comentario |
comment_date | Fecha y hora del comentario |
comment_date_gmt | Fecha y hora del comentario (gmt) |
comment_content | Contenido del comentario |
comment_karma | Meta o valor del campo |
comment_approved | Aprobación del comentario (0, 1 o spam) |
comment_agent | Browser, sistema operativo, etc.. |
comment_type | Tipo (pingback | trackback) |
comment_parent | Comentario padre del actual |
user_id | id 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_id | Id de la opción |
option_name | Nombre de la opción |
option_value | Valor de la opción |
autoload | Si 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_id | Id de la información (meta) |
post_id | Id del post asociado |
meta_key | Clave del meta |
meta_value | Valor 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 | |
---|---|
ID | Id de la información (meta) |
post_author | Autor del post |
post_date | Fecha del post |
post_date_gmt | Fecha del post (gmt) |
post_content | Contenido del post |
post_title | Título del post |
post_excerpt | Extracto del post |
post_status | Estado del post (publicado, borrador, etc..) |
comment_status | Estado comentarios (abiertos?) |
ping_status | Estado de los pings (abiertos?) |
post_password | Contraseña del post |
post_name | Nombre del post |
to_ping | Url a la que enviar pingback |
pinged | Url a la que se ha enviado pingback |
post_modified | Fecha y hora de modificarción del post |
post_modified_gmt | Fecha y hora de modificarción del post (gmt) |
post_content_filtered | Usado por algunos plugins de cache para guardar uan versión en caché |
guid | Url permanente al post |
menu_order | Número de orden en el menu |
post_type | Tipo de post (post, page…) |
post_mime_type | El Mime type de los ficheros subidos |
comment_count | Nú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_id | Id de la información (meta) |
term_id | Id del término |
meta_key | Clave del meta |
meta_value | Valor 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_id | Id de término |
name | Nombre del término |
slug | Slug del término |
term_group | Agrupació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_id | Id de término |
term_taxonomy_id | Nombre del término |
term_order | Slug 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_id | Id del témino de taxonomía |
term_id | Id del término |
taxonomy | Nombre de la taxonomía |
description | Descripción |
parent | Padre |
count | Nú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_id | Id de la tabla |
user_id | Id del usuario (tabla wp_users) |
meta_key | Clave de la información o meta |
meta_value | Valor 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 | |
---|---|
ID | Id del usuario |
user_login | Login o username para acceder |
user_pass | Contraseña del usuario (encriptada) |
user_nicename | Nombre del usuario que se muestra |
user_email | Email del usuario |
user_url | Campo url del usuario |
user_registered | Fecha y hora en que se registró el usuario |
user_activation_key | Se usa para reestablecer las contraseñas |
user_status | Se usaba antes |
display_name | nombre 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!
Muy bueeeeno, informativo me ayudó mucho a mi curso de wordpress que estoy estudiando, saludos.
Un artículo muy útil. Muy revelador. Gracias por escribirlo.
Me alegro mucho.
Mucho ánimo!!
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!
Encantado de ayudarte Mizael.
Sique así y mucho ánimo!
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.