[Résolu] Woocommerce prix à l’année

  • WordPress :5.2
  • Statut : résolu
10 sujets de 1 à 10 (sur un total de 10)
  • Auteur
    Messages
  • #2284187
    Pixel_endZ
    Participant
    Initié WordPress
    11 contributions

    Bonjour,

    Ma configuration WP actuelle :
    – Version de WordPress : 5.2.4
    – Version de PHP/MySQL : 7.2.24 / 5.7.26
    – Thème utilisé : Divi
    – Thème URI : http://www.elegantthemes.com/gallery/divi/
    – Extensions en place : 404page – your smart custom 404 error page (11.0.5), Accordions by PickPlugins (2.1.17), Forum_wordpress_fr (4.2), LoginPress – Customizing the WordPress Login (1.3.2), Site Kit by Google (1.0.1), WooCommerce (3.8.0), WooCommerce Admin (0.21.0), WooCommerce PayPal Checkout Gateway (1.6.17), WP Maintenance Mode (2.2.4), WPS Hide Login (1.5.4.2), Yoast SEO (12.4)
    – Adresse du site : https://alterium.ch
    – Nom de l’hébergeur : Apache

    J’aimerais savoir si c’est possible d’afficher les prix au mois pour une offre mais on peux seulement acheté à l’année (exemple: prix de l’offre 5euro par mois et dans le panier il prix est de 12×5 euro car minimum une année d’achat)

    Merci d’avance

    #2284215
    ferman
    Participant
    Maître WordPress
    1357 contributions

    Bonjour,

    Vous devriez pouvoir y arriver avec cette fonction qui marche avec des produits classiques et qui devrait aussi marcher avec des produits virtuels. Dans la fonction exemple, 2904 est l’id du produit, à remplacer par celle de votre produit.  Ce produit sera vencu par 12, les autres produits restant vendus individuellement)Code testé, qui fonctionne (à moins que j’aie fait une erreur en le recopiant), à mettre dans  le fichier function.php d’un thème enfant. Adapté de : https://businessbloomer.com/woocommerce-define-add-cart-min-max-incremental-quantities/ (business bloomer est une excellente source de codes pour woocommerce).

    function bloomer_woocommerce_quantity_changes( $args, $product ) 
    {
     if ($product->id == 2904 ) 
     {   
      if ( ! is_cart() ) 
      {
          $args['input_value'] = 1; // Start from this value (default = 1) 
          $args['max_value'] = 12; // Max quantity (default = -1)
          $args['min_value'] = 12; // Min quantity (default = 0)
          $args['step'] = 1; // Increment/decrement by this value (default = 1)
      }
        else 
      {
          // Cart's "min_value" is already 0 and we don't need "input_value"
          $args['max_value'] = -1; // Max quantity (default = -1)
          $args['step'] = 12; // Increment/decrement by this value (default = 0)
          // ONLY ADD FOLLOWING IF STEP < MIN_VALUE
          $args['min_value'] = 0; // Min quantity (default = 0)
      }
     }  
     
    else 
     {  
       if ( ! is_cart() ) 
      {
          $args['input_value'] = 1; // Start from this value (default = 1) 
          $args['max_value'] = 1; // Max quantity (default = -1)
          $args['min_value'] = 1; // Min quantity (default = 0)
          $args['step'] = 1; // Increment/decrement by this value (default = 1)
      } 
        else 
      {
          // Cart's "min_value" is already 0 and we don't need "input_value"
          $args['max_value'] = 50; // Max quantity (default = -1)
          $args['step'] = 1; // Increment/decrement by this value (default = 0)
          // ONLY ADD FOLLOWING IF STEP < MIN_VALUE
          $args['min_value'] = 0; // Min quantity (default = 0)
      }
     }
     	
       return $args;
    }  
    
    add_filter( 'woocommerce_quantity_input_args', 'bloomer_woocommerce_quantity_changes', 10, 2 );?>

    #2284230
    ferman
    Participant
    Maître WordPress
    1357 contributions

    En fait il y avait bien une erreur en recopiant: le ?> terminal. Avec lui, la fonction risque de ne pas fonctionner. J’en profite pour vous donner une forme plus courte. C’est mieux de l’ utiliser. J’espère ne pas avoir fait d’erreur cette fois.

    
    function bloomer_woocommerce_quantity_changes( $args, $product ){ 
    
     if ($product->id == 2904 ){    
      if ( ! is_cart() ) { 
          $args['input_value'] = 1; // Start from this value (default = 1) 
          $args['max_value'] = 12; // Max quantity (default = -1)
          $args['min_value'] = 12; // Min quantity (default = 0)
          $args['step'] = 1; // Increment/decrement by this value (default = 1)
      }else { 
          // Cart's "min_value" is already 0 and we don't need "input_value"
          $args['max_value'] = 50; // Max quantity (default = -1)
          $args['step'] = 12; // Increment/decrement by this value (default = 0)
          // ONLY ADD FOLLOWING IF STEP < MIN_VALUE
          $args['min_value'] = 0; // Min quantity (default = 0)
      }
     }  
       return $args;
    }
    add_filter( 'woocommerce_quantity_input_args', 'bloomer_woocommerce_quantity_changes', 10, 2 );

    • Cette réponse a été modifiée le il y a 1 week par  ferman.
    #2284234
    Pixel_endZ
    Participant
    Initié WordPress
    11 contributions

    Bonsoir,

    Je me permets de vous demandez pouvez vous me mettre l’extrait à copier pour 3 produits svp ? car en le collant à la suite cela ne fonctionne pas.

    Merci d’avance

    • Cette réponse a été modifiée le il y a 6 jours et 23 heures par  Pixel_endZ.
    • Cette réponse a été modifiée le il y a 6 jours et 23 heures par  Pixel_endZ.
    #2284239
    ferman
    Participant
    Maître WordPress
    1357 contributions

    Vous remplacez la ligne 1 du code par la ligne 3.

     if ($product->id == 2904 ){   
    
    if ($product->id == (2904 ||2903 || 2902)){  

     

    #2284241
    Pixel_endZ
    Participant
    Initié WordPress
    11 contributions

    Merci infiniment

    #2284247
    ferman
    Participant
    Maître WordPress
    1357 contributions

    Quelques précisions supplémentaires (ce n’est pas forcément évident):

    1. pour !is cart (ce qui n’est pas le panier: la page du produit)

    $args[‘input_value’] = 1; // Start from this value (default = 1)  pas important: laissez 1
    $args[‘max_value’] = 24; // Max quantity (default = -1) mettez un multiple de 12 correspondant au nombre maximum de produits en stock (ici 24) , -1 = pas de limite.

    $args[‘min_value’] = 12; // Min quantity (default = 0)  signifie vous les vendez par paquet de 12
    $args[‘step’] = 12; // Increment/decrement by this value (default = 1) signifie vous ne pouvez les ajouter ou les enlever que par 12

    2. else (le panier)

    // Cart’s “min_value” is already 0 and we don’t need “input_value”
    $args[‘max_value’] = 24; // Max quantity (default = -1) mettez le même  multiple de 12 qu’avant. Correspondant au nombre maximum de produits en stock (ici 24)
    $args[‘step’] = 12; // Increment/decrement by this value (default = 0) comme ci-dessus.
    // ONLY ADD FOLLOWING IF STEP < MIN_VALUE
    $args[‘min_value’] = 0; // Min quantity (default = 0) (on aurait pu enlever cette ligne mais ce n’est pas important)

     

    #2284312
    Pixel_endZ
    Participant
    Initié WordPress
    11 contributions

    Bonjour,

    J’ai un problème avec ce que vous m’avez donné, il met tout les produit avec un minimum de 12 mois

    Les produits qui doivent être avec 12 mois au minimum ont l’ID 43, 51 ,52.

    Ai-je peut être fait une erreur ?

     

    Edit: je précise que j’ai enlevé le code que vous m’avez donnée et les produits fonctionnent de nouveau 1 par 1

    • Cette réponse a été modifiée le il y a 6 jours et 8 heures par  Pixel_endZ.
    #2284381
    ferman
    Participant
    Maître WordPress
    1357 contributions

    Bonjour,

    Non vous n’avez pas fait d’erreur. C’est moi qui ai fait ça en 5 minutes hier soir et sans vérifier sur les autres produits (donc trop rapidement -> donc erreur grossière!)

    Il faut en fait mettre:

     if ($product->id == (43)||$product->id == (51)||$product->id == (52)){ 

    Essayez et dites moi si ça marche.

    • Cette réponse a été modifiée le il y a 6 jours par  ferman.
    #2284383
    Pixel_endZ
    Participant
    Initié WordPress
    11 contributions

    Tout fonctionne merci beaucoup

10 sujets de 1 à 10 (sur un total de 10)
  • Vous devez être connecté pour répondre à ce sujet.