为了账号安全,请及时绑定邮箱和手机立即绑定

在 WooCommerce 中仅获取有关产品查询的特定数据

在 WooCommerce 中仅获取有关产品查询的特定数据

PHP
慕的地6264312 2022-01-24 10:24:23
我正在尝试将 WooCommerce 中的所有产品放在一个数组中,稍后我将使用它与外部数据库同步。在下面的代码中,我使用的wc_get_products()函数为每个产品返回大量数据(我大部分不需要):$args = array('status' => 'publish','limit' => -1,);$wooExistingProducts = wc_get_products($args);相反,我能做些什么来只获取产品 ID、产品名称和产品价格?对于每种产品,我都希望有类似的东西:[{id: 315892135,name: Food for Hamsterprice: 5$}{id: 129414,name: ....price:...}....]我尝试使用 aWP_Query代替,但没有提供更好的解决方案。
查看完整描述

1 回答

?
阿波罗的战车

TA贡献1862条经验 获得超6个赞

实际上wc_get_products()唯一可用的过滤器是'return' => 'ids'在使用WC_Product_Query.


解决方案是使用带有 WordPress WPDB类的直接 SQL 查询,因为它是在产品查询中获取所需数据的更轻松、最有效的方法。


在以下查询中,我们必须排除可变产品,因为它们有多个价格(每个变体一个):


global $wpdb;


$products_query = $wpdb->get_results( "

    SELECT  p.ID AS id,

            p.post_title AS name,

            Max(CASE WHEN pm.meta_key = '_price' AND  p.ID = pm.post_id THEN pm.meta_value END) AS price

    FROM    {$wpdb->prefix}posts p

            INNER JOIN {$wpdb->prefix}postmeta pm

                ON p.ID = pm.post_id

    WHERE   p.post_type = 'product'

            AND p.post_status = 'publish'

            AND p.post_parent != 0

    GROUP BY p.ID

    ORDER BY p.ID ASC;

" );


// Testing raw output

echo '<pre>'; print_r( $products_query ); echo '</pre>'; 

包括产品变化 (选项):


如果要包含可变产品的产品变体,则应替换此行:


WHERE   p.post_type = 'product'

经过:


WHERE   p.post_type IN ('product','product_varation')

我不建议您在您的情况下使用wc_get_products()or get_posts() (WP_Query):


因为您还将获得可变产品(根据其变化具有多种价格)

因为它更重(即使您只查询'ids'字段,只获取产品 ID),因为您必须为每个产品设置数据,进行多个数据库查询。


查看完整回答
反对 回复 2022-01-24
  • 1 回答
  • 0 关注
  • 206 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信