{"id":2526,"date":"2025-06-11T12:46:28","date_gmt":"2025-06-11T17:46:28","guid":{"rendered":"https:\/\/itishoemath.com\/purchase\/"},"modified":"2025-07-21T11:17:07","modified_gmt":"2025-07-21T16:17:07","slug":"achat","status":"publish","type":"page","link":"https:\/\/itishoemath.com\/fr\/achat\/","title":{"rendered":"Achat"},"content":{"rendered":"<script>\n\n  \/\/ Normalize pathname (remove trailing slash)\n  var path = window.location.pathname.replace(\/\\\/$\/, '');\n\n  \/\/ If NOT on '\/purchase' or '\/en\/purchase'\n  if (path !== '\/purchase' && path !== '\/en\/purchase') {\n    \/\/ Preserve current query string and hash\n    var query = window.location.search || '';\n    var hash = window.location.hash || '';\n\n    \/\/ Go to English purchase page, keeping parameters\n    var purchaseURL = window.location.origin + '\/en\/purchase\/' + query + hash;\n    if (window.location.pathname !== '\/en\/purchase\/') {\n      window.location.href = purchaseURL;\n    }\n  }\n\n<\/script>\n\n<script>\ndocument.addEventListener('DOMContentLoaded', function() {\n  \/\/ Hide TranslatePress language switcher\n  var floater = document.getElementById('trp-floater-ls');\n  if (floater) {\n    floater.style.display = 'none';\n  }\n});\n<\/script>\n\n\n\n<script>\n\n\n\n\/\/ random password on all new users, prefer they use magic link (less friction)\n(function() {\n  const charset = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\";\n\n  function generatePassword(length = 32) {\n    let password = \"\";\n    for (let i = 0; i < length; i++) {\n      password += charset.charAt(Math.floor(Math.random() * charset.length));\n    }\n    return password;\n  }\n\n  const observer = new MutationObserver((mutations, obs) => {\n    const input = document.getElementById('password');\n    if (input) {\n      input.value = generatePassword();\n      obs.disconnect(); \/\/ stop observing once found and handled\n    }\n  });\n\n  observer.observe(document.body, {\n    childList: true,\n    subtree: true\n  });\n})();\n<\/script>\n\n\n\n<style>\n\n.llms-coupon-wrapper { display: none !important; }\n\n.llms-form-heading {\n    all: unset;\n    font-size: inherit;\n    font-weight: inherit;\n    margin: inherit;\n    padding: inherit;\n}\n.llms-notice {\n    display: none !important;\n}\n\/* Force Stripe Elements input fields to be readable *\/\ninput.StripeElement,\n.StripeElement {\n    color: #000 !important;\n    background-color: #fff !important;\n    padding: 10px !important;\n    border-radius: 4px;\n    border: 1px solid #ccc;\n}\n\n\/* Optional: Focus and error states for better UX *\/\n.StripeElement--focus {\n    border-color: #0073aa;\n}\n\n.StripeElement--invalid {\n    border-color: #cc0000;\n}\n\/* LifterLMS password input *\/\ninput.llms-field-input#password,\ninput.llms-field-input#password:focus,      \/* user is typing *\/\ninput.llms-field-input#password:active,     \/* clicked *\/\ninput.llms-field-input#password.llms-error, \/* failed validation *\/\ninput.llms-field-input#password:-webkit-autofill {  \/* Chrome autofill *\/\n    color: #ffffff !important;              \/* text turns white *\/\n}\n\n\/* Optional \u2013 make the placeholder text readable too *\/\ninput.llms-field-input#password::placeholder {\n    color: #e0e0e0;\n}\n\n#password {\n  display: none !important;\n}\n\n.llms-form-field.type-password,\n.llms-description {\n  display: none !important;\n}\n\n.elementor-1511 .elementor-element.elementor-element-7bbc64b .elementor-heading-title {\n    font-family: \"HM Harting\", Sans-serif !important;\n    font-size: 60px !important;\n    font-weight: 500 !important;\n    text-transform: none !important;\n    text-decoration: none !important;\n    line-height: 1.1em !important;\n    letter-spacing: 0px !important;\n    word-spacing: 0em !important;\n    color: var( --e-global-color-primary ) !important;\n}\n\n.elementor-1511 .elementor-element.elementor-element-7bbc64b .elementor-heading-title h6 {\n    font-size: 36px !important;\n    font-weight: 500 !important;\n}\n\n.elementor-1511 .elementor-element.elementor-element-7bbc64b .elementor-heading-title h6 {\n    font-size: 60px !important;\n    font-weight: 600 !important;\n}\n<\/style>\n\n\n<div class=\"lifterlms\"><div class=\"llms-checkout-wrapper\">Votre carte est actuellement vide. Cliquez sur <a href=\"https:\/\/itishoemath.com\/fr\/cours-2\/\"> ici<\/a> pour commencer.<\/div><!-- .llms-checkout-wrapper --><\/div>\n\n\n<script>\n\/**\n * Hold user on ?plan=2532 until enrollment finishes,\n * then send them back to the page they came from.\n *\n * Place in WPCode as a JavaScript snippet, \u201cSite Front-end\u201d.\n * Scope \u2192 Entire site   |   Priority \u2192 After Body Open (or Footer)\n *\/\n(function () {\n  const url = new URL(window.location.href);\n  const qs = url.searchParams;\n\n  const isEnrollPage = qs.get('plan') === '2532';\n  const hasRefreshed = sessionStorage.getItem('llms_enrollrefresh') === '1';\n  const currentPage = url.origin + url.pathname;\n  const cameFrom = document.referrer || '\/';\n\n  \/\/ STEP 1 \u2014 On initial enroll page, intercept AJAX and reload on success\n  if (isEnrollPage && !hasRefreshed) {\n    \/\/ Save referring page\n    if (!sessionStorage.getItem('llms_backto')) {\n      sessionStorage.setItem('llms_backto', cameFrom);\n    }\n\n    \/\/ Intercept AJAX\n    const origFetch = window.fetch;\n    window.fetch = async function (...args) {\n      const response = await origFetch.apply(this, args);\n      const [reqUrl] = args;\n      const isLifter = typeof reqUrl === 'string' && reqUrl.includes('lifterlms');\n\n      if (isLifter && response.ok) {\n        try {\n          const json = await response.clone().json();\n          const success = json?.success || json?.data?.result === 'success';\n          if (success) {\n            \/\/ Trigger real browser refresh\n            sessionStorage.setItem('llms_enrollrefresh', '1');\n            window.location.reload();\n          }\n        } catch (e) {\n          console.error('LifterLMS AJAX success parse failed:', e);\n        }\n      }\n\n      return response;\n    };\n  }\n\n  \/\/ STEP 2 \u2014 After reload, show overlay, wait for notification, then redirect\n  if (hasRefreshed) {\n    const overlay = document.createElement('div');\n    overlay.id = 'llms-waiting-overlay';\n    overlay.style = `\n      position:fixed;inset:0;z-index:99999;\n      display:flex;align-items:center;justify-content:center;\n      background:rgba(255,255,255,0.96);\n      font:700 1.2rem sans-serif;\n    `;\n    overlay.textContent = 'Finalizing your enrollment\u2026';\n    document.body.appendChild(overlay);\n\n    const backTo = sessionStorage.getItem('llms_backto') || '\/';\n\n    const redirect = () => {\n      if (overlay) overlay.remove();\n      sessionStorage.removeItem('llms_enrollrefresh');\n      sessionStorage.removeItem('llms_backto');\n      window.location.href = backTo;\n    };\n\n    \/\/ Use polling instead of MutationObserver (more reliable here)\n    const interval = setInterval(() => {\n      const notif = document.querySelector('.llms-notification[data-trigger=\"enrollment\"]');\n      if (notif && notif.textContent.includes('Membership enrollment success')) {\n        clearInterval(interval);\n        setTimeout(redirect, 1500); \/\/ short delay so user sees it\n      }\n    }, 300);\n\n    \/\/ Failsafe timeout after 60 seconds\n    setTimeout(() => {\n      clearInterval(interval);\n      redirect();\n    }, 60000);\n  }\n})();\n\n\n<\/script>\n\n\n\n<script>\n\n\/\/ 1\n(function () {\n  const fullURL = window.location.href;\n  const qs = new URLSearchParams(window.location.search);\n  if (qs.get('plan') !== '2532') return;\n\n  let overlayShown = false;\n\n  function showOverlay() {\n    if (overlayShown) return;\n    overlayShown = true;\n\n    const overlay = document.createElement('div');\n    overlay.style = `\n      position:fixed;inset:0;z-index:99999;\n      background:rgba(255,255,255,0.97);\n      display:flex;flex-direction:column;align-items:center;justify-content:center;\n      font-family:sans-serif;text-align:center;padding:2rem;\n    `;\n    overlay.innerHTML = `\n      <h2 style=\"font-size:1.5rem;margin-bottom:1rem;\">\u2705 You're enrolled!<\/h2>\n      <p style=\"margin-bottom:1.5rem;\">Click below to reload this page and continue.<\/p>\n      <button id=\"llms-go-home\" style=\"padding:0.75rem 1.5rem;font-size:1rem;cursor:pointer;\">\n        \ud83d\udd01 Reload Page\n      <\/button>\n    `;\n    document.body.appendChild(overlay);\n\n    document.getElementById('llms-go-home').addEventListener('click', function () {\n      window.location.href = fullURL;\n    });\n  }\n\n  \/\/ \u2705 PART 1: Watch for successful form submit\n  document.addEventListener('submit', function (e) {\n    const form = e.target;\n    if (!form.matches('form.llms-checkout, form.llms-access-plan-form') || overlayShown) return;\n\n    const spinner = document.createElement('div');\n    spinner.textContent = 'Enrolling\u2026 please wait';\n    spinner.style = `\n      position:fixed;inset:0;display:flex;align-items:center;justify-content:center;\n      background:rgba(255,255,255,0.92);\n      font:700 1.4rem sans-serif;\n      z-index:99999;\n    `;\n    document.body.appendChild(spinner);\n\n    setTimeout(() => {\n      spinner.remove();\n      showOverlay();\n    }, 3000);\n  }, true);\n\n  \/\/ \u2705 PART 2: On reload \u2014 if email is prefilled, show overlay again\n  \/\/ \u2705 But if #email_address is missing, redirect to home\n  window.addEventListener('DOMContentLoaded', function () {\n    const emailField = document.getElementById('email_address');\n\n    if (!emailField) {\n      \/\/ Enrollment complete; skip this page\n      window.location.href = '\/';\n      return;\n    }\n\n    if (emailField.value.trim() && !overlayShown) {\n      setTimeout(() => {\n        showOverlay();\n      }, 1000);\n    }\n  });\n})();\n\n\n\n<\/script>\n\n\n\n<script>\n    document.addEventListener(\"DOMContentLoaded\", function () {\n        if (window.location.pathname.includes('\/purchase\/')) {\n            var consentCheckbox = document.querySelector('#llms_ck_consent');\n            if (consentCheckbox && consentCheckbox.closest('div.llms-form-field')) {\n                consentCheckbox.closest('div.llms-form-field').style.display = 'none';\n            }\n        }\n    });\n    <\/script>\n\n\n\n<script>\ndocument.addEventListener('DOMContentLoaded', function() {\n  var first = document.querySelector('div.llms-form-field label[for=\"first_name\"]')\n    ?.closest('div.llms-form-field');\n  if (first && !document.querySelector('div.llms-form-field label[for=\"last_name\"]')) {\n    first.insertAdjacentHTML('afterend',\n      '<div class=\"clear\"><\/div><div class=\"llms-form-field type-text llms-cols-6 llms-cols-last llms-is-required\"><label for=\"last_name\">Last Name<span class=\"llms-required\">*<\/span><\/label><input class=\"llms-field-input\" id=\"last_name\" name=\"last_name\" required=\"required\" type=\"text\"><\/div>'\n    );\n  }\n});\n<\/script>\n\n\n\n\n\n<p>Pour les non-anglophones :<\/p>\n\n\n\n<p>La page d'achat est r\u00e9serv\u00e9e uniquement \u00e0 l'anglais par notre fournisseur de pages. Le montant de la facture est en dollars am\u00e9ricains.<\/p>\n\n\n\n<p><br>La page d'achat est limit\u00e9e \u00e0 l'anglais uniquement par notre prestataire de paiement. Le montant factur\u00e9 est en dollars am\u00e9ricains.<\/p>\n\n\n\n<p><br>\u8cfc\u5165\u30da\u30fc\u30b8\u306f\u6c7a\u6e08\u30d7\u30ed\u30d0\u30a4\u30c0\u30fc\u306e\u90fd\u5408\u306b\u3088\u308a\u82f1\u8a9e\u306e\u307f\u5229\u7528\u53ef\u80fd\u3067\u3059\u3002\u8acb\u6c42\u984d\u306f\u7c73\u30c9\u30eb\u3067\u8868\u793a\u3055\u308c\u307e\u3059\u3002<\/p>\n\n\n\n<p><br>La page d'achat est convertie en anglais \u00e0 la demande de notre fournisseur de services de paiement. La valeur ajout\u00e9e est exprim\u00e9e en dollars am\u00e9ricains.<\/p>","protected":false},"excerpt":{"rendered":"<p>Pour les non-anglophones : La page d'achat est r\u00e9serv\u00e9e uniquement \u00e0 l'anglais par notre fournisseur de pages. El importe del cobro est\u00e1 en d\u00f3lares estadounidenses. La page d'achat est limit\u00e9e \u00e0 l'anglais uniquement par notre prestataire de paiement. Le montant factur\u00e9 est en dollars am\u00e9ricains. \u8cfc\u5165\u30da\u30fc\u30b8\u306f\u6c7a\u6e08\u30d7\u30ed\u30d0\u30a4\u30c0\u30fc\u306e\u90fd\u5408\u306b\u3088\u308a\u82f1\u8a9e\u306e\u307f\u5229\u7528\u53ef\u80fd\u3067\u3059\u3002\u8acb\u6c42\u984d\u306f\u7c73\u30c9\u30eb\u3067\u8868\u793a\u3055\u308c\u307e\u3059\u3002 A p\u00e1gina de compra est\u00e1 restrita ao ingl\u00eas por [...]<\/p>","protected":false},"author":6,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-2526","page","type-page","status-publish","hentry"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/itishoemath.com\/fr\/wp-json\/wp\/v2\/pages\/2526","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/itishoemath.com\/fr\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/itishoemath.com\/fr\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/itishoemath.com\/fr\/wp-json\/wp\/v2\/users\/6"}],"replies":[{"embeddable":true,"href":"https:\/\/itishoemath.com\/fr\/wp-json\/wp\/v2\/comments?post=2526"}],"version-history":[{"count":23,"href":"https:\/\/itishoemath.com\/fr\/wp-json\/wp\/v2\/pages\/2526\/revisions"}],"predecessor-version":[{"id":4513,"href":"https:\/\/itishoemath.com\/fr\/wp-json\/wp\/v2\/pages\/2526\/revisions\/4513"}],"wp:attachment":[{"href":"https:\/\/itishoemath.com\/fr\/wp-json\/wp\/v2\/media?parent=2526"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}