En que tabla se almacenan las categorías de WordPress

Hace un par de meses necesitaba hacer algunas consulta de las entradas de un blog por categoría, al no encontrar mucha información al respecto publiqué el Diagrama de la Base de Datos de WordPress en mi blog, esta entrada es para complementar un poco el anterior post.

Las etiquetas y las categorías se guardan en la tabla wp_terms por lo que si necesitamos generar una lista de únicamente las categorías necesitamos hacer la siguiente consulta:

SELECT wp_terms.term_id, wp_terms.name, wp_terms.slug
FROM wp_term_taxonomy
LEFT OUTER JOIN wp_terms ON wp_terms.term_id = wp_term_taxonomy.term_id
WHERE (wp_term_taxonomy.taxonomy =  'category')

Una consulta más completa que nos regrese el id, nombre, descripción, slug y número de entradas de una categoría sería como la siguiente:

SELECT wp_terms.term_id, wp_terms.name, wp_terms.slug,
wp_term_taxonomy.taxonomy, wp_term_taxonomy.description, wp_term_taxonomy.count
FROM wp_term_taxonomy
LEFT OUTER JOIN wp_terms ON wp_terms.term_id = wp_term_taxonomy.term_id
WHERE (wp_term_taxonomy.taxonomy =  'category')
ORDER BY wp_terms.name

Finalmente para tener una lista de las entradas o post, con estatus de publicado, con su id, título, fecha, categoría y autor necesitamos hacer la siguiente consulta:

SELECT wp_posts.ID, wp_posts.post_title, wp_posts.post_date, wp_terms.name, wp_users.user_nicename
FROM wp_term_taxonomy
LEFT OUTER JOIN wp_terms ON wp_terms.term_id = wp_term_taxonomy.term_id
RIGHT OUTER JOIN wp_term_relationships ON wp_term_relationships.term_taxonomy_id = wp_term_taxonomy.term_taxonomy_id
RIGHT OUTER JOIN wp_posts ON wp_posts.ID = wp_term_relationships.object_id
LEFT OUTER JOIN wp_users ON wp_users.ID = wp_posts.post_author
WHERE (wp_term_taxonomy.taxonomy =  'category')
AND (wp_posts.post_type =  'post')
AND (wp_posts.post_status =  'publish')
ORDER BY wp_posts.post_date DESC

Esta última consulta tiene el detalle de que si una entrada pertenece a varias categorías generará un registro por cada una de las categorías a la que pertenezca.

He hecho algunas otras consultas un poco más elaboradas de la base de datos de WordPress así que las publicaré poco a poco en mi blog. Se aceptan las dudas y comentarios 🙂

About davidaustria

Desarrollador de aplicaciones de escritorio y web. Programa en el Hacker Room México soluciones con bases de datos y APIs Sociales.
This entry was posted in blog, WordPress. Bookmark the permalink.

9 Responses to En que tabla se almacenan las categorías de WordPress

  1. Pingback: Diagrama de la Base de Datos de WordPress | David Austria

  2. Marc20id says:

    Muy buenas consultas! a Favoritos!

  3. Diego says:

    Excelente nota David, ahora bien, te hago una consulta a ver si me ayudas a darle una vuelta mas:

    Tengo muchísimas notas que agregue directamente en la base, gracias a una migración cacera desde otro sistema. Todas estas notas son de una categoria, la 43 que pude identificar gracias a esta nota tuya ;P.
    Entonces, lo que quiero, es setearle la categoria a todos los post cuyo id es mayor a 1000, algo asi.

    ¿donde lo tendría que insertar?

    desde ya, muchísimas gracias.

  4. Maxi says:

    Hola, Me sirvió el post.

    Pero me podrían pasar el código php de como seria para exportar los datos a la pagina, con los post de una categorías.

    Por ejemplo. quiero exportar una categoría (deportes). que esta dentro de “wp_terms” de la base de dato, y quiero que salga los últimos post que se realicen en esa categoría, Titulo, Imagen, Autor, y contenido.

    Será posible que me pasen el código? o decirme como se hace.

    Desde ya gracias…

  5. juanra says:

    buen post, gracias por el aporte

  6. Dani says:

    Muchas gracias! me han sido de mucha ayuda!

  7. Javier says:

    Muy buena Info, clara y precisa!!!GRACIAS!!

  8. alex says:

    perfecto, gracias!

  9. Samuel says:

    Excelente aporte, ahora bien, mi consulta es como puedo hacer para obtener todo lo que tiene la ultima consulta de este post PERO de una categoria especifica?

Leave a Reply

Your email address will not be published. Required fields are marked *