1
votes

In woocommerce I am using the code from this answer thread that assign a "Sale" product category to a product that is on sale (so with an active sale price).

I have tried to remove "Sale" product category when the product is not on sale anymore without success. Is it possible to automatically remove products from the "Sale" category when they are not anymore on sale?

1
everything is possible, it's simply a mater of how much pain and frustration it will take to do it.ArtisticPhoenix

1 Answers

3
votes

The following version code will automatically remove products from the "Sale" category when they are not anymore on sale:

add_action( 'save_post_product', 'update_product_set_sale_cat' );
function update_product_set_sale_cat( $post_id ) {
    if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
        return $post_id;
    }
    if ( ! current_user_can( 'edit_product', $post_id ) ) {
        return $post_id;
    }
    if( get_post_status( $post_id ) == 'publish' && isset($_POST['_sale_price']) ) {
        $sale_price = $_POST['_sale_price'];

        if( $sale_price >= 0 && ! has_term( 'Sale', 'product_cat', $post_id ) ){
            wp_set_object_terms($post_id, 'sale', 'product_cat', true );
        } elseif ( $sale_price == '' && has_term( 'Sale', 'product_cat', $post_id ) ) {
            wp_remove_object_terms( $post_id, 'sale', 'product_cat' );
        }
    }
}

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

Related: Adding "Sale" product category to products that are on sale in Woocommerce