Come ottenere l'elenco delle immagini dei prodotti WooCommerce di una determinata categoria dal database?
Sto cercando di visualizzare le miniature delle immagini dei prodotti WooCommerce o semplicemente ottenere l'URL di quell'immagine dal database. Ma non riesco a trovare la colonna dove gli URL sono memorizzati con la seguente query. Una cosa che vorrei che la mia query avesse è la capacità di selezionare le immagini di una determinata categoria. So che _wp_attached_file è la meta key e attraverso il suo post ID associato posso ottenere il percorso dell'immagine, ma non sono sicuro di come scriverlo.
select * from wp_posts where post_type = "product"
Tutti gli aiuti sono apprezzati
La miniatura del post non viene memorizzata come URL. La miniatura del post viene memorizzata come ID dell'allegato nel meta post _thumbnail_id
. Il file effettivo viene memorizzato come meta post _wp_attached_file
per quel post di allegato. WordPress non memorizza l'URL completo degli allegati nel database. Memorizza solo il percorso del file, relativo alla directory degli upload.
Questa query elencherà gli ID dei prodotti e il percorso dei loro file thumbnail. Successivamente, dovrai aggiungerli all'URL della tua directory degli upload:
SELECT
p.ID,
am.meta_value
FROM
wp_posts p
LEFT JOIN
wp_postmeta pm ON
pm.post_id = p.ID AND
pm.meta_key = '_thumbnail_id'
LEFT JOIN
wp_postmeta am ON
am.post_id = pm.meta_value AND
am.meta_key = '_wp_attached_file'
WHERE
p.post_type = 'product' AND
p.post_status = 'publish'
Poiché l'URL del sito e la directory degli upload sono dinamici e possono essere controllati tramite PHP, non ha senso memorizzare l'URL completo. WordPress utilizza PHP per determinare qual è l'URL del file, in base alla configurazione del sito e al percorso relativo del file. Inoltre, non ha senso memorizzare l'URL perché alcune operazioni richiedono il percorso, non l'URL.
Nota inoltre che l'unico motivo per cui faresti questo con SQL è se stessi accedendo ai percorsi dei file al di fuori di WordPress e non utilizzando l'API REST. Se sei all'interno di un template WordPress/WooCommerce, il modo corretto per visualizzare l'immagine del prodotto è:
$product = wc_get_product( $product_id );
echo $product->get_image( 'full' );

@JacobPeattie ti ha già fornito il modo corretto per ottenere il percorso WP in WordPress con i metodi wc_get_product(..)
e ->get_iamge
.
Tuttavia è possibile costruire una query in modo da ottenere il percorso completo dell'URL in questo modo:
SELECT
p.ID,
CONCAT((SELECT option_value FROM wp_options o WHERE o.option_name = "siteurl"), "/wp-content/uploads/", am.meta_value) AS siteurl
FROM
wp_posts p
LEFT JOIN
wp_postmeta pm ON
pm.post_id = p.ID AND
pm.meta_key = '_thumbnail_id'
LEFT JOIN
wp_postmeta am ON
am.post_id = pm.meta_value AND
am.meta_key = '_wp_attached_file'
WHERE
p.post_type = 'product'
AND p.post_status = 'publish'
AND am.meta_value IS NOT NULL
Risultati:
+-----+---------------------------------------------------------------+
| ID | siteurl |
+-----+---------------------------------------------------------------+
| 374 | https://rolagra.dv/wp-content/uploads/2021/11/products-01.jpg |
| 375 | https://rolagra.dv/wp-content/uploads/2021/11/products-04.jpg |
| 376 | https://rolagra.dv/wp-content/uploads/2021/11/products-05.jpg |
| 377 | https://rolagra.dv/wp-content/uploads/2021/11/products-08.jpg |
| 378 | https://rolagra.dv/wp-content/uploads/2021/11/products-09.jpg |
| 379 | https://rolagra.dv/wp-content/uploads/2021/11/products-06.jpg |
| 380 | https://rolagra.dv/wp-content/uploads/2021/11/products-02.jpg |
| 381 | https://rolagra.dv/wp-content/uploads/2021/11/products-03.jpg |
| 454 | https://rolagra.dv/wp-content/uploads/2021/11/products-04.jpg |
+-----+---------------------------------------------------------------+
9 righe nel set (0.002 sec)
