ভুকোমর্স: কার্টে অ্যাড করার বোতামটি ক্লিক করা হয়েছিল এবং সনাক্ত করে বিভিন্ন কোড চালনা করুন


10

ইকমার্স দোকানে:

  • হোমপেজে প্রদর্শিত আইটেম রয়েছে এবং প্রতিটি আইটেমের নীচে একটি "কার্টে যুক্ত করুন" বোতাম রয়েছে। এই বোতামটি ক্লিক করা হলে আইটেমটি কার্টে যুক্ত করা হয়। যদি এই বোতামটি আবার ক্লিক করা হয়, তবে ইতিমধ্যে কার্টে বিদ্যমান আইটেমটির পরিমাণ 1 দ্বারা বৃদ্ধি পেয়েছে I আমি বিশ্বাস করি এটি লুপ । এ পর্যন্ত সব ঠিকই.

  • একক পণ্য পৃষ্ঠাতে একটি "কার্টে যুক্ত করুন" বোতাম রয়েছে। এই বোতামটি ক্লিক করা হলে আইটেমটি কার্টে যুক্ত হয়। একটি পরিমাণ ইনপুট পাঠ্যবক্সও রয়েছে যা পরিমাণ পরিবর্তন করতে ব্যবহার করা যেতে পারে। এটাও ঠিক আছে।

সমস্যাটি:

আমাকে "কার্টে যুক্ত করুন" বোতামের মধ্যে পার্থক্য করতে হবে যা লুপের মধ্যে ক্লিক করা হয়েছিল (বর্তমানে হোমপেজে, তবে অন্যান্য পৃষ্ঠায় যেমন আর্কাইভ পৃষ্ঠা ইত্যাদিতেও ব্যবহার করা যেতে পারে) ক্লিক করা "কার্টে যুক্ত করুন" বোতামটি বনাম একক পণ্য পৃষ্ঠাতে। এই পার্থক্যের ভিত্তিতে, আমার যা করা দরকার তা এখানে:

  • যদি "যোগ করুন কার্ট থেকে" লুপ মধ্যে প্রকাশমান বোতাম ক্লিক করা হয়েছিল, দখল পরিমাণ এই যে আইটেমের ইতিমধ্যে কার্ট বিদ্যমান ব্যবহারের $cart_item_key, 1 দ্বারা এটি বাড়ায় এবং যে অতিরিক্ত প্রক্রিয়াকরণ কি করতে হবে একটি কাস্টম ফাংশন এবং বিবরণ সংরক্ষণ করুন এই পাঠাতে আবার কার্টে
  • যদি একক পণ্য পৃষ্ঠাতে উপস্থিত "কার্টে যুক্ত করুন" বোতামটি ক্লিক করা হয়, তবে কার্টটিতে ইতিমধ্যে বিদ্যমান এই আইটেমটির পরিমাণটি ধরুন, $cart_item_keyএটি 3 দ্বারা গুণ করুন এবং এটি একটি কাস্টম ফাংশনে প্রেরণ করুন যা অতিরিক্ত প্রক্রিয়াকরণ করবে এবং সংরক্ষণ করবে আবার কার্টে বিশদ।
  • উপরের দুটি ক্ষেত্রেই, বিভিন্ন লজিকের উপর ভিত্তি করে পরিমাণ পরিবর্তন করা হচ্ছে এবং এই পরিমাণটি একটি কাস্টম ফাংশন কলে প্রেরণ করা দরকার।

আমি যা চেষ্টা করেছি:

আমি নিম্নলিখিত কোড চেষ্টা করেছিলাম:

add_action('woocommerce_add_to_cart', 'custom_action_add_to_cart', 20, 6);
function custom_action_add_to_cart($cart_item_key, $product_id, $quantity, $variation_id, $variation, $cart_item_data)
{

    $cart = WC()->cart->get_cart();    

    $product = wc_get_product($product_id);

    // NEED TO RUN CUSTOM CODE HERE BASED ON THE CHECKS
    if (add to cart within loop is clicked) {
        // Get existing $quantity_from_cart from cart using $cart_item_key, but how???? 
        $new_quantity = $quantity_from_cart + 1;
    }
    else if (add to cart on single product page is clicked) {
        // Get existing $quantity_from_cart from cart using $cart_item_key, but how????
        $new_quantity = $quantity_from_cart * 3;
    }
    // Need to send the $new_quantity along with the $cart_item_key to the custom function so that the data can be saved using $cart_item_key
    my_custom_function($new_quantity, $cart_item_key);
}


