Получить продукт min_price by sku - PullRequest
0 голосов
/ 28 октября 2019

Мне нужно получить наименьшее значение min_price по sku для продукта 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'

Кстати. Я разрешаю несколько продуктов с одним и тем же номером:

add_filter('wc_product_has_unique_sku', '__return_false', PHP_INT_MAX);

1 Ответ

1 голос
/ 28 октября 2019

Чтобы отфильтровать запрос через post_status, нам сначала нужно найти значение в правильной таблице, которая является таблицей wp posts, мы можем сделать это, обновив наш SQL-запрос с помощью оператора JOIN и сопоставив коррелирующийзначения в нескольких таблицах, в этом случае мы сопоставляем product_id в таблице wp.posts с значением в таблице 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...