Recuperare l'immagine in evidenza

6 lug 2012, 23:45:43
Visualizzazioni: 25.1K
Voti: 10

Stiamo sviluppando un'app Android basata su un database MySQL di WordPress. Siamo riusciti a ottenere la maggior parte delle informazioni dal database per visualizzarle nell'app. Ora ci manca solo recuperare l'immagine in evidenza dei post.

C'è un modo per ottenere l'URL dell'immagine in evidenza?

Grazie!

0
Tutte le risposte alla domanda 6
0
17

L'ID dell'allegato dell'immagine in evidenza è memorizzato nella tabella post_meta, con la meta_key _thumbnail_id.

Utilizza quell'ID del post per trovare i post meta con la meta_key _wp_attachment_metadata.

Il valore corrispondente è un array serializzato con le chiavi thumb, file, width, height, sizes (un array) e image_meta (un array).

Il valore file è relativo alla directory uploads dell'installazione di WP e punta all'immagine originale a dimensione intera. Dovresti essere in grado di calcolare l'URL a partire da questo.

sizes ha come chiave una dimensione dell'immagine (es. 'small', 'medium', 'large', 'thumbnail'), e il valore è un array con le chiavi file, height e width.

image_meta conterrà metadati come i dati exif/iptc estratti dall'immagine stessa.

7 lug 2012 01:25:09
4

La miniatura del post è memorizzata nella tabella {$wpdb->prefix}_postmeta con la chiave _thumbnail_id.

Qualcosa come questo:

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

Sostituisci :ID con l'ID del post.

Questo restituirà il Post associato all'immagine stessa - il post_title sarà quello che l'utente ha associato all'attributo title dell'immagine, e il guid sarà l'URL dell'immagine a grandezza intera.

Se vuoi dimensioni diverse, dovrai cercare il valore postmeta _wp_attachment_metadata che conterrà un array serializzato con tutte le diverse dimensioni.

Usare l'API di WordPress è molto più semplice:

<?php
if(has_post_thumbnail($some_post_id))
{
   $img = wp_get_attachment_img_src(get_post_thumbnail_id($some_post_id), 'the_image_size');
   // restituisce un array, il primo elemento è l'URL dell'immagine
   echo $img[0];
}
7 lug 2012 00:07:41
Commenti

Non dipendere dal campo guid per essere un URL... è pensato per essere un identificatore univoco, non un link.

EAMann EAMann
7 lug 2012 00:14:41

Ottimo punto! C'è un campo che memorizza l'URL effettivo dell'immagine al di fuori del campo postmeta _wp_attachment_metadata?

chrisguitarguy chrisguitarguy
7 lug 2012 00:15:46

È proprio quello che stiamo cercando di capire... Ho trovato il file effettivo dell'immagine nel database, ma abbiamo bisogno di un modo per richiamare l'immagine all'interno della query SQL.

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

Dai un'occhiata a wp_get_attachment_url() e a come costruisce l'URL per le immagini allegate in base all'ID ...

EAMann EAMann
7 lug 2012 00:27:54
0

L'immagine in evidenza di un post è un normale allegato al post. Quindi, come per qualsiasi altro allegato di tipo immagine, dovrai interrogare la tabella wp_posts cercando un post di tipo attachment. Il trucco è prima ottenere l'ID dell'allegato che devi recuperare.

Questo è contenuto nelle meta informazioni del post in questione, specificatamente nel meta _thumbnail_id.

Quindi, avrai bisogno di una query che:

  1. Recuperi il valore contrassegnato dalla chiave _thumbnail_id nella tabella wp_postmeta basandoti su un dato ID del post.
  2. Recuperi l'allegato dalla tabella wp_posts basandoti sull'ID ottenuto nel punto #1
  3. Generi un permalink per l'allegato basandoti sulle informazioni ottenute nel punto #2

In realtà però, stai facendo un sacco di lavoro per reinventare la ruota...

7 lug 2012 00:00:14
0

Ecco cosa ho utilizzato per recuperare i dati del post, l'URL dell'immagine in evidenza e i dettagli dell'immagine in evidenza (come le dimensioni):

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

Utilizza la seguente query per recuperare le immagini in evidenza di tutti gli articoli:

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 mag 2017 20:29:25
1

La migliore soluzione SQL,

Cerca l'ID da wp_post

SELECT * FROM wp_posts WHERE post_status='publish'

Trova il contenuto meta

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

Con l'ID della miniatura, cerca ancora una volta nel wp_postmeta il file

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

Ecco un esempio.

$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 set 2017 04:49:09
Commenti

È meglio usare json_encode(), $row[post_date] genererebbe avvisi/errori perché la chiave non è tra virgolette

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