Dans ce tutoriel nous allons voir comment créer un système de direct checkout en ajoutant un bouton Acheter maintenant en plus du ajouter au panier.

Comme vous le savez Shopify permet depuis peu de rajouter ce type de bouton mais ils sont dynamiques ! Ce qui veut dire que le bouton s’adapte aux moyens de paiements connectés de l’utilisateur. En effet ce bouton va se transformer et pouvoir proposer le paiement par Paypal, Google pay etc…

C’est bien mais beaucoup de personnes ne souhaitent qu’un bouton acheter maintenant simple et efficace ! eh ça tombe bien on va apprendre à en créer un 😀

Version Thèmes Récents – (OS 2.0 – après 2022)

Installation du système

Création du Snippet (Extrait)

Rendez vous sur votre administration et cliquez sur « Boutique en ligne ».

Cliquez sur le bouton Action puis « Modifier le code ».

Trouvez le dossier Extraits (Snippets) et cliquez sur Ajouter une nouvelle ressource et nommez le « dg-btn-direct-checkout ».

Ouvrez le et mettez l’intégralité du code ci-dessous:


<button class="btn btn-primary button dg-btn-direct-checkout">Acheter maintenant</button>

<style>

.dg-btn-direct-checkout {
/* modifiez le code hexadecimal du fond du bouton et le scale pour l'intensité du zoom au survol */
--dg-btn-direct-checkout-bg-color: #fca311;
--dg-btn-direct-checkout-scale: 1.01;
/* 1 for reset or 1.01 max */
}

.dg-btn-direct-checkout {
width:100%;
background:var(--dg-btn-direct-checkout-bg-color);
transition: filter .1s;
}
.dg-btn-direct-checkout:hover {
filter: brightness(105%);
scale:var(--dg-btn-direct-checkout-scale);
}
@media screen and (min-width: 750px) {
.product-form .product-form__buttons {
display:flex;
gap:1rem;
max-width:100%;
}
.product-form__buttons > button {
margin:0;
}
}
.product-form__buttons > .dg-btn-direct-checkout::before, .product-form__buttons > .dg-btn-direct-checkout::after {
display:none;
}

</style>

<script>

if ((typeof window.DG) == 'undefined') { window.DG = {} }

DG.FetchifyCart = (btnClass) => {

const btn = document.querySelector(btnClass);
const form = btn.closest('form');

if(!form.length > 0) return

const serialize = (data) => {
let obj = {};
for (let [key, value] of data) {
if (obj[key] !== undefined) {
if (!Array.isArray(obj[key])) {
obj[key] = [obj[key]];
}
obj[key].push(value);
} else {
obj[key] = value;
}
}
return obj;
}

const setText = (state) => {
if(state === "fail") {
return btn.innerHTML = `No stock or error`;
}
btn.innerHTML = `<svg version="1.1" id="L9" xmlns="http://www.w3.org/2000/svg" width="31" height="31" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 100 100" enable-background="new 0 0 0 0" xml:space="preserve"> <path fill="#fff" d="M73,50c0-12.7-10.3-23-23-23S27,37.3,27,50 M30.9,50c0-10.5,8.5-19.1,19.1-19.1S69.1,39.5,69.1,50"> <animateTransform attributeName="transform" attributeType="XML" type="rotate" dur="1s" from="0 50 50" to="360 50 50" repeatCount="indefinite"/> </path> </svg>`;
}

const addItemToCart = async (form) => {

data = new FormData(form);
let formObj = serialize(data);

let addData = {
'id':formObj.id,
'quantity':formObj.quantity
};

await fetch('/cart/add.js', {
body: JSON.stringify(addData),
credentials: 'same-origin',
headers: {
'Content-Type': 'application/json',
'X-Requested-With':'xmlhttprequest'
},
method: 'POST'
}).then(function(response) {
return response.json();
}).then(function(json) {
setText('success');
setTimeout(() => { window.location.href = "/checkout"; }, 300);
}).catch(function(err) {
console.error(err);
setText('fail');
});
}

btn.addEventListener('click', (e) => {
e.preventDefault();
addItemToCart(form);
});
}

