Cum să obții lista imaginilor produselor WooCommerce dintr-o anumită categorie din baza de date?
Încerc să afișez miniaturile imaginilor produselor WooCommerce sau doar să obțin URL-ul acestor imagini din baza de date. Dar nu reușesc să găsesc coloana unde sunt stocate URL-urile cu următoarea interogare. Un lucru pe care doresc să-l includ în interogarea mea este posibilitatea de a selecta imaginile dintr-o anumită categorie. Știu că _wp_attached_file este cheia meta și prin ID-ul postului asociat pot obține calea imaginii, dar nu sunt sigur cum să o scriu.
select * from wp_posts where post_type = "product"
Orice ajutor este apreciat.
Miniatura postării nu este stocată ca un URL. Miniatura postării este stocată ca ID-ul atașamentului în metadatele postului _thumbnail_id
. Fișierul real este stocat ca metadatele postului _wp_attached_file
pentru acel atașament. WordPress nu stochează URL-ul complet al atașamentelor în baza de date. Stochează doar calea către fișier, relativă la directorul de încărcări.
Această interogare va lista ID-urile produselor și calea către fișierele lor de miniatură. Va trebui apoi să adăugați aceste căi la URL-ul directorului dvs. de încărcări:
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'
Deoarece URL-ul site-ului și directorul de încărcări sunt dinamice și pot fi controlate prin PHP, nu are sens să stocați URL-ul complet. WordPress folosește PHP pentru a determina care este URL-ul către fișier, pe baza configurației site-ului și a căii relative către fișier. De asemenea, nu are sens să stocați URL-ul, deoarece unele operații necesită calea, nu URL-ul.
De asemenea, rețineți că singurul motiv pentru care ați face acest lucru cu SQL este dacă ați accesa căile fișierelor în afara WordPress, fără a utiliza REST API. Dacă vă aflați într-un șablon WordPress/WooCommerce, atunci modul corect de a afișa imaginea produsului este:
$product = wc_get_product( $product_id );
echo $product->get_image( 'full' );

@JacobPeattie ți-a oferit deja metoda corectă de a obține calea WP în WordPress folosind wc_get_product(..)
și metoda ->get_image
.
Totuși, este posibil să construiești o interogare pentru a obține calea completă către URL astfel:
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
Rezultate:
+-----+---------------------------------------------------------------+
| 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 rânduri în set (0.002 sec)
