Obtener imagen destacada

6 jul 2012, 23:45:43
Vistas: 25.1K
Votos: 10

Estamos desarrollando una aplicación Android basada en una base de datos MySQL de WordPress. Pudimos obtener la mayoría de la información de la base de datos para mostrarla en la aplicación. Ahora solo nos falta obtener la imagen destacada de las entradas.

¿Hay alguna manera de obtener la URL de la imagen destacada?

¡Gracias!

0
Todas las respuestas a la pregunta 6
0
17

El ID del archivo adjunto de la imagen destacada se almacena en la tabla post_meta, con la meta_key _thumbnail_id.

Usa ese ID de publicación para encontrar la metadata de la publicación con la meta_key _wp_attachment_metadata.

El valor de eso es un array serializado con las claves thumb, file, width, height, sizes (un array), y image_meta (un array).

El valor file es relativo al directorio de subidas de la instalación de WordPress, y apunta a la imagen original en tamaño completo. Deberías poder calcular la URL a partir de eso.

sizes tiene un tamaño de imagen como clave (por ejemplo, 'small', 'medium', 'large', 'thumbnail'), y el valor es un array con las claves file, height, y width.

image_meta contendrá metadatos de la imagen como exif/iptc de la propia imagen.

7 jul 2012 01:25:09
4

La imagen destacada del post se almacena en la tabla {$wpdb->prefix}_postmeta con la clave _thumbnail_id.

Algo como esto:

SELECT * from {$wpdb->prefix}_posts 
WHERE ID in (
   SELECT meta_value FROM {$wpdb->prefix}_postmeta 
   WHERE meta_key = '_thumbnail_id'
   AND post_id = ':ID'
);

Reemplaza :ID con el ID del post.

Eso devolverá el Post asociado con la imagen en sí - el post_title será lo que el usuario asoció con el atributo de título en la imagen, y el guid será la URL de la imagen en tamaño completo.

Si quieres diferentes tamaños, tendrás que buscar el valor postmeta _wp_attachment_metadata que contendrá un array serializado con todos los diferentes tamaños.

Usar la API de WordPress es mucho más fácil:

<?php
if(has_post_thumbnail($some_post_id))
{
   $img = wp_get_attachment_img_src(get_post_thumbnail_id($some_post_id), 'the_image_size');
   // devuelve un array, el primer elemento es la URL de la imagen
   echo $img[0];
}
7 jul 2012 00:07:41
Comentarios

No dependas del campo guid para que sea una URL ... está destinado a ser un identificador único, no un enlace.

EAMann EAMann
7 jul 2012 00:14:41

¡Ese es un buen punto! ¿Hay algún campo que almacene la URL real de la imagen fuera del campo postmeta _wp_attachment_metadata?

chrisguitarguy chrisguitarguy
7 jul 2012 00:15:46

Eso es lo que estamos intentando averiguar... He encontrado el archivo de imagen real en la base de datos, pero necesitamos una forma de llamar a la imagen dentro de la consulta SQL.

Martin Hasan Martin Hasan
7 jul 2012 00:18:40

Echa un vistazo a wp_get_attachment_url() y cómo construye la URL para imágenes adjuntas basándose en el ID ...

EAMann EAMann
7 jul 2012 00:27:54
0

La imagen destacada de una publicación es un adjunto común en WordPress. Por lo tanto, como con cualquier otro archivo adjunto de imagen, necesitarás consultar la tabla wp_posts para un tipo de publicación attachment. El truco es primero obtener el ID del adjunto que necesitas recuperar.

Esta información está contenida en los metadatos de la publicación específica, concretamente en el meta _thumbnail_id.

Así que necesitarás una consulta que:

  1. Recupere el valor marcado por la clave _thumbnail_id en la tabla wp_postmeta basado en un ID de publicación dado.
  2. Recupere el adjunto de la tabla wp_posts basado en el ID obtenido en el paso #1
  3. Genere un enlace permanente para el adjunto basado en la información obtenida en el paso #2

En realidad, aunque estás haciendo mucho trabajo para reinventar la rueda aquí...

7 jul 2012 00:00:14
0

Esto es lo que utilicé para obtener los datos del post, la URL de la imagen destacada y los detalles de la imagen destacada (como las dimensiones):

SELECT p.*, ( SELECT guid FROM wp_posts WHERE id = m.meta_value ) AS imgurl,  (SELECT meta_value FROM wp_postmeta pm WHERE meta_key='_wp_attachment_metadata' AND pm.post_id=m.meta_value ) AS imgdetails
FROM wp_posts p
LEFT JOIN  wp_postmeta m ON(p.id = m.post_id AND m.meta_key =  '_thumbnail_id' )
WHERE p.post_type =  'post'
AND p.post_status =  'publish' AND p.id=@postId;
20 mar 2018 12:15:54
0

Utiliza la siguiente consulta para recuperar las imágenes destacadas de todas las publicaciones:

SELECT result.post_parent, result.guid AS featuredImage
FROM wp_posts AS p 
INNER JOIN wp_postmeta AS pm ON p.ID=pm.post_id
INNER JOIN wp_posts as result ON pm.meta_value = result.ID
WHERE pm.meta_key = '_thumbnail_id' AND p.post_type='post' AND 
p.post_status = 'publish'
28 may 2017 20:29:25
1

La mejor solución SQL,

Buscar el ID desde wp_post

SELECT * FROM wp_posts WHERE post_status='publish'

Encontrar el contenido meta

SELECT * FROM wp_postmeta WHERE meta_key='_thumbnail_id' AND post_id=MiID

Con el ID de la miniatura, buscar una vez más en wp_postmeta el archivo

SELECT * FROM wp_postmeta WHERE meta_key='_wp_attached_file' AND post_id=MiID

Aquí un ejemplo.

$query = mysql_query("SELECT * FROM wp_posts WHERE post_status='publish' ORDER BY id DESC LIMIT 6") or die(mysql_error());
    $json='{ "Blog" : [ ';
    while($row = mysql_fetch_array($query)){

        $queryMeta = mysql_query("SELECT * FROM wp_postmeta WHERE meta_key='_thumbnail_id' AND post_id=$row[ID]") or die(mysql_error());

        $f = mysql_fetch_array($queryMeta);

        $value = $f[meta_value];

        $queryMeta2 = mysql_query("SELECT * FROM wp_postmeta WHERE meta_key='_wp_attached_file' AND post_id=$value") or die(mysql_error());

        $f2 = mysql_fetch_array($queryMeta2);

        $value = $f2[meta_value];

        $json .= '{"id" : "'.$row[ID].'", "date" : "'.$row[post_date].'", "title" :"'.$row[post_title].'", "link" : "'.$row[guid].'", "image" :"https://dartesanos.com/blog/wp-content/uploads/'.$value.'"},';

    }
    $json = substr($json, 0, -1);

    echo $json ."]}";
1 sept 2017 04:49:09
Comentarios

Es mejor usar json_encode(), $row[post_date] generaría avisos/advertencias porque la clave no está entre comillas

Svetoslav Marinov Svetoslav Marinov
8 abr 2020 16:32:38