Fügen Sie auf der Einzelproduktseite von WooCommerce eine benutzerdefinierte Schaltfläche „Jetzt kaufen“ hinzu, die den Einkaufswagen löscht, ein Produkt hinzufügt und zur Kasse weiterleitet

Lesezeit: 3 Minuten

Benutzeravatar von Bekk1111
Bekk1111

Ich verwende diesen einfachen Code, um eine Schaltfläche „Jetzt kaufen“ auf einer einzelnen Produktseite hinzuzufügen.

add_action( 'woocommerce_after_add_to_cart_button', 'add_content_after_addtocart' ); 
function add_content_after_addtocart() {
    // get the current post/product ID
    $current_product_id = get_the_ID();

    // get the product based on the ID
    $product = wc_get_product( $current_product_id );

    // get the "Checkout Page" URL
    $checkout_url = WC()->cart->get_checkout_url();
    
    // run only on simple products
    if( $product->is_type( 'simple' ) ) {
        echo '<a href="'.$checkout_url.'?add-to-cart=".$current_product_id."" class="mongo_single_add_to_cart_button button">Buy Now</a>';
    }
}

Dieser Code leitet effektiv zur Checkout-Seite weiter und fügt das Produkt dem Warenkorb hinzu, aber ich möchte ihm zwei kleine Funktionen hinzufügen:

  1. Nachdem ich auf die Schaltfläche geklickt habe, möchte ich, dass der Einkaufswagen geleert wird, bevor die Aktion ausgeführt wird.

  2. Nachdem ich das Produkt in den Warenkorb gelegt habe, möchte ich, dass Benutzer darauf umgeleitet werden ‘/Kasse’ Seite. Im Moment schickt es Benutzer weiter ‘checkout/?add-to-cart=3122’was bedeutet, dass bei jeder Aktualisierung auf der Checkout-Seite automatisch 1 Produkt zum Warenkorb hinzugefügt wird.

Irgendein Rat?

Anstatt die zu verwenden add-to-cart param in Ihrer URL, wodurch das Produkt hinzugefügt wird (aber auch andere Aktionen in WooCommerce ausführt), können Sie eine benutzerdefinierte URL für Ihre Schaltfläche und die verwenden template_redirect Aktionshaken

Auf diese Weise werden Sie die integrierte Funktionalität in WooCommerce los und können Ihre eigenen benutzerdefinierten Aktionen basierend auf den GET-Parametern ausführen

Sie erhalten also:

// Add new/extra button
function action_woocommerce_after_add_to_cart_button() {
    global $product;
    
    // Is a WC product
    if ( is_a( $product, 'WC_Product' ) ) {
        // Run only on simple products
        if ( $product->is_type( 'simple' ) ) {
            // Get product ID
            $product_id = $product->get_id();

            // Get permalink
            $permalink = $product->get_permalink();

            // Output url
            echo '<a href="' . $permalink . '?product_id=' . $product_id . '&redirect_checkout=true" class="mongo_single_add_to_cart_button button">'. __ ( 'Buy Now', 'woocommerce' ) . '</a>';
        }
    }
}
add_action( 'woocommerce_after_add_to_cart_button', 'action_woocommerce_after_add_to_cart_button', 10 );

// Redirect
function action_template_redirect() {
    // Determines whether the current request is for an administrative interface page
    if ( is_admin() ) return;

    // Returns true when viewing a single product
    if ( ! is_product() ) return;

    // Get params
    if ( isset( $_GET['product_id'] ) && isset( $_GET['redirect_checkout'] ) ) {
        // Get param 1
        $product_id = $_GET['product_id'];

        // Get param 2
        $boolean = $_GET['redirect_checkout'];

        // WC Cart
        if ( WC()->cart ) {
            // 1. Empty cart
            WC()->cart->empty_cart();

            // 2. Add to cart
            WC()->cart->add_to_cart( $product_id );

            // 3. Redirect
            // When true
            if ( $boolean ) {
                // Gets the url to the checkout page
                $checkout_url = wc_get_checkout_url();

                // Performs a safe (local) redirect
                wp_safe_redirect( $checkout_url );
                exit;
            }
        }
    }
}
add_action( 'template_redirect', 'action_template_redirect' );

Hier ist der Code zum Löschen des Warenkorbs vor dem Hinzufügen eines Artikels

add_filter( 'woocommerce_add_to_cart_validation', 'ji_remove_cart_item_before_add_to_cart', 20, 3 );
function ji_remove_cart_item_before_add_to_cart( $passed, $product_id, $quantity ) {
if( ! WC()->cart->is_empty() )
    WC()->cart->empty_cart();
return $passed;}
  1. Nachdem ich das Produkt in den Warenkorb gelegt habe, möchte ich, dass Benutzer auf die Seite „/checkout“ umgeleitet werden. Im Moment sendet es Benutzer auf „checkout/?add-to-cart=3122“, was bedeutet, dass jede Aktualisierung auf der Checkout-Seite automatisch 1 Produkt zum Einkaufswagen hinzufügt.

    add_filter( ‘woocommerce_add_to_cart_redirect’, ‘ji_redirect_checkout_after_add_to_cart’ );

    Funktion ji_redirect_checkout_after_add_to_cart() { return wc_get_checkout_url(); }

  • Vielen Dank, aber mein Ziel ist es, den Warenkorb nur zu leeren, wenn ein Benutzer auf die Schaltfläche “Jetzt kaufen” klickt. Ist es möglich?

    – Bekk1111

    22. März um 6:45 Uhr

  • Ja, dafür müssen Sie eine neue Ajax-Aktion registrieren und diese Aktion aufrufen, wenn Sie auf die Schaltfläche Jetzt kaufen klicken.

    – Usdad Pravin

    22. März um 6:57 Uhr

1435380cookie-checkFügen Sie auf der Einzelproduktseite von WooCommerce eine benutzerdefinierte Schaltfläche „Jetzt kaufen“ hinzu, die den Einkaufswagen löscht, ein Produkt hinzufügt und zur Kasse weiterleitet

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy