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

我正在尝试将 WooCommerce 中的所有产品放在一个数组中,稍后我将使用它与外部数据库同步。


在下面的代码中,我使用的wc_get_products()函数为每个产品返回大量数据(我大部分不需要):


$args = array(

'status' => 'publish',

'limit' => -1,

);

$wooExistingProducts = wc_get_products($args);

相反,我能做些什么来只获取产品 ID、产品名称和产品价格?


对于每种产品,我都希望有类似的东西:


[

{

id: 315892135,

name: Food for Hamster

price: 5$

}

{

id: 129414,

name: ....

price:...

}

....

]

我尝试使用 aWP_Query代替,但没有提供更好的解决方案。


慕的地6264312
浏览 265回答 1
1回答

阿波罗的战车

实际上wc_get_products()唯一可用的过滤器是'return' => 'ids'在使用WC_Product_Query.解决方案是使用带有 WordPress WPDB类的直接 SQL 查询,因为它是在产品查询中获取所需数据的更轻松、最有效的方法。在以下查询中,我们必须排除可变产品,因为它们有多个价格(每个变体一个):global $wpdb;$products_query = $wpdb->get_results( "&nbsp; &nbsp; SELECT&nbsp; p.ID AS id,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; p.post_title AS name,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Max(CASE WHEN pm.meta_key = '_price' AND&nbsp; p.ID = pm.post_id THEN pm.meta_value END) AS price&nbsp; &nbsp; FROM&nbsp; &nbsp; {$wpdb->prefix}posts p&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; INNER JOIN {$wpdb->prefix}postmeta pm&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ON p.ID = pm.post_id&nbsp; &nbsp; WHERE&nbsp; &nbsp;p.post_type = 'product'&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; AND p.post_status = 'publish'&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; AND p.post_parent != 0&nbsp; &nbsp; GROUP BY p.ID&nbsp; &nbsp; ORDER BY p.ID ASC;" );// Testing raw outputecho '<pre>'; print_r( $products_query ); echo '</pre>';&nbsp;包括产品变化 (选项):如果要包含可变产品的产品变体,则应替换此行:WHERE&nbsp; &nbsp;p.post_type = 'product'经过:WHERE&nbsp; &nbsp;p.post_type IN ('product','product_varation')我不建议您在您的情况下使用wc_get_products()or get_posts() (WP_Query):因为您还将获得可变产品(根据其变化具有多种价格)因为它更重(即使您只查询'ids'字段,只获取产品 ID),因为您必须为每个产品设置数据,进行多个数据库查询。
打开App,查看更多内容
随时随地看视频慕课网APP