web-dev-qa-db-fra.com

Rediriger vers la caisse woocommerce a échoué

Bonsouir, j'essaie de rediriger vers la caisse lorsqu'un utilisateur ajoute au panier un produit uniquement à partir de la page d'un seul produit, pour être très spécifique à partir de cette page où tout le monde peut voir le produit simple.

 enter image description here 

Maintenant, tout fonctionne très bien quand j'ajoute ce code à functions.php

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');

Mais quand je modifie le code en ajoutant la condition permettant de distinguer les pages qui ne sont pas la seule page de produit avec ce code, cela ne fonctionne pas

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' );

Je mets dans la condition un echo "it works" et imprime assez bien, mais la redirection ne fonctionne pas.

Où, selon vous, le problème, cela devrait fonctionner, est simplement une condition facile, mais ne fonctionne pas pour moi. Je suis en train d’utiliser Avada Theme et Woocommerce.

EDIT: Il semblerait que lorsque j'ajoute au panier, les liens sont générés sous la forme

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

Le chemin

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

Est considéré pour woocommmerce en tant que produit, mais l’autre qui inclut ?add-to-cart=[PRODUCTID] n’est pas considéré comme un produit mais il devrait l'être car il s'agit toujours d'un produit, il s'agit simplement d'envoyer une variable via GET

Savez-vous comment le faire reconnaître comme une page de produit?

1
Johanna Ferreira

Eh bien, ce que cela fonctionne pour moi dans ce cas était ce code

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;
    }       
}

Il redirige s'il s'agit d'un produit mais si vous êtes dans la page de la boutique, il ne sera pas redirigé, bien sûr si vous souhaitez rediriger vers une autre page mais dans une seule page du produit, le code doit être if ( !isset( $_POST['add-to-cart'] ) ) {

J'espère que mes questions et réponses aideront quelqu'un qui visite ce post

0
Johanna Ferreira

Je souhaite simplement ajouter à cette question que, lorsque vous effectuez la redirection de paiement, vous souhaitez probablement modifier le texte du bouton Ajouter au panier, ce qui est possible avec woocommerce_product_add_to_cart_text pour les archives de produits et avec woocommerce_product_single_add_to_cart_text pour les pages de produit uniques.

Le prochain numéro est l’avis "Le {nom du produit} a été ajouté à votre panier". Vous voulez probablement le cacher aussi, car il est affiché sur la page de paiement. C'est aussi possible avec wc_add_to_cart_message_html hook.

Exemple de code que vous pouvez trouver dans this article.

0
Misha Rudrastyh

La fonction is_product () et/ou is_single () ne peut identifier la page que lorsque wp_query () est prêt. Apparemment, au moment où votre code est en cours d'exécution, ledit wp_query () n'a rien et ne peut pas identifier s'il s'agit d'une page simple ou d'une page de catégorie, etc. Ainsi, dans votre code, la fonction is_product () renvoie (bool) false.

Lors de la reproduction de votre code, j’ai imprimé le fichier wp_query à partir du fichier de fonctions et le résultat obtenu est présenté ci-dessous.

Ce que vous voulez réaliser pourrait être possible si vous ajoutez votre action après que wp_query () soit prêt, dans ce cas, la deuxième fonction permettant de changer de page de redirection pourrait fonctionne.

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 PRODUIT? bool (faux)

0
Aadil P.