通过SKU获取产品min_price

时间:2019-10-27 22:57:44

标签: php mysql wordpress woocommerce

我需要通过sku获得产品min_price和草稿post_type的最小值post_status

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);

1 个答案:

答案 0 :(得分:1)

为了通过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;
}