webentwicklung-frage-antwort-db.com.de

Weiterleitung zur Kasse fehlgeschlagen

Bonsouir, ich versuche, zur Kasse weiterzuleiten, wenn ein Benutzer ein Produkt nur von der einzelnen Produktseite in den Warenkorb legt, um genau zu sein von dieser Seite aus, auf der jeder nur das einfache Produkt sehen kann

 enter image description here 

Jetzt funktioniert alles einwandfrei, wenn ich diesen Code zu functions.php hinzufüge

function my_custom_add_to_cart_redirect( $url ) {
        $url = wc_get_checkout_url();
        return $url;
}

add_filter( 'woocommerce_add_to_cart_redirect','my_custom_add_to_cart_redirect');

Aber wenn ich den Code ändere, der die Bedingung hinzufügt, um zwischen den Seiten zu unterscheiden, die nicht die einzelne Produktseite mit diesem Code sind, funktioniert es nicht

function my_custom_add_to_cart_redirect( $url ) {   

    if ( is_product() ){
        $url = wc_get_checkout_url(); 
        return $url;
    }
}

add_filter( 'woocommerce_add_to_cart_redirect', 'my_custom_add_to_cart_redirect' );

Ich habe in die Bedingung einen echo "it works" eingefügt und drucke ganz gut, aber die Umleitung funktioniert nicht.

Wo denkst du ist das Problem, das sollte funktionieren, ist nur eine einfache Bedingung, aber funktioniert nicht für mich, ich benutze Avada Theme und Woocommerce aktualisiert

EDIT: Es sieht so aus, als ob beim Hinzufügen zum Warenkorb die Links wie folgt generiert werden

[www.domain.com]/product/[name-of-product]/?add-to-cart=[PRODUCTID]

Der Weg

[www.domain.com]/product/[name-of-product]/ 

Wird für Woocommmerce als Produkt betrachtet, aber das andere, das ?add-to-cart=[PRODUCTID] enthält, wird nicht als Produkt betrachtet, sollte aber sein, da es sich immer noch um ein Produkt handelt. Es wird nur eine Variable über GET gesendet

Wissen Sie, wie man es als Produktseite erkennt?

1

In diesem Fall funktioniert dieser Code für mich

add_filter( 'woocommerce_add_to_cart_redirect', 'redirect_add_to_cart' );

function redirect_add_to_cart() {       
    if ( isset( $_POST['add-to-cart'] ) ) {
        $url = wc_get_checkout_url();
        return $url;
    }       
}

Es leitet weiter, wenn es sich um ein Produkt handelt. Wenn Sie sich jedoch auf der Shop-Seite befinden, wird es nicht weitergeleitet. Wenn Sie jedoch auf eine andere Seite weiterleiten möchten, sollte der Code auf einer einzelnen Produktseite if ( !isset( $_POST['add-to-cart'] ) ) { lauten.

Ich hoffe meine Frage und Antwort hilft jemandem, der diesen Beitrag besucht

0

Ich möchte nur zu dieser Frage hinzufügen, dass Sie beim Ausführen der Weiterleitung zur Kasse wahrscheinlich den Text der Schaltfläche zum Hinzufügen zum Warenkorb ändern möchten. Dies ist mit woocommerce_product_add_to_cart_text für Produktarchive und mit woocommerce_product_single_add_to_cart_text für einzelne Produktseiten möglich.

Die nächste Ausgabe ist der Hinweis "Der {Produktname} wurde Ihrem Warenkorb hinzugefügt". Möglicherweise möchten Sie es auch ausblenden, da es auf der Checkout-Seite angezeigt wird. Dies ist auch mit wc_add_to_cart_message_html hook möglich.

Codebeispiel finden Sie in this article.

0
Misha Rudrastyh

Die Funktion is_product () und/oder is_single () kann die Seite erst identifizieren, nachdem wp_query () fertig ist. Anscheinend hat die genannte wp_query () zu dem Zeitpunkt, an dem Ihr Code ausgeführt wird, nichts und kann nicht identifizieren, ob es sich um eine einzelne Seite oder eine Kategorieseite usw. handelt. In Ihrem Code gibt die Funktion is_product () daher false zurück.

Beim Reproduzieren Ihres Codes habe ich die wp_query aus der Funktionsdatei gedruckt und das folgende Ergebnis erhalten.

Was Sie erreichen möchten, ist möglicherweise möglich, wenn Sie Ihre Aktion hinzufügen, nachdem wp_query () fertig ist. In diesem Fall funktioniert die zweite Funktion zum Ändern der Umleitungsseite möglicherweise .

WP_Query Object ([query] => [query_vars] => Array ()

[tax_query] => 
[meta_query] => 
[date_query] => 
[queried_object] => 
[queried_object_id] => 
[request] => 
[posts] => 
[post_count] => 0
[current_post] => -1
[in_the_loop] => 
[post] => 
[comments] => 
[comment_count] => 0
[current_comment] => -1
[comment] => 
[found_posts] => 0
[max_num_pages] => 0
[max_num_comment_pages] => 0
[is_single] => 
[is_preview] => 
[is_page] => 
[is_archive] => 
[is_date] => 
[is_year] => 
[is_month] => 
[is_day] => 
[is_time] => 
[is_author] => 
[is_category] => 
[is_tag] => 
[is_tax] => 
[is_search] => 
[is_feed] => 
[is_comment_feed] => 
[is_trackback] => 
[is_home] => 
[is_404] => 
[is_embed] => 
[is_paged] => 
[is_admin] => 
[is_attachment] => 
[is_singular] => 
[is_robots] => 
[is_posts_page] => 
[is_post_type_archive] => 
[query_vars_hash:WP_Query:private] => 
[query_vars_changed:WP_Query:private] => 1
[thumbnails_cached] => 
[stopwords:WP_Query:private] => 
[compat_fields:WP_Query:private] => Array
    (
        [0] => query_vars_hash
        [1] => query_vars_changed
    )

[compat_methods:WP_Query:private] => Array
    (
        [0] => init_query_flags
        [1] => parse_tax_query
    )

) IS PRODUKT? bool (falsch)

0
Aadil P.