function my_custom_function($new_quantity, $cart_item_key)
{
    echo $new_quantity;

    WC()->cart->cart_contents[$cart_item_key]['custom_quantity'] = $new_quantity;
    WC()->cart->set_session();
}

উপরের কোডটি সহ সমস্যাটি হ'ল এটি যদি আমার কাছে if... else if...যুক্তি না থাকে তবে "কার্টে অ্যাড করুন" বোতামটি কোথায় অবস্থিত তা বিবেচনা না করেই কোডটি কার্যকর করা হয়। অন্য কথায়, আমি লুপ (হোমপেজ, সংরক্ষণাগার পৃষ্ঠা বা লুপ ব্যবহার করে এমন কোনও পৃষ্ঠা) অবস্থিত "কার্টে যুক্ত করুন" বোতামটি ক্লিক করি বা আমি একক পণ্য পৃষ্ঠাতে অবস্থিত "কার্টে যুক্ত করুন" বোতামটি ক্লিক করি, উপরের কোডটি if... else if...যুক্তির অভাবে কার্যকর করা হয় gets

সুতরাং, লুপটিতে থাকা "কার্টে যুক্ত করুন" বোতামটি ক্লিক করা হলে (হোমপেজ, সংরক্ষণাগারগুলি ইত্যাদি নির্বিশেষে) ক্লিক করার পরে এবং "কার্টে যুক্ত করুন" বোতামটি ব্যবহার করার সময় আলাদা কোড চালাতে চাই separate যে একক পণ্য পৃষ্ঠাতে অবস্থিত ক্লিক করা হয়। আমি কীভাবে এটি অর্জন করতে পারি?

এরকম কিছু আশা করা:

  • লুপের ভিতরে উপস্থিত বোতামটি ক্লিক করা হলে -> এটি করুন।
  • যদি একক পণ্য পৃষ্ঠাতে উপস্থিত বোতামটি ক্লিক করা হয় -> এটি করুন।

উত্তর:


1

আপনি উদাহরণস্বরূপ wp_get_referer বা চেক_জ্যাক্স_রেফারার () ব্যবহার করতে পারেন :

function custom_action_add_to_cart($cart_item_key, $product_id, $quantity, $variation_id, $variation, $cart_item_data)
{

    $cart = WC()->cart->get_cart();    

    $product = wc_get_product($product_id);
    $referer = wp_get_referer();
    // HOMEPAGE
    if (strpos($referer ,'http://yourwebsite.com/') !== false) { 
        $new_quantity = $quantity_from_cart + 1;
    }
    //from some product page like http://yourwebsite.com/product/my-product-page
    else if (strpos($referer ,'http://yourwebsite.com/product/') !== false) {
        $new_quantity = $quantity_from_cart * 3;
    }
    // Need to send the $new_quantity along with the $cart_item_key to the custom function so that the data can be saved using $cart_item_key
    my_custom_function($new_quantity, $cart_item_key);
}

দয়া করে উল্লেখ করুন: ওয়ার্ডপ্রেস নোনেস সম্পর্কিত ফাংশন


হোমপৃষ্ঠা, পণ্য পৃষ্ঠা ইত্যাদির জন্য ম্যানুয়াল চেকগুলি ওভারকিল। আমি পৃষ্ঠার নামগুলি হার্ডকোড না করার চেষ্টা করছি এবং ডাব্লুপিটি অভ্যন্তরীণভাবে এটি পরিচালনা করতে চাই।
দেবতার

1

আপনি এইভাবে চেষ্টা করতে পারেন:

add_action('woocommerce_add_to_cart', 'custom_action_add_to_cart', 20, 6);
function custom_action_add_to_cart($cart_item_key, $product_id, $quantity, $variation_id, $variation, $cart_item_data) {
    $cart = WC()->cart->get_cart();
    $product = wc_get_product($product_id);
    $referer = $_SERVER['HTTP_REFERER'];
    $route = parse_url( $referer );
    $path = $route['path'] ?? 'home' ;
    $args = array_filter( ( explode('/', $path) ) );
    if (in_array( 'product', $args) ) {
        // Product Page
    } elseif (in_array('product-category', $args)) {
        // Product Category
    } else {
        // Default
    }
}

