2017-10-04 2 views
1

Je travaille sur un projet en utilisant woocommerce et wordpress et j'ai besoin d'une fonctionnalité spécifique pour y être implémentée. Le projet exige que certains produits soient marqués comme "locations". Si l'utilisateur ajoute un produit avec la catégorie "location", l'utilisateur est redirigé vers une page avec un formulaire de contact à remplir qui contiendra automatiquement le sku du produit. Le produit ne doit pas être ajouté au panier.WooCommerce Redirection si l'utilisateur ajoute un produit d'une certaine catégorie au panier

J'ai essayé d'utiliser le filtre "woocommerce_add_to_cart_redirect". J'ai vérifié si le produit appartenait à une certaine catégorie et si c'est le cas, il serait redirigé vers la page de contact. Le problème était que le produit a été ajouté au panier.

add_filter('woocommerce_add_to_cart_redirect', 'rv_redirect_on_add_to_cart'); 
function rv_redirect_on_add_to_cart() { 
//Get product ID 
if (isset($_POST['add-to-cart'])) { 

    $product_id = (int) apply_filters('woocommerce_add_to_cart_product_id', $_POST['add-to-cart']); 

    //Check if product ID is in the proper taxonomy and return the URL to the redirect product 
    if (has_term('rental', 'product_cat', $product_id)){ 
     $product = wc_get_product($product_id); 
     $_POST['rental-product-sku'] = $product->get_sku(); 
     return get_permalink(get_page_by_path('rent-a-book')); 
    } 
} 
} 

J'ai donc essayé d'utiliser la validation personnalisée « woocommerce_add_to_cart_validation » pour vérifier si le produit appartient à la catégorie, si elle le fait, elle retourne false.

add_action('woocommerce_add_to_cart_validation', 'add_the_date_validation', 11, 2); 
function add_the_date_validation($passed, $product_id) { 
    $terms = wp_get_post_terms($product_id, 'product_cat'); 

    foreach ($terms as $term) $categories[] = $term->slug; 
    if(count($categories) == 0){ 
     return true; 
    } 
    if (in_array('rental', $categories)) { 
     return false; 
    } else { 
     return true; 
    } 
    return true; 
} 

Le problème est que si la validation retourne false, le filtre de redirection n'est pas chargé et que l'utilisateur n'est pas redirigé vers la page de contact. Je fais des recherches depuis un certain temps maintenant et je n'ai pas réussi mes tentatives. Quelqu'un peut il m'aider avec ça?

Merci

Répondre

1

pourquoi ne pas faire quelque chose comme ça?

add_action('woocommerce_add_to_cart_validation', 'add_the_date_validation', 11, 2); 
function add_the_date_validation($passed, $product_id) { 

    if (has_term('rental', 'product_cat', $product_id)){ 
     // $product = wc_get_product($product_id); 
     // $_POST['rental-product-sku'] = $product->get_sku(); 
     wp_safe_redirect(get_permalink(get_page_by_path('rent-a-book'))); 
     exit(); 
    } 
    return $passed; 
} 
+0

Merci pour votre réponse, mais cela n'a pas fonctionné. Je pense que si la validation retourne faux la redirection ne fonctionne tout simplement pas, même dans la même fonction. –

+0

Je ne suis pas sûr si vous le faites comme ce que j'ai fait ... 'wp_safe_redirect' (trouvé dans la fonction ci-dessus) redirigera votre page si le lien que vous avez fourni est correct ... la fonction ci-dessus passera le processus de validation. – Reigel

+0

J'ai fait du dépannage. Je ne pense pas que le wp_safe_redirect fonctionne. –