,

Ajouter un don dans votre panier WooCommerce

Ajouter un don dans votre panier WooCommerce

Cet article va vous montrer comment faire pour ajouter un champ de saisie dans le panier de votre boutique WooCommerce, permettant aux clients de faire un don avant de finaliser leur commande.

Note : Ce code source vient de James Collings (http://jamescollings.co.uk)

Etape 1 : Créer un produit invisible pour les dons

L’ajout d’un don à votre WooCommerce est possible qu’en créant un produit qui ne figure pas dans le catalogue, et en ayant une classe de taxe à taux zéro.

Voici la procédure :

1. Allez à Produits > Ajouter un produit
2. Mettez le titre « Faire un don » (ou autre)
3. Sur la partie droite, dans l’encart « Publier » choisir sur « Visibilité du catalogue », le mode Caché
4. Dans la section « Données Produits », régler l’UGS sur quelque chose d’unique par exemple « special-don », sous expédition définir la catégorie de l’expédition sur « aucune expédition », si vous avez activé les taxes.
5. Sélectionner « aucun » et juste au cas où mettre la classe d’impôt à taux zéro.
6. Enfin, dans la section de « Données Produits », dans l’onglet Inventaire, assurez-vous que « Vendu séparément » soit coché, un seul don sera autorisé par commande.

Etape 2 : Création des fonctions

Une fois fini de créer le produit pour le don, récupérez son ID (il servira pour définir la variable globale DONATE_ID du code plus bas). Nous allons l’utiliser pour vérifier si un don a déjà été ajouté. Cette fonction parcourt tous les articles dans le panier et vérifie si un produit existe avec notre ID. Si oui, elle renvoie true.

Ces fonctions sont à mettre dans le fichiers functions.php de votre thème.

<?php
define('DONATE_ID', 0); // set to the id of your previously created donation product
 
function jc_donation_exsits(){
 
	global $woocommerce;
 
	if( sizeof($woocommerce->cart->get_cart()) > 0){
 
		foreach($woocommerce->cart->get_cart() as $cart_item_key => $values){
 
			$_product = $values['data'];
 
			if($_product->id == DONATE_ID)
				return true;
		}
	}
	return false;
}
?>

Montant du don arrondi.

Si vous souhaitez saisir le total de la commande et la donation par défaut à une valeur arrondie, ajouter cette fonction (par défaut, elle n’est utilisée ensuite, il faudra décommenter une ligne).

<?php
function jc_round_donation($total, $value = 10){
 
     $donation = (ceil($total / $value) * $value) - $total;
     return $donation;
}
?>

Ajouter formulaire de don

Voici comment ajouter un formulaire à la page du panier, nous allons le faire en « accrochage » dans woocommer_cart_contents et donc sortir notre formulaire de don à la suite du panier et sans qu’aucun don a été précédemment été ajouté.

<?php
add_action('woocommerce_cart_contents','jc_woocommerce_after_cart_table');
function jc_woocommerce_after_cart_table(){
 
	global $woocommerce;
	$donate = isset($woocommerce->session->jc_donation) ? floatval($woocommerce->session->jc_donation) : 0;
 
	if(!jc_donation_exsits()){
		unset($woocommerce->session->jc_donation);
	}
 
    // uncomment the next line of code if you wish to round up the order total with the donation e.g. £53 = £7 donation
    // $donate = jc_round_donation($woocommerce->cart->total );
 
	if(!jc_donation_exsits()){
		?>
		<tr class="donation-block">
			<td colspan="6">
				<div class="donation">
					<p class="message"><strong>Add a donation to your order:</strong></p>
					<div class="input text">
						<label>Donation (£):</label>
						<input type="text" name="jc-donation" value="<?php echo $donate;?>"/>
					</div>
					<div class="submit">
						<input type="submit" name="donate-btn" value="Add Donation"/>
					</div>
				</div>
			</td>
		</tr>
		<?php
	}
}
?>

Traitement du formulaire

Maintenant que nous avons notre formulaire sur le panier, nous allons traiter les données. C’est possible avec add_action(‘init’) et on va vérifier si la variable ‘jc-don‘ a bien été envoyé en $_POST, le cas échéant ajouter la corbeille, et définir la valeur de session pour le montant de votre don.

Quand vous soumettez un don, il devrait apparaître dans la liste des articles dans votre panier, et le formulaire doit se masquer, si vous supprimez le don du panier, il réapparaît. Mais vous devriez remarquer que le don dans le panier affichera le prix qui avait été précédemment entré lorsque le produit a été créé.

<?php
// capture form data and add basket item
add_action('init','jc_process_donation');
function jc_process_donation(){
 
	global$woocommerce;
 
	$donation = isset($_POST['jc-donation']) && !empty($_POST['jc-donation']) ? floatval($_POST['jc-donation']) : false;
 
	if($donation && isset($_POST['donate-btn'])){
 
		// add item to basket
		$found = false;
 
		// add to session
		if($donation >= 0){
			$woocommerce->session->jc_donation = $donation;
 
			//check if product already in cart
			if( sizeof($woocommerce->cart->get_cart()) > 0){
 
				foreach($woocommerce->cart->get_cart() as $cart_item_key=>$values){
 
					$_product = $values['data'];
 
					if($_product->id == DONATE_ID)
						$found = true;
				}
 
				// if product not found, add it
				if(!$found)
					$woocommerce->cart->add_to_cart(DONATE_ID);
			}else{
				// if no products in cart, add it
				$woocommerce->cart->add_to_cart(DONATE_ID);
			}
		}
	}
}
?>

Obtenir le prix du don

Pour introduire notre don dans le panier WooCommerce nous utilisons l’action suivante ‘woocommerce_get_price‘. Si l’élément correspond à l’ID, nous allons saisir le don qui est stocké dans la session de l’utilisateur.

<?php
add_filter('woocommerce_get_price', 'jc_get_price',10,2);
function jc_get_price($price, $product){
 
	global $woocommerce;
 
	if($product->id == DONATE_ID){
		return isset($woocommerce->session->jc_donation) ? floatval($woocommerce->session->jc_donation) : 0;
 
	}
	return $price;
}
?>

Voilà, le panier total et les articles doivent s’afficher avec des totaux corrects et en plus avec le don choisi !

Pour récapituler tout cela, avec ses fonctions, vous avez la possibilité d’ajouter un champs pour que vos clients de WooCommerce puisque effectuer un don en plus de leur commande.

Et cerise sur le gâteau, d’après ce code j’en ai fait un plugin ! J’y ai ajouté des options de personnalisation.

Vous pouvez le télécharger ici : 

  Ajouter un don dans votre panier WooCommerce (11,5 KiB, 90 téléchargements)

 

0 réponses

Répondre

Se joindre à la discussion ?
Vous êtes libre de contribuer !

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *