¿Dónde se almacena el enlace de la imagen post featured en la base de datos de WordPress?


¿Dónde se almacena el enlace de imagen destacada en la base de datos de WordPress? Busqué en la tabla wp_postmeta pero no puedo encontrar los post_id y links exactos.

Es esto correcto? ¿Podría alguien explicarme cómo funciona?

 45
Author: Thamaraiselvam, 2015-02-21

4 answers

El ID de imagen destacado se almacena en wp_postmeta con un meta_key llamado _thumbnail_id. Ejemplo:

╔═════════╦═════════╦═══════════════╦═══════════╗
║ meta_id ║ post_id ║ meta_key      ║ meta_value║
╠═════════╬═════════╬═══════════════╬═══════════╣
║ 200     ║ 4       ║ _thumbnail_id ║ 48        ║
╚═════════╩═════════╩═══════════════╩═══════════╝

El enlace en miniatura real está entonces contenido en wp_posts con un post_type de attachment. Ejemplo:

╔════╦════════════╦═════════════════════════════════════════════════════╗
║ ID ║ post_type  ║ guid                                                ║
╠════╬════════════╬═════════════════════════════════════════════════════╣
║ 48 ║ attachment ║ http://example.com/wp-content/uploads/yourimage.png ║
╚════╩════════════╩═════════════════════════════════════════════════════╝
 94
Author: rnevius,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-02-21 09:36:15

Tenía curiosidad, así que aquí va...

  • La tabla wp_postmeta tendrá una entrada para el post con meta_key de _thumbnail_id
  • el meta_value es un hijo post_id para la imagen destacada
  • usando ese post_id, puede obtener más información de wp_posts y wp_postmeta

Para ponerlo todo junto, aquí está cómo obtener la fila hijo wp_posts para la imagen destacada de post XXX...

SELECT childpost.* 
FROM wp_posts childpost 
INNER JOIN wp_postmeta parentmeta ON (childpost.ID=parentmeta.meta_value)
WHERE parentmeta.meta_key='_thumbnail_id' 
AND parentmeta.post_id=XXX;

Y aquí están los metadatos para esa misma imagen

SELECT childmeta.* 
FROM wp_postmeta childmeta 
INNER JOIN wp_postmeta parentmeta ON (childmeta.post_id=parentmeta.meta_value)
WHERE parentmeta.meta_key='_thumbnail_id' 
AND parentmeta.post_id=XXX;

Los metadatos incluirá una ruta relativa _wp_attached_file, y una _wp_attachment_metadata que contiene algunos datos serializados en PHP.

 8
Author: Paul Dixon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-02-21 08:49:35

Aquí mi sql con la imagen url completa

SELECT concat((select option_value from wp_options where option_name ='siteurl'  limit 1),'/wp-content/uploads/',childmeta.meta_value)
FROM wp_postmeta childmeta 
INNER JOIN wp_postmeta parentmeta ON (childmeta.post_id=parentmeta.meta_value)
WHERE parentmeta.meta_key='_thumbnail_id' and childmeta.meta_key = '_wp_attached_file'
AND parentmeta.post_id = POST_ID ;

select option_name from wp_options where option_name ='siteurl' 

El resultado será así

http://yourdomain/blog-wp/wp-content/uploads/2015/04/IMG_06062014_155904.png

 7
Author: Ansyori,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-04-27 07:31:52

Incluso si rnevius la respuesta parecía correcta, el resultado devolvió algunas imágenes con este tipo de URL : http://www.example.com/?attachment_id=48 que no estaba funcionando en mi caso.

Probado en Wordpress 4.9.3 :

Otra solución es usar _wp_attached_file en su lugar :

Wp_postmeta

Buscar el valor _thumbnail_id en meta_key

meta_id   | post_id   | meta_key            | meta_value
200       | 4         | _thumbnail_id       | 48

Wp_postmeta

De nuevo en wp_postmeta, busque el valor _wp_attached_file en meta_key donde post_id coincide con el meta_value find en la consulta anterior

meta_id   | post_id   | meta_key            | meta_value
1020      | 48        | _wp_attached_file   | 2018/09/picture.jpg

Consulta:

SELECT wp.ID, wpm2.meta_value
FROM wp_posts wp
    INNER JOIN wp_postmeta wpm
        ON (wp.ID = wpm.post_id AND wpm.meta_key = '_thumbnail_id')
    INNER JOIN wp_postmeta wpm2
        ON (wpm.meta_value = wpm2.post_id AND wpm2.meta_key = '_wp_attached_file')
 2
Author: fdehanne,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-09-07 10:03:56