我需要按 sku 获取产品 post_type
和草稿 post_status
的 min_price
最小值。
function get_product_min_price_by_sku($sku) {
global $wpdb;
$min_price = $wpdb->get_var(
$wpdb->prepare("
SELECT MIN(min_price)
FROM {$wpdb->wc_product_meta_lookup}
WHERE sku = '$sku'
")
);
return $min_price;
}
如何向此函数添加帖子状态条件?
AND posts.post_status = 'draft'
顺便说一句。我允许多个产品具有相同的 sku:
add_filter('wc_product_has_unique_sku', '__return_false', PHP_INT_MAX);
最佳答案
为了通过 post_status
过滤查询,我们首先需要在正确的表(即 wp posts 表)中查找值,我们可以通过使用 JOIN 更新 SQL 查询来做到这一点语句并匹配多个表中的相关值,在本例中,我们将 wp.posts
表中的 product_id 与 wp.postmeta
表。
我们使用 JOIN 语句匹配的表:
- wp.posts
$wpdb->posts
- wp.postmeta
$wpdb->wc_product_meta_lookup
以下是更新的功能:
function get_product_min_price_by_sku( $sku ) {
global $wpdb;
$min_price = $wpdb->get_var(
$wpdb->prepare(
"
SELECT MIN(lookup.min_price)
FROM {$wpdb->wc_product_meta_lookup} AS lookup
INNER JOIN {$wpdb->posts} AS posts ON lookup.product_id = posts.id
WHERE
posts.post_type IN ( 'product', 'product_variation' )
AND posts.post_status = 'publish'
AND lookup.sku = '%s'
LIMIT 1
"
, $sku)
);
return $min_price;
}
关于php - 按 sku 获取产品 min_price,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58584070/