Search code examples
phpwordpresswoocommercecartcheckout

WooCommerce Button to Clear Cart, Add One Item and go to Checkout


I need a button on a unique landing page which does this:

  1. clears the cart
  2. adds a specific Item to the cart
  3. go directly to checkout
  4. (disable or hide menue-bar in checkout) <-I tried this with JavaScript but failed

I got a button which calls the link: https://www.snoooze.co/?add-to-cart= 12374

And then this snippet in my "functions.php"

add_filter ('woocommerce_add_to_cart_redirect', 'woo_redirect_to_checkout');
function woo_redirect_to_checkout() {
    global $woocommerce;
    $woocommerce->cart->empty_cart();
    $checkout_url = WC()->cart->get_checkout_url();
    return $checkout_url; }

The problem is that if I add the item in my function with add_to_Cart() it does this every time I want to add it manually in the shop, not just if I click on the button on the landing page.

I see that I have to assign the function to the button in some way, so doesn't get called on other sites, but how?

Any help please.


Solution

  • First you need a custom button embedded in an form. So here is a simple shortcode that you can use in a content editor or in php:

    // Shortcode: Special button "add-to-cart" with form
    function special_button() {
        return '<form method="post" action="">
            <button type="submit" class="button" name="add_to_cart_special">Special add to cart</button>
        </form>';
    }
    add_shortcode( 'special_button', 'special_button' );
    
    // Usage: [special_button] 
    // or for php: echo do_shortcode("[special_button]");
    

    And this custom hooked function that will be triggered when you press that custom button. It will:

    • empty cart,
    • add product 12374 to cart
    • redirect to checkout
    • display a custom notice in checkout page (optionally)

    The code:

    // Special add to cart (empty cart before and redirect to checkout)
    add_action( 'template_redirect', 'special_add_to_cart' );
    function special_add_to_cart() {
        if ( isset($_POST['add_to_cart_special']) ){
            WC()->cart->empty_cart();
            WC()->cart->add_to_cart( 12374 );
            wc_add_notice( __('this product X has been added to cart'), 'notice' );
            wp_redirect( wc_get_checkout_url() );
            exit();
        }
    }
    

    ALL Code goes in function.php file of your active child theme (or active theme).

    Tested and works.

    But to disable or hide your "menu bar" in checkout, I really don't know… This should be another new question with more details…