Как получить список изображений товаров WooCommerce определенной категории из базы данных?
Я пытаюсь отобразить миниатюры товаров WooCommerce или просто получить URL этих изображений из базы данных. Но я не могу найти столбец, в котором хранятся URL, используя следующий запрос. Одним из условий моего запроса должна быть возможность выбора изображений определенной категории. Я знаю, что _wp_attached_file - это meta_key, и через связанный ID поста я могу получить путь к изображению, но не уверен, как правильно написать запрос.
select * from wp_posts where post_type = "product"
Буду благодарен за любую помощь
Миниатюра записи хранится не в виде URL. Миниатюра записи хранится как ID вложения в метаполе записи _thumbnail_id
. Сам файл хранится как метаполе _wp_attached_file
для этого вложения. WordPress не сохраняет полный URL вложений в базе данных. Он сохраняет только путь к файлу, относительно директории загрузок.
Этот запрос выведет список ID товаров и пути к их файлам миниатюр. Затем вам нужно будет добавить их к URL вашей директории загрузок:
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'
Так как URL сайта и директория загрузок динамичны и могут контролироваться через PHP, нет смысла хранить полный URL. WordPress использует PHP для определения URL файла на основе конфигурации сайта и относительного пути к файлу. Также нет смысла хранить URL, потому что для некоторых операций требуется путь, а не URL.
Также обратите внимание, что единственная причина использовать SQL для этого - если вы получаете доступ к путям файлов вне WordPress и не используете REST API. Если вы работаете внутри шаблона WordPress/WooCommerce, то правильный способ отображения изображения товара:
$product = wc_get_product( $product_id );
echo $product->get_image( 'full' );

@JacobPeattie уже предоставил вам правильный способ получения пути к изображению в WordPress с использованием wc_get_product(..)
и метода ->get_image
.
Однако можно построить запрос таким образом, чтобы получить полный путь к URL, например:
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
Результат выполнения:
+-----+---------------------------------------------------------------+
| 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 строк в наборе (0.002 сек)
