How one can filter WooCommerce admin merchandise by on sale?

Though, Woocommerce permits you to filter your merchandise by class, by product kind and by inventory standing, it doesn’t mean you can filter out on sale merchandise. Subsequently, this snippet right here beneath permits you to filter WooCommerce admin merchandise by on sale. Right here is the top end result.

How to filter WooCommerce admin products by on sale?

How one can filter WooCommerce admin merchandise by on sale?

Now, there are two methods to insert this snippet right here beneath.

First choice: If you’re utilizing a toddler theme then go to Look >> Editor and open your childe theme’s features.php file and paste this code inside it. Then save and see whether or not it really works as promised.

Most popular methodology: I choose to not mess with my theme’s features.php file and subsequently I recommend you to put in a Code Snippets plugin. Now go to Snippets >> Add new and provides it a title. Subsequent, paste this code contained in the Code field, select “Solely run in administration space”. If that is performed, press on Save modifications and activate button.

<span function="button" tabindex="0" data-code="// Filter Woocommerce admin product by on sale

operate wpsh_onsale_filter($output) {
world $wp_query;
$chosen = filter_input(INPUT_GET, 'product_sale', FILTER_VALIDATE_INT);
if ($chosen == false) {
$chosen = 0;
}

$output .= '
<choose id="dropdown_product_sale" identify="product_sale">
<choice worth="">Filter by sale</choice>
<choice worth="1" ' . (($chosen === 1) ? 'chosen="chosen"' : '') . '>On sale</choice>
<choice worth="2" ' . (($chosen === 2) ? 'chosen="chosen"' : '') . '>Not on sale</choice>

// Filter Woocommerce admin product by on sale

operate wpsh_onsale_filter($output) {
    world $wp_query;
    $chosen = filter_input(INPUT_GET, 'product_sale', FILTER_VALIDATE_INT);
    if ($chosen == false) {
        $chosen = 0;
    }
    
    $output .= '
        <choose id="dropdown_product_sale" identify="product_sale">
            <choice worth="">Filter by sale</choice>
            <choice worth="1" ' . (($chosen === 1) ? 'chosen="chosen"' : '') . '>On sale</choice>
            <choice worth="2" ' . (($chosen === 2) ? 'chosen="chosen"' : '') . '>Not on sale</choice>
        </choose>
    ';
 
    return $output;
}
add_action('woocommerce_product_filters', 'wpsh_onsale_filter');
 
// Woocommerce Filter by on sale the place assertion

operate wpsh_onsale_filter_where_statement($the place) {
    world $wp_query, $wpdb;
 
    // Get chosen worth
    $chosen = filter_input(INPUT_GET, 'product_sale', FILTER_VALIDATE_INT);
    
    // Solely set off if required
    if (!is_admin() || get_query_var('post_type') != "product" || !$chosen) {
        return $the place;
    }
 
    $querystr = '
            SELECT p.ID, p.post_parent
            FROM ' . $wpdb->posts . ' p
            WHERE p.ID IN (
                SELECT post_id FROM ' . $wpdb->postmeta . ' pm WHERE pm.meta_key = "_sale_price" AND pm.meta_value > ''
            )
        ';
        
        $pageposts = $wpdb->get_results($querystr, OBJECT);
        
        $productsIDs = array_map(operate($n){
            return $n->post_parent > 0 ? $n->post_parent : $n->ID;
        }, $pageposts);

    if ($chosen == 1) {
        $the place .= ' AND ' . $wpdb->posts . '.ID IN (' . implode(",", $productsIDs) . ') ';
    } 
    elseif ($chosen == 2) {
        $the place .= ' AND ' . $wpdb->posts . '.ID NOT IN (' . implode(",", $productsIDs) . ') ';
    }
        
    return $the place;
}
add_filter('posts_where' , 'wpsh_onsale_filter_where_statement');

Leave a Comment

Your email address will not be published. Required fields are marked *

Shopping Cart
Scroll to Top