¿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?
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 ║
╚════╩════════════╩═════════════════════════════════════════════════════╝
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 conmeta_key
de_thumbnail_id
- el
meta_value
es un hijopost_id
para la imagen destacada - usando ese
post_id
, puede obtener más información dewp_posts
ywp_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.
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
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')
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