Okay
  Public Ticket #2574251
Disable calculate price on product page
Closed

Comments

  • lukasznosek started the conversation

    Welcome,

    I need to disable the price conversion option by selecting the appropriate product quantity on the product page. At this point, I have the minimum number of items set to 36 and I want the product price not to change / recalculate regardless of how many items I choose.

    Best Regrats

  •  2,965
    Andrew replied

    Hi There,

    Thank you for contacting us.

    Paste the code below in the theme functions.php:

    // Custom line item Total/Subtotal price display
    add_filter( 'woocommerce_cart_product_subtotal', 'custom_cart_subtotal', 10, 4 );
    function custom_cart_subtotal( $product_subtotal, $product, $quantity, $wc_cart ) {    $price   = $product->get_price();    $taxable = $product->is_taxable();    $quantity = 1; // HERE We set the quantity to 1 (So the price is calculated on a quantitity of 1)
        // Taxable    if ( $taxable ) {        if ( 'excl' === $wc_cart->tax_display_cart ) {            $row_price        = wc_get_price_excluding_tax( $product, array( 'qty' => $quantity ) );            $product_subtotal = wc_price( $row_price );
                if ( $wc_cart->prices_include_tax && $wc_cart->tax_total > 0 ) {                $product_subtotal .= ' <small class="tax_label">' . WC()->countries->ex_tax_or_vat() . '</small>';            }        } else {            $row_price        = wc_get_price_including_tax( $product, array( 'qty' => $quantity ) );            $product_subtotal = wc_price( $row_price );
                if ( ! $wc_cart->prices_include_tax && $wc_cart->tax_total > 0 ) {                $product_subtotal .= ' <small class="tax_label">' . WC()->countries->inc_tax_or_vat() . '</small>';            }        }
        } // Non-taxable    else {        $row_price        = $price * $quantity;        $product_subtotal = wc_price( $row_price );    }    return $product_subtotal;
    }
    // Custom cart subtotal and totals (Prices calculated on quatity = 1)
    add_action( 'woocommerce_calculate_totals', 'custom_item_price', 10, 1);
    function custom_item_price( $wc_cart ) {    if ( is_admin() && ! defined( 'DOING_AJAX' ) ) return;
        $cart_contents_total = 0;
        foreach ( $wc_cart->get_cart() as $cart_item_key => $cart_item )        $cart_contents_total += floatval( strip_tags( $wc_cart->get_product_subtotal( $cart_item['data'], 1 ) ) );
        $wc_cart->subtotal = $cart_contents_total;    $wc_cart->subtotal_ex_tax = $cart_contents_total;    $wc_cart->cart_contents_total = $cart_contents_total;
    }
    // Custom cart subtotal and totals (Prices calculated on quatity = 1)
    add_action( 'woocommerce_cart_get_taxes', 'custom_cart_get_taxes', 10, 2);
    function custom_cart_get_taxes( $taxes, $wc_cart ) {    if ( is_admin() && ! defined( 'DOING_AJAX' ) ) return;
        $taxes = $subtotal_taxes = array();
        foreach ( $wc_cart->get_cart() as $cart_item_key => $cart_item ){        foreach( $cart_item['line_tax_data']['subtotal'] as $key => $tax_price ){            if( $tax_price > 0 ){                if( array_key_exists($key, $subtotal_taxes))                    $subtotal_taxes[$key] += number_format( $tax_price / $cart_item['quantity'], 2 );                else                    $subtotal_taxes[$key] = number_format( $tax_price / $cart_item['quantity'], 2 );            } else {                if( array_key_exists($key, $subtotal_taxes))                    $subtotal_taxes[$key] += $tax_price;                else                    $subtotal_taxes[$key] = $tax_price;            }        }    }    foreach ( array_keys( $subtotal_taxes + $wc_cart->get_shipping_taxes() ) as $key ) {        $taxes[ $key ] = ( isset( $wc_cart->get_shipping_taxes()[ $key ] ) ? $wc_cart->get_shipping_taxes()[ $key ] : 0 ) + ( isset( $subtotal_taxes[ $key ] ) ? $subtotal_taxes[ $key ] : 0 );    }    return $taxes;
    }
    // Custom line item Total/Subtotal set order prices (Prices calculated on quatity = 1)
    add_action( 'woocommerce_checkout_create_order_line_item', 'custom_checkout_create_order_line_item', 10, 4  );
    function custom_checkout_create_order_line_item( $item, $cart_item_key, $values, $order ){
        $line_tax_data = array();    foreach( $values['line_tax_data'] as $key_line => $tax ){        foreach( $tax as $key => $tax_price ){            if( $tax_price > 0 )                $line_tax_data[$key_line] = array( $key => number_format( $tax_price / $values['quantity'], 2 ) );            else                $line_tax_data[$key_line] = array( $key => $tax_price );        }    }
        $item->set_props( array(        'quantity'     => $values['quantity'],        'variation'    => $values['variation'],        'subtotal'     => number_format( $values['line_subtotal'] / $values['quantity'], 2 ),        'total'        => number_format( $values['line_total'] / $values['quantity'], 2 ),        'subtotal_tax' => number_format( $values['line_subtotal_tax'] / $values['quantity'], 2 ),        'total_tax'    => number_format( $values['line_tax'] / $values['quantity'], 2 ),        'taxes'        => $line_tax_data,    ) );
    }
    // Get the correct Cart gran total amount
    add_filter( 'woocommerce_calculated_total', 'custom_calculated_total', 10, 2 );
    function custom_calculated_total( $price_total, $wc_cart ){    $tax_total = 0;    $taxes_arr = $wc_cart->get_taxes();    foreach($taxes_arr as $tax)        $tax_total += $tax;    return round( $wc_cart->cart_contents_total + $tax_total + $wc_cart->shipping_total + $wc_cart->fee_total, $wc_cart->dp );
    }
    // Replacing the total tax amount
    add_action( 'woocommerce_checkout_create_order', 'custom_set_order_tax_total', 10, 1 );
    function custom_set_order_tax_total( $order ) {    $subtotal_taxes = 0;
        foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ){        foreach( $cart_item['line_tax_data']['subtotal'] as $key => $tax_price ){            if( $tax_price > 0 ){                $subtotal_taxes += number_format( $tax_price / $cart_item['quantity'], 2 );            } else {                $subtotal_taxes += $tax_price;            }        }    }    $order->set_cart_tax( $subtotal_taxes );
    }
    // Update order line item tax total
    add_action( 'woocommerce_checkout_update_order_meta', 'custom_update_order_item_tax_total', 10, 1 );
    function custom_update_order_item_tax_total( $order_id ) {
        global $wpdb;    $query = $wpdb->get_results( "        SELECT woim.meta_id, woim.order_item_id as item_id, woi.order_item_type as type, woim.meta_key as akey, woim.meta_value as value        FROM {$wpdb->prefix}woocommerce_order_items AS woi        INNER JOIN {$wpdb->prefix}woocommerce_order_itemmeta AS woim ON woi.order_item_id = woim.order_item_id        WHERE woi.order_id = $order_id        AND woim.meta_key IN ( 'tax_amount', '_line_tax_data', 'rate_id' )    " );
        $taxes = $items = array();    foreach( $query as $result){        if( $result->type == 'line_item' ){            $result_taxes = maybe_unserialize( $result->value );            foreach( $result_taxes['subtotal'] as $tax_id => $tax_price )                $taxes[$tax_id] = $tax_price;        } elseif( $result->type == 'tax' && $result->akey == 'rate_id' ) {            $items[$result->item_id] = array(                'price' => $taxes[$result->value],                'rate_id' => $result->value            );        } else {            $items[$result->item_id]['meta_id'] = $result->meta_id;        }    }    foreach($items as $item_id => $values){        wc_update_order_item_meta( $item_id, 'tax_amount', $values['price'] );    }
    }

    Hope this helps.

    Kind Regards

  • lukasznosek replied

    I hva this problem on screenshot:

  •  2,965
    Andrew replied

    Hi There,

    Thank you for reaching out.

    Please send me your login credentials with admin privileges so that I can look into the issue further.

    Kind Regards.