DG.FetchifyCart('.dg-btn-direct-checkout');
</script>

Placement du bouton

Trouvez le dossier Sections et cliquez sur fichier « product-template.liquid », si vous ne l’avez pas allez dans Templates – « product.liquid » ou dans section « product-template.liquid » sur Dawn c’est le fichier « main-product.liquid ». Dans certains cas le formulaire d’achat peut se trouver dans un fichier du dossier Extraits (Snippets) généralement product-form… ou product-grid-item etc…

A ce stade vous allez devoir trouver votre formulaire et plus précisément la balise button.

Faites un ctrl + F et recherchez l’occurrence « {% endform %} » ou « </form> ». une fois trouvé vous allez copier/coller le code ci-dessous juste au dessus de cette balise.

{%- render 'dg-btn-direct-checkout' -%}

Il ne vous reste plus qu’a cliquer sur le bouton « Enregistrer » en haut à droite pour valider vos modifications !

Vous avez maintenant un nouveau bouton pour permettre de raccourcir votre tunnel de vente au maximum 😉

Si vous souhaitez remplacer votre bouton ajouter au panier par un bouton acheter maintenant c’est ce tutoriel qu’il vous faut: Remplacer mon bouton existant

voir la version vidéo sur youtube

Version Thèmes Vintages (OS 1.0 – avant 2022)

Installation du système

Création du Snippet (Extrait)

Rendez vous sur votre administration et cliquez sur « Boutique en ligne ».

Cliquez sur le bouton Action puis « Modifier le code ».

Trouvez le dossier Extraits (Snippets) et cliquez sur Ajouter une nouvelle ressource et nommez le « dg-btn-direct-checkout ».

Ouvrez le et mettez l’intégralité du code ci-dessous:

<style>
#dg-go-checkout {
margin:15px 0;
width:100%;
color: #111 !important;
background: #f0c14b !important;
background: linear-gradient(#ffe6a8, #e2b43f) !important;
border-color: #a88734 #9c7e31 #846a29 !important;
border-radius: 4px !important;
}
#dg-go-checkout:hover { opacity:0.9; }
</style>

<button class="btn btn-primary" id="dg-go-checkout">Acheter maintenant</button>

