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),因为您必须为每个产品设置数据,进行多个数据库查询。
- 1 回答
- 0 关注
- 206 浏览
添加回答
举报