php - 在 Woocommerce 中为特定产品类别获取大于 0 的简单“库存”产品的最低价格
问题描述
在 WooCommerce 中,当价格大于 0 时,对于定义的产品类别,我试图获得可用(库存)简单产品的最低价格......</p>
我有显示最低价格的代码:
function wpq_get_min_price_per_product_cat($term_id){
global $wpdb;
$sql = "
SELECT MIN( meta_value+0 ) as minprice
FROM {$wpdb->posts}
INNER JOIN {$wpdb->term_relationships} ON ({$wpdb->posts}.ID = {$wpdb->term_relationships}.object_id)
INNER JOIN {$wpdb->postmeta} ON ({$wpdb->posts}.ID = {$wpdb->postmeta}.post_id)
WHERE
( {$wpdb->term_relationships}.term_taxonomy_id IN (%d) )
AND {$wpdb->posts}.post_type = 'product'
AND {$wpdb->posts}.post_status = 'publish'
AND {$wpdb->postmeta}.meta_key = '_price'
";
return $wpdb->get_var($wpdb->prepare($sql, $term_id));
}
但是如何定位价格大于 0 的“有货”产品呢?
解决方案
以下更改后的 SQL 查询将为定义的产品类别术语 ID、大于 0 的产品价格和“有货”产品获取最低价格:
function wpq_get_min_price_per_product_cat( $term_id ){
global $wpdb;
return $wpdb->get_var( $wpdb->prepare("
SELECT MIN(pm.meta_value+0)
FROM {$wpdb->prefix}posts as p
INNER JOIN {$wpdb->prefix}postmeta as pm
ON p.ID = pm.post_id
INNER JOIN {$wpdb->prefix}postmeta as pm2
ON p.ID = pm2.post_id
INNER JOIN {$wpdb->prefix}term_relationships as tr
ON p.ID = tr.object_id
INNER JOIN {$wpdb->prefix}term_taxonomy as tt
ON tr.term_taxonomy_id = tt.term_taxonomy_id
WHERE tt.taxonomy = 'product_cat'
AND tt.term_id = %d
AND p.post_type = 'product'
AND p.post_status = 'publish'
AND pm.meta_key = '_price'
AND pm.meta_value > 0
AND pm2.meta_key = '_stock_status'
AND pm2.meta_value = 'instock'
", $term_id) );
}
代码位于您的活动子主题(或活动主题)的 function.php 文件中。测试和工作。
推荐阅读
- javascript - javascript事件不适用于循环
- react-native - 我的 React 本机按钮文本没有出现在 iOS 中,但在 android 中可以正常工作
- html - CSS - 溢出-y:滚动;不能滚动并获得> 100%的块高度
- aws-lambda - 如何从本地锅炉模板创建无服务器模板
- firebase - Flutter - Firebase Analytics 依赖错误
- azure - ARM 输出任务在输出变量中添加“25”个字符
- javascript - React - 错误:目标容器不是 DOM 元素
- azure-pipelines - 如何通过 Azure DevOps (yml) 打包预发布的 nuget 包?
- express - 如何修复错误-> NetworkingError:读取 ECONNRESET 并在将标头发送到客户端后无法设置标头
- azure - Azure DevOps,由于 AD 权限不足,无法创建管道