Get lowest price bigger than 0 of a simple “instock” product for a specific product category in Woocommerce

General Tech Bugs & Fixes 2 years ago

0 2 0 0 0 tuteeHUB earn credit +10 pts

5 Star Rating 1 Rating

Posted on 16 Aug 2022, this text provides information on Bugs & Fixes related to General Tech. Please note that while accuracy is prioritized, the data presented might not be entirely correct or up-to-date. This information is offered for general knowledge and informational purposes only, and should not be considered as a substitute for professional advice.

Take Quiz To Earn Credits!

Turn Your Knowledge into Earnings.

tuteehub_quiz

Answers (2)

Post Answer
profilepic.png
manpreet Tuteehub forum best answer Best Answer 2 years ago

 

In WooCommerce I am trying to get the lowest price of an available (instock) simple product when the price is bigger than 0, for a defined product category…

I have this code that displays the lowest price:

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

But how to target "in stock" products with a price bigger than 0?

profilepic.png
manpreet 2 years ago

 

The following changed SQL query will get the lowest price, for a defined product category term id, for a product price bigger than 0 and for an "in stock" product:

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

Code goes in function.php file of your active child theme (or active theme). Tested and works.


0 views   0 shares

No matter what stage you're at in your education or career, TuteeHub will help you reach the next level that you're aiming for. Simply,Choose a subject/topic and get started in self-paced practice sessions to improve your knowledge and scores.