{"id":856,"date":"2019-10-25T13:43:09","date_gmt":"2019-10-25T11:43:09","guid":{"rendered":"http:\/\/www.trikomaseeds.com\/einkaufswagen\/"},"modified":"2026-09-23T10:47:28","modified_gmt":"2026-09-23T08:47:28","slug":"einkaufswagen","status":"publish","type":"page","link":"https:\/\/www.trikomaseeds.com\/de\/einkaufswagen\/","title":{"rendered":"Einkaufswagen"},"content":{"rendered":"\n\n<script id=\"tk-cache-guard\">\n\/* Trikoma 2026: parche contra la cache del proxy del hosting.\n   El proxy (x-proxy-cache: HIT) guarda \/carrito\/ y \/finalizar-compra\/ e ignora las\n   cabeceras no-cache de WooCommerce, asi que el cliente ve \"tu carrito esta vacio\"\n   aunque tenga productos. Esto recarga una sola vez con un parametro unico (MISS).\n   SOLUCION DEFINITIVA: que el hosting excluya \/carrito\/, \/finalizar-compra\/ y \/mi-cuenta\/\n   (y sus traducciones) de la cache. Cuando lo hagan, este script no hace nada. *\/\n(function(){\n  try{\n    var m = document.cookie.match(\/(?:^|;\\s*)woocommerce_items_in_cart=(\\d+)\/);\n    var n = m ? parseInt(m[1], 10) : 0;\n    if (!n) return;                                   \/\/ el carrito esta vacio de verdad\n    var tkBusted = \/[?&]tkfresh=\/.test(location.search); \/\/ ya venimos de una recarga\n    var real = document.querySelector('.woocommerce-cart-form, form.checkout, .woocommerce-checkout');\n    if (!real && !tkBusted) {                         \/\/ pagina cacheada y obsoleta\n      location.replace(location.pathname + (location.search ? location.search + '&' : '?') + 'tkfresh=' + Date.now());\n      return;\n    }\n    \/\/ Pagina correcta: que el paso al checkout tampoco caiga en la cache.\n    document.querySelectorAll('a.checkout-button, .wc-proceed-to-checkout a, a[href*=\"finalizar-compra\"], a[href*=\"\/checkout\"], a[href*=\"\/validation\"], a[href*=\"\/zur-kasse\"], a[href*=\"\/completa-transazione\"], a[href*=\"\/concluir\"], a[href*=\"oformit-zakaz\"]').forEach(function(a){\n      if (!a.getAttribute('href') || \/tkfresh=\/.test(a.href)) return;\n      a.href += (a.href.indexOf('?') === -1 ? '?' : '&') + 'tkfresh=' + Date.now();\n    });\n  }catch(e){}\n})();\n<\/script>\n\n\n<script id=\"tk-promo3x2-autoapply\">\n\/* Trikoma 2026 (v3, 22\/09\/2026): 3x2 real. Corrige el fallo del v2: un cupon\n   plano de 33,33% daba descuento con solo 2 unidades y no coincidia con\n   \"el mas barato gratis\" cuando los precios eran distintos (6\/100\/1000\n   semillas, Packs Mix). Ahora este script calcula el carrito el mismo:\n   junta todas las unidades elegibles (precio 20\/40\/240\/1200 \u20ac), exige al\n   menos 3, y hace gratis exactamente las mas baratas (una de cada grupo de\n   3), sea el orden en que se anadieron y sea el formato que sea. Aplica\n   esto usando cupones \"ranura\" fijos (tk3x2-free-<precio>-<n>, hasta 4 por\n   nivel) en vez de un cupon con importe variable, que WooCommerce no\n   permite por API publica. Si el carrito cambia y ya no corresponden los\n   mismos cupones, los quita y pone los correctos. *\/\n(function(){\n  try{\n    var TIERS = [20, 40, 240, 1200];\n    var SLOTS = 4;\n\n    function getCookie(name){\n      var m = document.cookie.match(new RegExp('(?:^|; )' + name + '=([^;]*)'));\n      return m ? decodeURIComponent(m[1]) : '';\n    }\n\n    var cartHash = getCookie('woocommerce_cart_hash');\n    if (!cartHash) return;\n\n    var attemptKey = 'tk_promo3x2_v3_' + cartHash;\n    if (sessionStorage.getItem(attemptKey)) return;\n\n    fetch('\/wp-json\/wc\/store\/v1\/cart', { credentials: 'same-origin' })\n      .then(function(r){ return r.json(); })\n      .then(function(cart){\n        var units = [];\n        (cart.items || []).forEach(function(item){\n          var price = parseInt((item.prices && item.prices.price) || '0', 10) \/ 100;\n          var esNivel = TIERS.some(function(t){ return Math.abs(price - t) < 0.01; });\n          if (!esNivel) return;\n          for (var i = 0; i < item.quantity; i++) units.push(price);\n        });\n\n        var freeCount = Math.floor(units.length \/ 3);\n        units.sort(function(a, b){ return a - b; });\n        var freeUnits = units.slice(0, freeCount);\n\n        var need = {};\n        freeUnits.forEach(function(p){ need[p] = (need[p] || 0) + 1; });\n\n        var already = (cart.coupons || []).map(function(c){ return c.code; }).filter(function(c){\n          return c.indexOf('tk3x2-free-') === 0;\n        });\n\n        var target = [];\n        Object.keys(need).forEach(function(p){\n          var n = Math.min(need[p], SLOTS);\n          for (var i = 1; i <= n; i++) target.push('tk3x2-free-' + p + '-' + i);\n        });\n\n        var toAdd = target.filter(function(c){ return already.indexOf(c) === -1; });\n        var toRemove = already.filter(function(c){ return target.indexOf(c) === -1; });\n\n        if (!toAdd.length &#038;&#038; !toRemove.length) { sessionStorage.setItem(attemptKey, '1'); return; }\n\n        var params = window.wc_cart_params || window.wc_checkout_params || window.woocommerce_params;\n        if (!params || !params.wc_ajax_url) return;\n\n        sessionStorage.setItem(attemptKey, '1');\n\n        var applyUrl = params.wc_ajax_url.toString().replace('%%endpoint%%', 'apply_coupon');\n        var removeUrl = params.wc_ajax_url.toString().replace('%%endpoint%%', 'remove_coupon');\n\n        function post(url, data){\n          var body = new URLSearchParams();\n          Object.keys(data).forEach(function(k){ body.set(k, data[k]); });\n          return fetch(url, { method: 'POST', credentials: 'same-origin', body: body }).then(function(r){ return r.text(); });\n        }\n\n        var chain = Promise.resolve();\n        toRemove.forEach(function(code){\n          chain = chain.then(function(){\n            return post(removeUrl, { security: params.remove_coupon_nonce, coupon: code });\n          });\n        });\n        toAdd.forEach(function(code){\n          chain = chain.then(function(){\n            return post(applyUrl, { security: params.apply_coupon_nonce, coupon_code: code });\n          });\n        });\n        chain.then(function(){ location.reload(); }).catch(function(){});\n      })\n      .catch(function(){});\n  }catch(e){}\n})();\n<\/script>\n\n\n\n<script id=\"tk-cart-pager\">\n\/* Trikoma 2026: paginacion visual del carrito. Si hay mas de PAGE_SIZE lineas\n   de producto, se muestran de PAGE_SIZE en PAGE_SIZE con botones Anterior\/\n   Siguiente en vez de todas de golpe. Solo oculta filas con display:none: el\n   formulario sigue enviando todas las lineas igual, asi que \"Actualizar\n   carrito\" y el paso a caja no se ven afectados. Se vuelve a aplicar tras\n   cualquier actualizacion AJAX del carrito (cambio de cantidad, cupones,\n   eliminar un producto, etc). Cambiar PAGE_SIZE para mostrar mas o menos\n   lineas por pagina. Para revertir, borrar este bloque entero. *\/\n(function(){\n  var PAGE_SIZE = 5;\n  var currentPage = 1;\n  var mo = null;\n\n  var STRINGS = {\n    es: {prev:'Anterior', next:'Siguiente', page:function(x,y){return 'Pagina ' + x + ' de ' + y;}},\n    en: {prev:'Previous', next:'Next', page:function(x,y){return 'Page ' + x + ' of ' + y;}},\n    fr: {prev:'Precedent', next:'Suivant', page:function(x,y){return 'Page ' + x + ' sur ' + y;}},\n    de: {prev:'Zuruck', next:'Weiter', page:function(x,y){return 'Seite ' + x + ' von ' + y;}},\n    it: {prev:'Precedente', next:'Successivo', page:function(x,y){return 'Pagina ' + x + ' di ' + y;}},\n    pt: {prev:'Anterior', next:'Proximo', page:function(x,y){return 'Pagina ' + x + ' de ' + y;}},\n    ru: {prev:'\u041d\u0430\u0437\u0430\u0434', next:'\u0414\u0430\u043b\u0435\u0435', page:function(x,y){return '\u0421\u0442\u0440\u0430\u043d\u0438\u0446\u0430 ' + x + ' \u0438\u0437 ' + y;}},\n    el: {prev:'\u03a0\u03c1\u03bf\u03b7\u03b3.', next:'\u0395\u03c0\u03cc\u03bc.', page:function(x,y){return '\u03a3\u03b5\u03bb\u03af\u03b4\u03b1 ' + x + ' \u03b1\u03c0\u03cc ' + y;}}\n  };\n\n  function getStrings(){\n    var lang = (document.documentElement.lang || 'es').toLowerCase();\n    var keys = Object.keys(STRINGS);\n    for (var i = 0; i < keys.length; i++){\n      if (lang.indexOf(keys[i]) === 0) return STRINGS[keys[i]];\n    }\n    return STRINGS.es;\n  }\n\n  function getTable(){\n    return document.querySelector('.woocommerce-cart-form table.shop_table, form.woocommerce-cart-form table.cart, table.woocommerce-cart-form__contents');\n  }\n\n  function removePager(){\n    var old = document.getElementById('tk-cart-pager-ui');\n    if (old &#038;&#038; old.parentNode) old.parentNode.removeChild(old);\n  }\n\n  function attachObserver(table){\n    if (mo) { mo.disconnect(); mo = null; }\n    if (!table || !window.MutationObserver) return;\n    mo = new MutationObserver(schedule);\n    mo.observe(table, { childList: true, subtree: true });\n  }\n\n  function render(){\n    var table = getTable();\n    removePager();\n\n    if (!table) { attachObserver(null); return; }\n\n    var rows = Array.prototype.slice.call(table.querySelectorAll('tbody tr.cart_item'));\n\n    if (rows.length <= PAGE_SIZE) {\n      rows.forEach(function(r){ r.style.display = ''; });\n      currentPage = 1;\n      attachObserver(table);\n      return;\n    }\n\n    var totalPages = Math.ceil(rows.length \/ PAGE_SIZE);\n    if (currentPage > totalPages) currentPage = totalPages;\n    if (currentPage < 1) currentPage = 1;\n\n    var start = (currentPage - 1) * PAGE_SIZE;\n    var end = start + PAGE_SIZE;\n    rows.forEach(function(r, i){\n      r.style.display = (i >= start && i < end) ? '' : 'none';\n    });\n\n    var s = getStrings();\n    var ui = document.createElement('div');\n    ui.id = 'tk-cart-pager-ui';\n    ui.className = 'tk-cart-pager-ui';\n\n    var prevBtn = document.createElement('button');\n    prevBtn.type = 'button';\n    prevBtn.className = 'tk-cart-pager-btn tk-cart-pager-prev';\n    prevBtn.textContent = s.prev;\n    prevBtn.disabled = currentPage <= 1;\n    prevBtn.addEventListener('click', function(){ currentPage--; render(); ui.scrollIntoView({block:'nearest'}); });\n\n    var nextBtn = document.createElement('button');\n    nextBtn.type = 'button';\n    nextBtn.className = 'tk-cart-pager-btn tk-cart-pager-next';\n    nextBtn.textContent = s.next;\n    nextBtn.disabled = currentPage >= totalPages;\n    nextBtn.addEventListener('click', function(){ currentPage++; render(); ui.scrollIntoView({block:'nearest'}); });\n\n    var label = document.createElement('span');\n    label.className = 'tk-cart-pager-label';\n    label.textContent = s.page(currentPage, totalPages);\n\n    ui.appendChild(prevBtn);\n    ui.appendChild(label);\n    ui.appendChild(nextBtn);\n\n    table.parentNode.insertBefore(ui, table.nextSibling);\n    attachObserver(table);\n  }\n\n  function schedule(){\n    clearTimeout(window._tkCartPagerT);\n    window._tkCartPagerT = setTimeout(render, 60);\n  }\n\n  document.addEventListener('DOMContentLoaded', schedule);\n  if (document.readyState !== 'loading') schedule();\n\n  if (window.jQuery) {\n    window.jQuery(document.body).on('updated_wc_div updated_cart_totals wc_cart_fragments_refreshed', schedule);\n  }\n})();\n<\/script>\n<style id=\"tk-cart-pager-style\">\n.tk-cart-pager-ui{display:flex;align-items:center;justify-content:center;gap:16px;margin:18px 0;padding:12px;flex-wrap:wrap;}\n.tk-cart-pager-btn{background:#101310;color:#fff;border:1px solid #697047;border-radius:8px;padding:8px 18px;font-size:14px;cursor:pointer;}\n.tk-cart-pager-btn:hover:not(:disabled){background:#697047;}\n.tk-cart-pager-btn:disabled{opacity:.4;cursor:default;}\n.tk-cart-pager-label{color:#fff;font-size:14px;}\n<\/style>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-856","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Einkaufswagen - Trikoma Seeds<\/title>\n<meta name=\"robots\" content=\"noindex, follow\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Einkaufswagen - Trikoma Seeds\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.trikomaseeds.com\/de\/einkaufswagen\/\" \/>\n<meta property=\"og:site_name\" content=\"Trikoma Seeds\" \/>\n<meta property=\"article:modified_time\" content=\"2026-09-23T08:47:28+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.trikomaseeds.com\/wp-content\/uploads\/2026\/09\/trikoma-seeds-compartir.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"630\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.trikomaseeds.com\\\/de\\\/einkaufswagen\\\/\",\"url\":\"https:\\\/\\\/www.trikomaseeds.com\\\/de\\\/einkaufswagen\\\/\",\"name\":\"Einkaufswagen - Trikoma Seeds\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.trikomaseeds.com\\\/de\\\/#website\"},\"datePublished\":\"2019-10-25T11:43:09+00:00\",\"dateModified\":\"2026-09-23T08:47:28+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.trikomaseeds.com\\\/de\\\/einkaufswagen\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.trikomaseeds.com\\\/de\\\/einkaufswagen\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.trikomaseeds.com\\\/de\\\/einkaufswagen\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"https:\\\/\\\/www.trikomaseeds.com\\\/de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Einkaufswagen\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.trikomaseeds.com\\\/de\\\/#website\",\"url\":\"https:\\\/\\\/www.trikomaseeds.com\\\/de\\\/\",\"name\":\"Trikoma Seeds\",\"description\":\"Semillas de cannabis feminizadas y autoflorecientes para coleccionismo y conservaci\u00f3n gen\u00e9tica\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.trikomaseeds.com\\\/de\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Einkaufswagen - Trikoma Seeds","robots":{"index":"noindex","follow":"follow"},"og_locale":"de_DE","og_type":"article","og_title":"Einkaufswagen - Trikoma Seeds","og_url":"https:\/\/www.trikomaseeds.com\/de\/einkaufswagen\/","og_site_name":"Trikoma Seeds","article_modified_time":"2026-09-23T08:47:28+00:00","og_image":[{"width":1200,"height":630,"url":"https:\/\/www.trikomaseeds.com\/wp-content\/uploads\/2026\/09\/trikoma-seeds-compartir.jpg","type":"image\/jpeg"}],"twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.trikomaseeds.com\/de\/einkaufswagen\/","url":"https:\/\/www.trikomaseeds.com\/de\/einkaufswagen\/","name":"Einkaufswagen - Trikoma Seeds","isPartOf":{"@id":"https:\/\/www.trikomaseeds.com\/de\/#website"},"datePublished":"2019-10-25T11:43:09+00:00","dateModified":"2026-09-23T08:47:28+00:00","breadcrumb":{"@id":"https:\/\/www.trikomaseeds.com\/de\/einkaufswagen\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.trikomaseeds.com\/de\/einkaufswagen\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.trikomaseeds.com\/de\/einkaufswagen\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"https:\/\/www.trikomaseeds.com\/de\/"},{"@type":"ListItem","position":2,"name":"Einkaufswagen"}]},{"@type":"WebSite","@id":"https:\/\/www.trikomaseeds.com\/de\/#website","url":"https:\/\/www.trikomaseeds.com\/de\/","name":"Trikoma Seeds","description":"Semillas de cannabis feminizadas y autoflorecientes para coleccionismo y conservaci\u00f3n gen\u00e9tica","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.trikomaseeds.com\/de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"}]}},"_links":{"self":[{"href":"https:\/\/www.trikomaseeds.com\/de\/wp-json\/wp\/v2\/pages\/856","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.trikomaseeds.com\/de\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.trikomaseeds.com\/de\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.trikomaseeds.com\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.trikomaseeds.com\/de\/wp-json\/wp\/v2\/comments?post=856"}],"version-history":[{"count":10,"href":"https:\/\/www.trikomaseeds.com\/de\/wp-json\/wp\/v2\/pages\/856\/revisions"}],"predecessor-version":[{"id":14485,"href":"https:\/\/www.trikomaseeds.com\/de\/wp-json\/wp\/v2\/pages\/856\/revisions\/14485"}],"wp:attachment":[{"href":"https:\/\/www.trikomaseeds.com\/de\/wp-json\/wp\/v2\/media?parent=856"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}