Cum să obții lista imaginilor produselor WooCommerce dintr-o anumită categorie din baza de date?

2 oct. 2019, 08:02:27
Vizualizări: 13.7K
Voturi: 4

Î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.

4
Comentarii

URL-urile imaginilor nu sunt stocate în baza de date.

Jacob Peattie Jacob Peattie
2 oct. 2019 08:39:40

Atunci ce se află în wp_postmeta unde meta_key este _wp_attached_file?

ali ali
2 oct. 2019 09:21:31

Nu este un URL. Este calea, relativă la directorul de conținut, care este definită în PHP. Dacă știi care este URL-ul către directorul de conținut, ceea ce probabil știi, poți manual să adaugi calea la acel URL, dar nu poți interoga baza de date pentru un URL complet către un fișier.

Jacob Peattie Jacob Peattie
2 oct. 2019 09:26:34

Notat, am schimbat în path pentru a fi mai clar. Mulțumesc. Sunt sigur că orice returnează următoarea interogare, ar trebui să adaug o funcție PHP pentru a obține partea inițială a acesteia, așa cum ai menționat. Știi cumva care ar fi aceasta?

ali ali
3 oct. 2019 00:04:31
Toate răspunsurile la întrebare 2
0

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

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