Php 仅获取WooCommerce中产品查询的特定数据
我正在尝试从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
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')