<script>
/**
* Module to ajaxify all add to cart forms on the page.
*
* Copyright (c) 2015 Caroline Schnapp (11heavens.com)
* Dual licensed under the MIT and GPL licenses:
* http://www.opensource.org/licenses/mit-license.php
* http://www.gnu.org/licenses/gpl.html
*
*/
$( "#dg-go-checkout" ).click(function() {

Shopify.AjaxifyCart = (function($) {

// Some configuration options.
// I have separated what you will never need to change from what
// you might change.

var _config = {

// What you might want to change
addingToCartBtnLabel: 'Commande en cours...',
soldOutBtnLabel: 'Sold Out',
howLongTillBtnReturnsToNormal: 1000, // in milliseconds.
cartCountSelector: '.cart-count, #cart-count a:first, #gocart p a, #cart .checkout em, .item-count',
cartTotalSelector: '#cart-price',
// 'aboveForm' for top of add to cart form,
// 'belowForm' for below the add to cart form, and
// 'nextButton' for next to add to cart button.
feedbackPosition: 'nextButton',

// What you will never need to change
addToCartBtnSelector: '#dg-go-checkout',
addToCartFormSelector: 'form',
shopifyAjaxAddURL: '/cart/add.js',
shopifyAjaxCartURL: '/cart.js'
};

// We need some feedback when adding an item to the cart.
// Here it is.
var _showFeedback = function(success, html, $addToCartForm) {
$('.ajaxified-cart-feedback').remove();
var feedback = '<p class="ajaxified-cart-feedback ' + success + '">' + html + '</p>';
switch (_config.feedbackPosition) {
case 'aboveForm':
$addToCartForm.before(feedback);
break;
case 'belowForm':
$addToCartForm.after(feedback);
break;
case 'nextButton':
default:
$addToCartForm.find(_config.addToCartBtnSelector).after(feedback);
break;
}
// If you use animate.css
// $('.ajaxified-cart-feedback').addClass('animated bounceInDown');
$('.ajaxified-cart-feedback').slideDown();
};
var _setText = function($button, label) {
if ($button.children().length) {
$button.children().each(function() {
if ($.trim($(this).text()) !== '') {
$(this).text(label);
}
});
}
else {
$button.val(label).text(label);
}
};
var _init = function() {
$(document).ready(function() {

$(_config.addToCartFormSelector).submit(function(e) {
e.preventDefault();
var $addToCartForm = $(this);
var $addToCartBtn = $addToCartForm.find(_config.addToCartBtnSelector);
_setText($addToCartBtn, _config.addingToCartBtnLabel);
$addToCartBtn.addClass('disabled').prop('disabled', true);
// Add to cart.
$.ajax({
url: _config.shopifyAjaxAddURL,
dataType: 'json',
type: 'post',
data: $addToCartForm.serialize(),
success: function(itemData) {
// Re-enable add to cart button.
$addToCartBtn.addClass('inverted');
window.location.href = "/checkout";
window.setTimeout(function(){
$addToCartBtn.prop('disabled', false).removeClass('disabled').removeClass('inverted');

}, _config.howLongTillBtnReturnsToNormal);
// Update cart count and show cart link.
$.getJSON(_config.shopifyAjaxCartURL, function(cart) {
if (_config.cartCountSelector && $(_config.cartCountSelector).size()) {
var value = $(_config.cartCountSelector).html() || '0';
$(_config.cartCountSelector).html(value.replace(/[0-9]+/,cart.item_count)).removeClass('hidden-count');
}
if (_config.cartTotalSelector && $(_config.cartTotalSelector).size()) {
if (typeof Currency !== 'undefined' && typeof Currency.moneyFormats !== 'undefined') {
var newCurrency = '';
if ($('[name="currencies"]').size()) {
newCurrency = $('[name="currencies"]').val();
}
else if ($('#currencies span.selected').size()) {
newCurrency = $('#currencies span.selected').attr('data-currency');
}
if (newCurrency) {
$(_config.cartTotalSelector).html('<span class=money>' + Shopify.formatMoney(Currency.convert(cart.total_price, "{{ shop.currency }}", newCurrency), Currency.money_format[newCurrency]) + '</span>');
}
else {
$(_config.cartTotalSelector).html(Shopify.formatMoney(cart.total_price, "{{ shop.money_format | remove: "'" | remove: '"' }}"));
}
}
else {
$(_config.cartTotalSelector).html(Shopify.formatMoney(cart.total_price, "{{ shop.money_format | remove: "'" | remove: '"' }}"));
}
};
});
},
error: function(XMLHttpRequest) {
var response = eval('(' + XMLHttpRequest.responseText + ')');
response = response.description;
if (response.slice(0,4) === 'All ') {
_showFeedback('error', response.replace('All 1 ', 'All '), $addToCartForm);
$addToCartBtn.prop('disabled', false);
_setText($addToCartBtn, _config.soldOutBtnLabel);
$addToCartBtn.prop('disabled',true);
}
else {
_showFeedback('error', '<i class="fa fa-warning"></i> ' + response, $addToCartForm);
$addToCartBtn.prop('disabled', false).removeClass('disabled');
_setText($addToCartBtn, _config.addToCartBtnLabel);
}
}
});
return false;
});
});
};
return {
init: function(params) {
// Configuration
params = params || {};
// Merging with defaults.
$.extend(_config, params);
// Action
$(function() {
_init();
});
},
getConfig: function() {
return _config;
}
}
})(jQuery);

Shopify.AjaxifyCart.init();

});

