Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

StackOverflow

StackOverflow Logo StackOverflow Logo

StackOverflow Navigation

Search
Ask A Question

Mobile menu

Close
Ask A Question
  • Home
  • Add group
  • Feed
  • User Profile
  • Communities
  • Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
Home/ Questions/Q 746
Next

StackOverflow Latest Questions

Saralyn
  • 0
  • 0
SaralynBegginer
Asked: April 29, 20252025-04-29T23:43:09+00:00 2025-04-29T23:43:09+00:00In: PHP

php – Woocommerce add free product if there are other products in the cart. Scrollbar disappearance problem if the free product is not already present

  • 0
  • 0
php – Woocommerce add free product if there are other products in the cart. Scrollbar disappearance problem if the free product is not already present

This question already has answers here:

Closed 6 days ago.

This script reads the cart, sees if the two products are present and adds another one different from the others.
The addition of the quantity of the new product depends on the quantities of the others.

This script seems to work but the page loading suffers a display problem, as the scrollbar disappears and it is therefore not possible to navigate well, if the free product is added by the add_to_cart script

add_action( 'template_redirect', 'pro_gift', 9);
function pro_gift() {
    if (is_cart()) {
        if ( sizeof( WC()->cart->get_cart() ) > 0) {
            $items_gift = WC()->cart->get_cart();
            $product_id = 33103;
            $product_ids = 33093;
            $product_id_gift = 34462;
            $product_id_size = 0;
            $product_ids_size = 0;
            $product_id_gift_size = 0;
            $product_id_gift_item = '';
            foreach($items_gift as $item_gift_k => $item_gift_v) { 
                if ($item_gift_v['product_id'] == $product_id ) {
                    $product_id_size = $item_gift_v['quantity'];
                }
                if ($item_gift_v['product_id'] == $product_ids ) {
                    $product_ids_size = $item_gift_v['quantity'];
                }
                if ($item_gift_v['product_id'] == $product_id_gift ) {
                    $product_id_gift_size = $item_gift_v['quantity'];
                    $product_id_gift_item = $item_gift_k;
                }
            }
            //echo '';
            if ($product_id_size > 0 && $product_ids_size > 0) {
                $product_gift = min($product_id_size, $product_ids_size);
                if ($product_gift > 0 && $product_id_gift_size == 0) {
                    WC()->cart->add_to_cart( $product_id_gift, $product_gift);
                }
                elseif ($product_gift > 0 && $product_id_gift_size > 0 && $product_id_gift_size < $product_gift) {
                    WC()->cart->set_quantity($product_id_gift_item, $product_gift);
                }
            }
        }
    }
}

In addition to the script above I then go to make the new products added free based on the quantity of those requested

add_action( 'woocommerce_cart_calculate_fees', 'pro_gift_d', 10 );
function pro_gift_d() {
    if (is_cart() || is_checkout()) {
        if ( sizeof( WC()->cart->get_cart() ) > 0) {
            $items_gift = WC()->cart->get_cart();
            $product_id = 33103;
            $product_ids = 33093;
            $product_id_gift = 34462;
            $product_id_size = 0;
            $product_ids_size = 0;
            $product_id_gift_size = 0;
            $product_gift_line = 0;
            foreach($items_gift as $item_gift_k => $item_gift_v) {
                if ($item_gift_v['product_id'] == $product_id ) {
                    $product_id_size = $item_gift_v['quantity'];
                }
                if ($item_gift_v['product_id'] == $product_ids ) {
                    $product_ids_size = $item_gift_v['quantity'];
                }
                if ($item_gift_v['product_id'] == $product_id_gift ) {
                    $product_id_gift_size = $item_gift_v['quantity'];
                    $product_gift_line = $item_gift_v['line_total'] / $product_id_gift_size;
                }
            }
            if ($product_id_size > 0 && $product_ids_size > 0 && $product_id_gift_size > 0) {
                $product_gift = min($product_id_size, $product_ids_size);
                $product_gift_discount = $product_gift_line * $product_gift;
                WC()->cart->add_fee( __('PROMO PRODOTTO GRATUITO', 'woocommerce'), -$product_gift_discount);
            }
        }
    }
}

These scripts seem to work well, it adds a product to the cart if there are two other products and it does so based on their quantity. But as already said, if the free product is not already present in the cart and therefore it is added with this part of the script “WC()->cart->add_to_cart( $product_id_gift, $product_gift);”, the scrollbar disappears and it is not possible to navigate.

What did I do wrong? And how could the code be improved?

0
  • 0 0 Answers
  • 43 Views
  • 0 Followers
  • 0
Answer
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

Sidebar

Ask A Question
  • Popular
  • Answers
  • W3spoint99

    What is Physics? Definition, History, Importance, Scope (Class 11)

    • 1 Answer
  • W3spoint99

    The Living World – Introduction, Classification, Characteristics, FAQs (Class 11 ...

    • 1 Answer
  • W3spoint99

    Explain - Biological Classification (Class 11 - Biology)

    • 1 Answer
  • Saralyn
    Saralyn added an answer When Humans look at their childhood pictures, the first thing… January 17, 2025 at 3:25 pm
  • Saralyn
    Saralyn added an answer Previously, length was measured using units such as the length… January 17, 2025 at 3:25 pm
  • Saralyn
    Saralyn added an answer Measurement forms the fundamental principle to various other branches of… January 17, 2025 at 3:25 pm

Related Questions

  • Reading fancy apostrophe PHP [duplicate]

    • 0 Answers
  • Unable to send mail via PHPMailer [SMTP->Error: Password not accepted ...

    • 0 Answers
  • Concerns when migrating from PHP 5.6 to 8.4 [closed]

    • 0 Answers
  • Laravel Auth::attempt() error: "Unknown column 'password'" when using a custom ...

    • 0 Answers
  • Core PHP cURL - header origin pass null value

    • 0 Answers

Trending Tags

biology class 11 forces how physics relates to other sciences interdisciplinary science learn mathematics math sets tutorial null sets physics physics and astronomy physics and biology physics and chemistry physics applications science science connections science education sets in mathematics set theory basics types of sets types of sets explained

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help

Footer

  • About US
  • Privacy Policy
  • Questions
  • Recent Questions
  • Web Stories

© 2025 WikiQuora.Com. All Rights Reserved

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.