Php 仅获取WooCommerce中产品查询的特定数据

Php 仅获取WooCommerce中产品查询的特定数据,php,sql,wordpress,woocommerce,product,Php,Sql,Wordpress,Woocommerce,Product,我正在尝试从WooCommerce获取阵列中的所有产品,稍后我将使用该阵列与外部数据库同步 在下面的代码中,我使用了wc\u get\u products()函数,该函数为每个产品返回非常大量的数据(我通常不需要这些数据): $args=array( “状态”=>“发布”, “限制”=>-1, ); $wooExistingProducts=wc\u get\u产品($args); 相反,我能做什么来只获取产品Id、产品名称和产品价格 对于每种产品,我希望有如下内容: [ { id: 3158

我正在尝试从WooCommerce获取阵列中的所有产品,稍后我将使用该阵列与外部数据库同步

在下面的代码中,我使用了
wc\u get\u products()
函数,该函数为每个产品返回非常大量的数据(我通常不需要这些数据):

$args=array(
“状态”=>“发布”,
“限制”=>-1,
);
$wooExistingProducts=wc\u get\u产品($args);
相反,我能做什么来只获取产品Id、产品名称和产品价格

对于每种产品,我希望有如下内容:

[
{
id: 315892135,
name: Food for Hamster
price: 5$
}
{
id: 129414,
name: ....
price:...
}
....
]

我尝试使用
WP\u查询
,但没有提供更好的解决方案。

实际上唯一可用的过滤器是
'return'=>'ids'
,在使用查询时仅获取产品ID

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

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

作者:


我不建议您在您的情况下使用
wc\u get\u products()
get\u posts()
(WP\u Query):

  • 您还将获得可变产品(根据其变化有多种价格)
  • 因为它更重(即使您只查询
    'id'
    字段,只获取产品id),因为您必须为每个产品设置数据,进行多个数据库查询

非常感谢Loic,非常感谢您的补充解释!
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')