Come ottenere l'elenco delle immagini dei prodotti WooCommerce di una determinata categoria dal database?

2 ott 2019, 08:02:27
Visualizzazioni: 13.7K
Voti: 4

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

4
Commenti

Gli URL delle immagini non sono memorizzati nel database.

Jacob Peattie Jacob Peattie
2 ott 2019 08:39:40

Allora cosa c'è dentro wp_postmeta dove meta_key è _wp_attached_file?

ali ali
2 ott 2019 09:21:31

Non è un URL. È il percorso, relativo alla directory dei contenuti, che è definito in PHP. Se sai qual è l'URL della directory dei contenuti, cosa che probabilmente sai, puoi manualmente aggiungere il percorso a quell'URL, ma non puoi interrogare il database per ottenere un URL completo di un file.

Jacob Peattie Jacob Peattie
2 ott 2019 09:26:34

Notato, l'ho cambiato in path per renderlo più chiaro. Grazie. Sono sicuro che qualunque cosa restituisca la query seguente dovrei aggiungere una funzione php per ottenere la parte iniziale come hai detto, sai per caso qual è?

ali ali
3 ott 2019 00:04:31
Tutte le risposte alla domanda 2
0

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' );
2 ott 2019 10:54:51
0

@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)                                            
15 gen 2022 19:39:47