</script>

Par défaut j’ai mis le style d’un bouton Amazon mais vous pouvez reprendre la main sur les couleurs. Pour ce faire regardez la vidéo tout en bas 😉

Placement du bouton

Trouvez le dossier Sections et cliquez sur fichier « product-template.liquid », si vous ne l’avez pas allez dans Templates – « product.liquid » ou dans section « product-template.liquid » sur Dawn c’est le fichier « main-product.liquid ». Dans certains cas le formulaire d’achat peut se trouver dans un fichier du dossier Extraits (Snippets) généralement product-form… ou product-grid-item etc…

A ce stade vous allez devoir trouver votre formulaire et plus précisément la balise button.

Faites un ctrl + F et recherchez l’occurrence « {% endform %} » ou « </form> ». une fois trouvé vous allez copier/coller le code ci-dessous juste au dessus de cette balise.

{% include "dg-btn-direct-checkout" %}

Il ne vous reste plus qu’a cliquer sur le bouton « Enregistrer » en haut à droite pour valider vos modifications !

Vidéo pour les thèmes Vintages

Lien ancienne version

Bon tuto à tous !

Inclus dans Speedfly
Merci de me laisser une petite note 😉
[Note moyenne de: 5 sur 12 votes]

Besoin d'aide ?

Vous avez un problème pour faire fonctionner ce tutoriel ou vous avez un besoin spécifique ?
Nous pouvons le faire pour vous ! pour ce faire merci de prendre contact avec notre équipe.

En savoir plus

🤗 Vous souhaitez me remercier pour mes Tutos ?

Cliquez sur le bouton ci-dessous pour m'encourager à continuer 😉

Payer un Café à Dgeo Dev

Besoin de déléguer votre SAV ?

Si vous avez besoin d'une personne pour gérer votre SAV j'ai la perle rare 😉 contactez moi en MP ou cliquez sur le bouton ci-dessous:

Je veux déléguer mon SAV

🤗 Vous souhaitez me remercier pour mes Tutos ?

Cliquez sur le bouton ci-dessous pour m'encourager à continuer 😉

Payer un Café à Dgeo Dev