তবে আপনার নিজের সেটিংস পরীক্ষা করতে হবে। Settings > Permalinks


হোমপৃষ্ঠা, পণ্য পৃষ্ঠা ইত্যাদির জন্য ম্যানুয়াল চেকগুলি ওভারকিল। আমি পৃষ্ঠার নামগুলি হার্ডকোড না করার চেষ্টা করছি এবং ডাব্লুপিটি অভ্যন্তরীণভাবে এটি পরিচালনা করতে চাই।
দেবনার

1

আপনি ব্যবহার করতে পারেন is_product(), is_product_category()ফাংশন

function custom_action_add_to_cart($cart_item_key, $product_id, $quantity, $variation_id, $variation, $cart_item_data)
{

    $cart = WC()->cart->get_cart();    

    $product = wc_get_product($product_id);

    if ( is_product() ) {
    global $product;
    $id = $product->get_id();
    foreach ( WC()->cart->get_cart() as $cart_item ) { 
       if($cart_item['product_id'] == $id ){
           $quantity_from_cart =  $cart_item['quantity'];
           break; // stop the loop if product is found
       }
     }

        $new_quantity = $quantity_from_cart * 3;
    }
  else if (is_product_category()) {
        $new_quantity = $quantity_from_cart + 1;
    }
    my_custom_function($new_quantity, $cart_item_key);
}

আমি আপনার সমাধান ক্লান্ত। আমি যখন একক পণ্য পৃষ্ঠাতে থাকি এবং পণ্যটি কার্টে যুক্ত করি, তখন আমি কোডটি $new_quantity = $quantity_from_cart * 3;কাজ করার আশা করেছিলাম । তবে তা হয় না। এটি কেবল কার্টের বর্তমান বিদ্যমান পরিমাণকে বাড়িয়ে তোলে, তবে পরিমাণটি 3 দ্বারা গুণ করে না । কিভাবে এটি ঠিক করবেন?
দেবনার

এখন চেষ্টা করুন এটি পরিমাণটি 3 দ্বারা বৃদ্ধি করবে
আরবিটি

আমি কেবল আপনার সংশোধিত সমাধানটি চেষ্টা করেছি। তবে একরকম, ফলাফলটি আমার আগের মন্তব্যের মতো। মনে হচ্ছে যে কিছু অদ্ভুত কারণে, কোড বলে মনে হয় if ( is_product() )করা হয় না মৃত্যুদন্ড কার্যকর করা হচ্ছে। আমি এর কারণ খুঁজে পাচ্ছি না! এটি কোনও এজ্যাক্স কার্টের বোতামে যুক্ত হ'ল ??
ডেভনার

0

আমি মনে করতে পারে বেশ কয়েকটি সমাধান আছে। তবে এখানে একটি:

add_action( 'woocommerce_after_add_to_cart_button', 'rmg_woocommerce_after_add_to_cart_button' );
function rmg_woocommerce_after_add_to_cart_button() {
    $button_location = 0;
    // if (is_home() || is_front_page()) {
    //     // we're at the home page
    //     $button_location = 1;
    // }
    if (is_product()) {
        // where at product page
        $button_location = 2;
    } else {
        // pages other than product page
        $button_location = 1;
    }
    echo '<input type="hidden" name="button-location" value="'. $button_location .'" />';
}

আমরা ফর্মের ভিতরে একটি লুকানো ইনপুট যুক্ত করতে পারি, এটি উপরের কোডটি করে।
তারপরে এর মানটি যাচাই করতে পারে:

$button_location = $_REQUEST['button-location'];
if ($button_location && $button_location === 2) {
    // add to cart button clicked at or came from product page..
    $new_quantity = $quantity_from_cart + 1;
}

দয়া করে মনে রাখবেন যে এটি কেবল একটি ধারণা এবং সম্পূর্ণ সমাধান নয় ... আপনাকে এজ্যাক্স বোতামটির যত্ন নেওয়া দরকার।


দেখে মনে হচ্ছে কিছু অদ্ভুত কারণে, কোডটি যদি (হয়_প্রডাক্ট ()) কার্যকর করা হচ্ছে না । আমি এর কারণ খুঁজে পাচ্ছি না! এটি কোনও এজ্যাক্স কার্টের বোতামে যুক্ত হ'ল ??
ডেভনার

$button_location
এজ্যাক্স
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.