Показать самую низкую цену простого продукта на странице категории

Я хочу отображать самую низкую цену простого товара на странице content-oroduct_cat.php. Следующий код из Fancy Squares работает. для отображения самой низкой цены, но я хочу показывать только Простые товары, т. е. опускать сгруппированные товары.

/* SHOW LOWEST PRICE ON CATEGORY PAGE */
//woocommerce get lowest price in category
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));
}

Я пытался использовать:

AND {$wpdb->posts}.product_type = 'simple'

но это не сработало. Как бы я отображал только простые продукты?


person Renegade    schedule 04.05.2017    source источник


Ответы (1)


Ваш запрос не работает, потому что product_type не хранится в таблице posts, а хранится в таблице term_taxonomy. Чтобы получить желаемое, вам нужно использовать подзапрос, который выберет весь простой продукт, а основной запрос отфильтрует его по категориям.

Я изменил ваш wpq_get_min_price_per_product_cat(), как показано ниже.

function wh_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'
        AND {$wpdb->posts}.ID IN (SELECT posts.ID
                FROM {$wpdb->posts} AS posts
                INNER JOIN {$wpdb->term_relationships} AS term_relationships ON posts.ID = term_relationships.object_id
                INNER JOIN {$wpdb->term_taxonomy} AS term_taxonomy ON term_relationships.term_taxonomy_id = term_taxonomy.term_taxonomy_id
                INNER JOIN {$wpdb->terms} AS terms ON term_taxonomy.term_id = terms.term_id
                WHERE term_taxonomy.taxonomy = 'product_type'
                AND terms.slug = 'simple'
                AND posts.post_type = 'product')";
    return $wpdb->get_var($wpdb->prepare($sql, $term_id));
}

Код помещается в файл functions.php вашей активной дочерней темы (или темы). Или также в любых файлах php плагина.

ИСПОЛЬЗОВАНИЕ

echo wh_get_min_price_per_product_cat($cat_id);

Код протестирован и работает.

Ссылка: SQL-запрос для проверки product_type в WooCommerce

Надеюсь это поможет!

person Raunak Gupta    schedule 04.05.2017