如何从数据库中获取某一品类的WooCommerce产品形象列表?

时间:2019-10-02 作者:ali

我正在尝试显示WC产品图像(缩略图),或者只是从数据库中获取该图像的url。但我似乎找不到存储url的列,其中包含以下内容。我希望查询能够选择特定类别的图像。我知道\\u wp\\u attached\\u file是元密钥,通过其关联的post ID,我可以获取图像路径,但不确定如何写入它。

select * from wp_posts where post_type = "product"
感谢所有帮助

2 个回复
最合适的回答,由SO网友:Jacob Peattie 整理而成

帖子缩略图未存储为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\' );

SO网友:DevWL

@JacobPeattie已经为您提供了在wordpress中获取WP路径的正确方法wc_get_product(..)->get_iamge 方法

但是,可以这样构造查询,以获取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 rows in set (0.002 sec)