Cet article a 55 commentaires

  1. Hey merci pour ce nouveau tuto 🙂 on en avait parlé en plus 🙂 je l’ai bien installé mais il y a pas moyen de le rendre vibrant comme le ajouter au panier?

    1. Hello, répondu en MP 😉

  2. Salut, j’ai bien le bouton mais quand on clique dessus c’est le bouton « ajouter au panier qui s’anime (chargement en cours avec le cercle de chargement) et ça ne me fait pas passer à la caisse. Ça fait un ajout au panier.

    1. Hello, étrange surement un conflit avec ton thème. Faudrait voir ça plus en détail en MP 🙂

      1. Pareil aussi pour mon cas, j’ai bien suivi le tuto mais quand on clique sur le bouton que je viens d’ajouter c’est le bouton « ajouter au panier qui s’anime. Ça fait un ajout au panier et non acheter maintenant

        1. MP au besoin 😉

  3. Merci pour ce tuto en revanche ça ne fonctionne pas pour moi ça me met la phrase suivante : Liquid error (sections/product-template.liquid line 241): Could not find asset snippets/direct-checkout.liquid

    1. Hello, il manque une étape 😉 reprends le tuto depuis le début

  4. Bonjour,

    j’ai le thème debutify 2.02 je vois le bouton, mais il ne lance rien lorsque je clique dessus…

    merci

    1. Hello, désolé je ne connais pas ce thème 🙁 peut être voir avec leur support 🙂

      1. Bonjour et merci pour t’es video qui nous apportent tant ! j’ai utiliser ton code pour ajouter le bouton « acheter maintenant » car il n’y était pas sur le format téléphone par contre bizarrement sur le format ordinateur il y était déjà . Donc en installant ton code j’ai pu le mettre sur le format smatphone ( cool ) mais du coup il s’est mis en deux fois sur le format ordi. Aurais tu une manip a me conseiller sans vouloir abuser de ta générosité .

        1. Bonjour, étrange… surement le fonctionnement du thème 🙁 faudrait voir le pourquoi du comment directement avec leur support car je n’ai pas la moindre idée pour le coup 🙂

  5. Merci de votre réponse, je viens de tester avec Brooklyn, c’est pareil 🙁

    1. Essayer de passer en mode de panier de type page si c’est possible, ca pourrait résoudre le problème 😉

  6. merci, ça marche 🙂

  7. Bonjour,

    Ca ne fonctionne pas pour moi, j’ai le theme Debut et le bouton acheter maintenant ajoute au panier uniquement.
    merci

    1. hello, essaie de passer en type de page panier 🙂

  8. Merci pour ce tuto mais ça ne fonctionne pas pour moi ça me met la phrase suivante : Liquid error (sections/product-template.liquid line 201): Could not find asset snippets/direct-checkout.liquid
    J’ai déja réessaye plusieurs fois ..

    1. C’est qu’il ne trouve pas le snippet 🙂 le nom ou l’appel doit être mal noté

  9. une petite question, pour center ou corriger la largeur que je dois faire??

    1. Hello, modifier la valeur width:100%; selon la largeur voulue

  10. Bonjour, j’ai le même problème que certain. Quand je clik sur acheter maintenant sa ajoute au panier. J’ai lue les réponses donner et le truc c’est que comment faire pour passer en « type de page panier ». Je cherche mais je voie pas comment faire cela. Merci beaucoup pour t’est multiple tuto, c’est le seul ou j’ai eu un probléme.

  11. Bonjours, comment passer en type de page panier ? merci

    1. Hello, logiquement c’est dans options du thèmes – Type de panier

  12. BONJOUR ET MERCI POUR VOS TUTOS VOUS M’AVEZ BEAUCOUP AIDER MON SEUL SOUCI ET QUE LE BOUTON MAINTENANT ACHETER EST TROP PETIT PAR RAPPORT AU BOUTON AJOUTER AU PANIER ILS N’ONT PAS LA MÊME TAILLE

    1. Hello et merci pour le commentaire 🙂 il faudrait voir avec le support du thème utilisé car le code est tjs différent. Il y a certainement une class spécifique à rajouter 🙂

  13. Salut, et merci pour tes nombreux tips !
    J’utilise une appli qui remplace le check-out de shopify.
    Comment faire que le bouton mène à cette page de check-out plutôt que celle de shopify (si ça se trouve il faut juste mettre un URL spécifique dans tes lignes de code) ?

    1. Hello, c’est délicat selon l’app utilisée. généralement c’est compliqué mais le mieux est de demander au support de l’app en question pour savoir sil ils peuvent vous aider 🙂

  14. Salut Mister, j’ai posé une question ce matin mais j’ai trouvé la réponse te casse pas la tête.
    J’ai une autre question : Comment mettre ce bouton juste SOUS le bouton « Ajouter au panier » ? (ce qui serait bien mieux) ?
    Merci

    1. Hello, ok super 🙂 il suffit de mettre au dessus un code <br /> ou englober le code d’une div du genre <div style="clear:both;width:100%;overflow:hidden;"></div>

  15. … je sais j’abuse mais c’est mon dernier message !!
    tu vois sur mon site, la police n’est pas la même pour ton bouton que celui de « ajouter au panier ».
    je vois bien sur ton code pour changer la couleur du texte, mais pour la police ?

    Merci !!!

    1. La malheureusement c’est au niveau du thème qu’il faut gérer cela 🙂 faudrait demander au support de celui-ci 😉

  16. Salut Geo ! merci pour ton contenues ! Cependant j’ai réaliser le tutoriel et un problème apparaît (Brooklyn):

    « Il semble que cette page redirige vers une page qui n’est pas compatible avec cet éditeur. Pour vous assurer que votre redirection n’interfère pas avec l’édition, remplacez window.location.href = par window.top.location.href = dans le code JavaScript de votre thème à ici. »

    Merci de m’aider !!

    1. Hello, ça arrive lorsque l’on teste en mode préview logiquement ce problème n’est pas grave et le système doit fonctionner 🙂

      1. Comment te dire que t’es le meilleur !

        1. Hello, merci 😉

  17. Hello je viens de réaliser la manipulation est malheureusement j’ai un soucis quand je clique sur le bouton acheter maintenant il me renvoi sur la page ajouter au panier. J’ai beau retourner la situation je n’arrive pas. Merci pour ton aide

    1. Hello, étrange il doit manquer quelque chose ou alors le thème n’est pas compatible 🙁 il faudrait voir avec le support de votre thème pour plus de détails 🙂 bonne journée.

  18. Salut, merci pour ce super tuto mais malheureusement ça na marche pas pour moi ;(
    j’utilise le thème début et même lorsque je teste « toto » il se passe rien 🙁
    le panier est déjà en mode page pourtant
    une idée stp?

    1. Hello, il faut essayer dans d’autres fichiers alors afin de trouver le bon emplacement

  19. Hello!
    J’aimerais que les boutons « Ajouter au panier » et « Acheter maintenant » soient de la même largeur que le trust badge comme sur votre site de démonstration. Comment faire ?

    Merci d’avance.

    Will

    1. Hello, il faut regarder le nombre de pixel que les 2 boutons prennent et créer une image en conséquence 🙂

      1. Hello, merci pour la réponse,

        Où est-ce que je peux trouver la taille des boutons en pixel ? je ne le vois pas dans product-template.liquid.
        Je pensais que l’on pouvait avoir un ajustement automatique des boutons pour qu’ils prennent la largeur totale entre l’image de gauche et la marge de droite.

        Merci d’avance.

  20. Hello, merci beaucoup pour tes tutos géniales qui m’aident tellement !

    Tout comme les commentaires plus haut, j’ai vu qu’il fallait passer le panier en mode page sauf qu’il y a pas de changement possible dans le thème Narrative.
    Est ce que tu aurais un code à intégrer que tu pourrais nous conseiller ? 🙂

    Encore un grand merci !

  21. Oups, j’ai rien dit je viens de réussir ! Encore merci pour tes tutos !

    1. Hello et super ! bravo 🙂

  22. Salut dgeo, quand on clique dessus (acheter maintenant) ça n’emmène pas au checkout 🙁 as-tu une idée??

    1. Hello, surement que le thème ne l’autorise pas ou que tu es en mode modal ou ajout sans aller directement sur la page du panier ?

  23. Comment faire sur la page du panier ?? ou bien Peux-tu le faire sur ma boutique directement?

    1. Essaie de demander au support du thème sinon tout bon thème propose cette option nativement 🙂

      1. D’acc, merci pour ta reponse 🙂

  24. Bonjour Dgeo Dev

    Je souhaite ajouter un bouton « demander votre devis » sur certains produits de mon site web

    Pourriez-vous me dire comment on peut faire ?

    1. Hello, c’est assez délicat… L’idéal serait d’utiliser les thèmes 2.0 de shopify comme speedfly permettant d’utiliser au mieux la contextualisation des contenus en utilisant les champ méta shopify.

  25. Bonjour, a priori le code ne fonctionne plus, meme si on n’est sous le theme Speed Ecom

    1. Hello, effectivement un bug temporaire c’est corrigé ! les codes s’afficheront désormais correctement 🙂

Laisser un commentaire

Fermer le menu
×
×

Panier