{"id":494008,"date":"2025-09-02T14:04:11","date_gmt":"2025-09-02T07:04:11","guid":{"rendered":"https:\/\/trafficthai.com\/shop\/?page_id=494008"},"modified":"2025-09-02T14:04:11","modified_gmt":"2025-09-02T07:04:11","slug":"test-3","status":"publish","type":"page","link":"https:\/\/trafficthai.com\/shop\/test-3","title":{"rendered":"Test"},"content":{"rendered":"<p><!-- Sales Target Planner \u2013 Single Snippet (paste into WordPress Custom HTML) --><\/p>\n<div id=\"stp-app-wp\" style=\"font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica,Arial;\">\n<style>\n    #stp-app-wp .card{border:1px solid #e5e7eb;border-radius:12px;padding:16px;margin:16px 0;background:#fff}\n    #stp-app-wp .row{display:grid;grid-template-columns:1fr 1fr 1fr;gap:12px}\n    #stp-app-wp label{font-size:12px;color:#374151;margin-bottom:6px;display:block}\n    #stp-app-wp input,#stp-app-wp select,#stp-app-wp textarea{width:100%;padding:10px;border:1px solid #d1d5db;border-radius:8px}\n    #stp-app-wp button{padding:10px 14px;border:0;border-radius:10px;background:#111827;color:#fff;cursor:pointer}\n    #stp-app-wp button.secondary{background:#e5e7eb;color:#111827}\n    #stp-app-wp .muted{color:#6b7280;font-size:12px}\n    #stp-app-wp table{width:100%;border-collapse:collapse}\n    #stp-app-wp th,#stp-app-wp td{border-bottom:1px solid #eee;padding:8px;text-align:right;font-size:13px}\n    #stp-app-wp th:first-child,#stp-app-wp td:first-child{text-align:left}\n    #stp-app-wp .right{text-align:right}\n    #stp-app-wp .error{background:#fef2f2;color:#b91c1c;border:1px solid #fecaca;padding:10px;border-radius:10px}\n    #stp-app-wp .flex{display:flex;gap:8px;flex-wrap:wrap;align-items:center}\n    #stp-app-wp .grid-2{display:grid;grid-template-columns:1fr 1fr;gap:16px}\n    #stp-app-wp .mt-8{margin-top:8px}.#stp-app-wp .mt-16{margin-top:16px}\n    #stp-app-wp .badge{font-size:12px;background:#eef2ff;color:#3730a3;padding:2px 8px;border-radius:999px}\n  <\/style>\n<h2 style=\"margin:8px 0 0;font-size:22px\">Sales Target Planner<\/h2>\n<div class=\"muted\">\u0e27\u0e32\u0e07\u0e25\u0e34\u0e07\u0e01\u0e4c Google Sheet (\u0e2b\u0e23\u0e37\u0e2d\u0e2d\u0e31\u0e1b\u0e42\u0e2b\u0e25\u0e14\/\u0e27\u0e32\u0e07 CSV) + \u0e43\u0e2a\u0e48\u0e40\u0e1b\u0e49\u0e32\u0e22\u0e2d\u0e14\u0e02\u0e32\u0e22 \u2192 \u0e04\u0e33\u0e19\u0e27\u0e13 \u201c\u0e15\u0e49\u0e2d\u0e07\u0e15\u0e31\u0e49\u0e07\u0e40\u0e1b\u0e49\u0e32\u0e01\u0e35\u0e48\u0e0a\u0e34\u0e49\u0e19\/\u0e01\u0e35\u0e48\u0e1a\u0e32\u0e17\u201d (Projection = \u0e43\u0e1a\u0e40\u0e2a\u0e19\u0e2d\u0e23\u0e32\u0e04\u0e32 \u00d7 %\u0e1b\u0e34\u0e14)<\/div>\n<div id=\"stp-error\" class=\"error\" style=\"display:none\"><\/div>\n<div class=\"card\">\n<div class=\"flex\" style=\"justify-content:space-between;align-items:center\">\n<div class=\"muted\">\u0e02\u0e31\u0e49\u0e19\u0e15\u0e2d\u0e19\u0e41\u0e23\u0e01: \u0e01\u0e14 <b>\u0e40\u0e23\u0e34\u0e48\u0e21\u0e17\u0e33\u0e07\u0e32\u0e19<\/b> \u0e40\u0e1e\u0e37\u0e48\u0e2d\u0e42\u0e2b\u0e25\u0e14\u0e44\u0e25\u0e1a\u0e23\u0e32\u0e23\u0e35<\/div>\n<p>      <button id=\"stp-init\">\u0e40\u0e23\u0e34\u0e48\u0e21\u0e17\u0e33\u0e07\u0e32\u0e19<\/button>\n    <\/div>\n<\/p><\/div>\n<div class=\"card\" id=\"stp-inputs\" style=\"display:none\">\n<div class=\"row\">\n<div>\n        <label>\u0e25\u0e34\u0e07\u0e01\u0e4c Google Sheet \u0e2b\u0e23\u0e37\u0e2d CSV<\/label><\/p>\n<div class=\"flex\">\n          <input id=\"stp-url\" placeholder=\"\u0e27\u0e32\u0e07\u0e25\u0e34\u0e07\u0e01\u0e4c Google Sheet \/ CSV\" \/><br \/>\n          <button id=\"stp-load\" class=\"secondary\">\u0e42\u0e2b\u0e25\u0e14<\/button>\n        <\/div>\n<div class=\"muted mt-8\">\u0e23\u0e2d\u0e07\u0e23\u0e31\u0e1a <code>\/spreadsheets\/d\/...\/edit?gid=...<\/code> \u0e2b\u0e23\u0e37\u0e2d <code>...output=csv<\/code> (\u0e15\u0e49\u0e2d\u0e07 Publish to web)<\/div>\n<div class=\"flex mt-8\">\n          <button id=\"stp-test-sample\" class=\"secondary\">Run Test: Sample CSV<\/button><br \/>\n          <button id=\"stp-test-bad\" class=\"secondary\">Run Test: Bad URL<\/button><br \/>\n          <button id=\"stp-test-publish\" class=\"secondary\">Run Test: Needs Publish<\/button>\n        <\/div>\n<\/p><\/div>\n<div>\n        <label>\u0e2d\u0e31\u0e1b\u0e42\u0e2b\u0e25\u0e14\u0e44\u0e1f\u0e25\u0e4c CSV<\/label><br \/>\n        <input id=\"stp-file\" type=\"file\" accept=\".csv\" \/>\n      <\/div>\n<div>\n        <label>\u0e40\u0e1b\u0e49\u0e32\u0e22\u0e2d\u0e14\u0e02\u0e32\u0e22 (\u0e1a\u0e32\u0e17)<\/label><br \/>\n        <input id=\"stp-target\" type=\"number\" value=\"1000000\" \/><\/p>\n<div class=\"muted mt-8\">\u0e15\u0e31\u0e27\u0e2d\u0e22\u0e48\u0e32\u0e07: 1000000 = 1 \u0e25\u0e49\u0e32\u0e19\u0e1a\u0e32\u0e17<\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"mt-16\">\n      <label>\u0e27\u0e32\u0e07\u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25 CSV (\u0e17\u0e32\u0e07\u0e40\u0e25\u0e37\u0e2d\u0e01 \u0e16\u0e49\u0e32\u0e42\u0e2b\u0e25\u0e14\u0e25\u0e34\u0e07\u0e01\u0e4c\u0e44\u0e21\u0e48\u0e44\u0e14\u0e49)<\/label><br \/>\n      <textarea id=\"stp-csv\" rows=\"6\" placeholder=\"\u0e27\u0e32\u0e07\u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25 CSV \u0e15\u0e23\u0e07\u0e19\u0e35\u0e49...\"><\/textarea><\/p>\n<div class=\"mt-8\">\n        <button id=\"stp-parse-text\" class=\"secondary\">\u0e41\u0e1b\u0e25\u0e07\u0e08\u0e32\u0e01 CSV \u0e02\u0e49\u0e32\u0e07\u0e1a\u0e19<\/button>\n      <\/div>\n<\/p><\/div>\n<div id=\"stp-mapping\" class=\"row mt-16\" style=\"display:none\">\n<div><label>\u0e23\u0e2b\u0e31\u0e2a\u0e2a\u0e34\u0e19\u0e04\u0e49\u0e32<\/label><select id=\"map-code\"><\/select><\/div>\n<div><label>\u0e0a\u0e37\u0e48\u0e2d\u0e2a\u0e34\u0e19\u0e04\u0e49\u0e32<\/label><select id=\"map-name\"><\/select><\/div>\n<div><label>\u0e2b\u0e21\u0e27\u0e14\u0e2a\u0e34\u0e19\u0e04\u0e49\u0e32 (\u0e16\u0e49\u0e32\u0e21\u0e35)<\/label><select id=\"map-category\"><\/select><\/div>\n<div><label>\u0e23\u0e32\u0e04\u0e32(\u0e40\u0e09\u0e25\u0e35\u0e48\u0e22)<\/label><select id=\"map-price\"><\/select><\/div>\n<div><label>\u0e21\u0e39\u0e25\u0e04\u0e48\u0e32\u0e43\u0e1a\u0e40\u0e2a\u0e19\u0e2d\u0e23\u0e32\u0e04\u0e32<\/label><select id=\"map-quote\"><\/select><\/div>\n<div><label>% \u0e04\u0e27\u0e32\u0e21\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e43\u0e19\u0e01\u0e32\u0e23\u0e1b\u0e34\u0e14\u0e01\u0e32\u0e23\u0e02\u0e32\u0e22<\/label><select id=\"map-conv\"><\/select><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div id=\"stp-output\" style=\"display:none\">\n<div class=\"card\">\n<div class=\"flex\" style=\"justify-content:space-between\">\n<div><span class=\"badge\">\u0e41\u0e1c\u0e19\u0e15\u0e31\u0e49\u0e07\u0e40\u0e1b\u0e49\u0e32\u0e15\u0e48\u0e2d\u0e2a\u0e34\u0e19\u0e04\u0e49\u0e32<\/span><\/div>\n<p>        <button id=\"stp-export\">Export \u0e41\u0e1c\u0e19 CSV<\/button>\n      <\/div>\n<div class=\"mt-16\" style=\"overflow:auto\">\n<table id=\"stp-table\">\n<thead>\n<tr>\n<th>\u0e23\u0e2b\u0e31\u0e2a<\/th>\n<th>\u0e0a\u0e37\u0e48\u0e2d\u0e2a\u0e34\u0e19\u0e04\u0e49\u0e32<\/th>\n<th>\u0e2b\u0e21\u0e27\u0e14<\/th>\n<th class=\"right\">\u0e23\u0e32\u0e04\u0e32\u0e40\u0e09\u0e25\u0e35\u0e48\u0e22<\/th>\n<th class=\"right\">\u0e43\u0e1a\u0e40\u0e2a\u0e19\u0e2d\u0e23\u0e32\u0e04\u0e32<\/th>\n<th class=\"right\">% \u0e1b\u0e34\u0e14<\/th>\n<th class=\"right\">Projection<\/th>\n<th class=\"right\">\u0e08\u0e33\u0e19\u0e27\u0e19\u0e17\u0e35\u0e48\u0e04\u0e27\u0e23\u0e15\u0e31\u0e49\u0e07<\/th>\n<th class=\"right\">\u0e22\u0e2d\u0e14\u0e02\u0e32\u0e22\u0e15\u0e31\u0e49\u0e07\u0e40\u0e1b\u0e49\u0e32<\/th>\n<\/tr>\n<\/thead>\n<tbody><\/tbody>\n<tfoot>\n<tr>\n<td colspan=\"7\"><\/td>\n<td class=\"right\"><b>\u0e23\u0e27\u0e21\u0e08\u0e33\u0e19\u0e27\u0e19<\/b><\/td>\n<td class=\"right\"><b>\u0e23\u0e27\u0e21\u0e22\u0e2d\u0e14<\/b><\/td>\n<\/tr>\n<tr>\n<td colspan=\"7\"><\/td>\n<td class=\"right\" id=\"stp-total-qty\"><b>0<\/b><\/td>\n<td class=\"right\" id=\"stp-total-rev\"><b>0<\/b><\/td>\n<\/tr>\n<\/tfoot>\n<\/table><\/div>\n<div class=\"muted mt-8\" id=\"stp-remaining\"><\/div>\n<\/p><\/div>\n<div class=\"grid-2\">\n<div class=\"card\">\n<div class=\"badge\">\u0e2a\u0e31\u0e14\u0e2a\u0e48\u0e27\u0e19\u0e22\u0e2d\u0e14\u0e15\u0e32\u0e21\u0e2b\u0e21\u0e27\u0e14<\/div>\n<p>        <canvas id=\"stp-pie-category\" height=\"260\"><\/canvas>\n      <\/div>\n<div class=\"card\">\n<div class=\"badge\">Top \u0e23\u0e32\u0e22\u0e44\u0e14\u0e49\u0e15\u0e32\u0e21\u0e23\u0e2b\u0e31\u0e2a<\/div>\n<p>        <canvas id=\"stp-bar-product\" height=\"260\"><\/canvas>\n      <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/div>\n<p><!-- Bootloader: \u0e42\u0e2b\u0e25\u0e14\u0e44\u0e25\u0e1a\u0e23\u0e32\u0e23\u0e35\u0e17\u0e35\u0e48\u0e15\u0e49\u0e2d\u0e07\u0e43\u0e0a\u0e49 \u0e41\u0e25\u0e49\u0e27\u0e23\u0e31\u0e19\u0e41\u0e2d\u0e1b --><br \/>\n<script>\n(function(){\n  const $ = (s)=>document.querySelector(s);\n  const CDN = {\n    papa: \"https:\/\/cdn.jsdelivr.net\/npm\/papaparse@5.4.1\/papaparse.min.js\",\n    chart:\"https:\/\/cdn.jsdelivr.net\/npm\/chart.js@4.4.0\/dist\/chart.umd.min.js\"\n  };\n  function setError(msg){ const box=$(\"#stp-error\"); if(!box) return; if(!msg){ box.style.display=\"none\"; box.textContent=\"\"; return; } box.style.display=\"block\"; box.textContent=msg; }\n  function loadScript(src){ return new Promise((res,rej)=>{ const s=document.createElement(\"script\"); s.src=src; s.async=true; s.onload=res; s.onerror=()=>rej(new Error(\"\u0e42\u0e2b\u0e25\u0e14\u0e25\u0e49\u0e21\u0e40\u0e2b\u0e25\u0e27: \"+src)); document.head.appendChild(s); }); }\n  async function ensureLibs(){ if(!window.Papa) await loadScript(CDN.papa); if(!window.Chart) await loadScript(CDN.chart); }<\/p>\n<p>  function startApp(){\n    const fmt = (n)=>(Math.round(Number(n))||0).toLocaleString();\n    const SAMPLE_CSV =\n`\u0e23\u0e2b\u0e31\u0e2a\u0e2a\u0e34\u0e19\u0e04\u0e49\u0e32,\u0e0a\u0e37\u0e48\u0e2d\u0e2a\u0e34\u0e19\u0e04\u0e49\u0e32,\u0e2b\u0e21\u0e27\u0e14,\u0e23\u0e32\u0e04\u0e32(\u0e40\u0e09\u0e25\u0e35\u0e48\u0e22),\u0e21\u0e39\u0e25\u0e04\u0e48\u0e32\u0e43\u0e1a\u0e40\u0e2a\u0e19\u0e2d\u0e23\u0e32\u0e04\u0e32,% \u0e04\u0e27\u0e32\u0e21\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e43\u0e19\u0e01\u0e32\u0e23\u0e1b\u0e34\u0e14\u0e01\u0e32\u0e23\u0e02\u0e32\u0e22\nBW0202,\u0e16\u0e31\u0e07 CO2 10 \u0e1b\u0e2d\u0e19\u0e14\u0e4c,CO2,2214,884840,14.51\n33010003,BF2000 (\u0e19\u0e49\u0e33\u0e22\u0e32\u0e40\u0e2b\u0e25\u0e27\u0e23\u0e30\u0e40\u0e2b\u0e22),\u0e19\u0e49\u0e33\u0e22\u0e32,2145,860552,10.97\nBW0108,\u0e40\u0e04\u0e21\u0e35\u0e41\u0e2b\u0e49\u0e07 6A20B 10 \u0e1b\u0e2d\u0e19\u0e14\u0e4c,\u0e40\u0e04\u0e21\u0e35\u0e41\u0e2b\u0e49\u0e07,1189,949595,5.01\nBW0103,\u0e40\u0e04\u0e21\u0e35\u0e41\u0e2b\u0e49\u0e07 4A5B 5 \u0e1b\u0e2d\u0e19\u0e14\u0e4c,\u0e40\u0e04\u0e21\u0e35\u0e41\u0e2b\u0e49\u0e07,769,1251730,1.66\nBW0204,\u0e16\u0e31\u0e07 CO2 50 \u0e1b\u0e2d\u0e19\u0e14\u0e4c,CO2,16600,202800,24.56`;\n    const DATA_URI = \"data:text\/csv;charset=utf-8,\"+encodeURIComponent(SAMPLE_CSV);\n    const BAD_URL = \"https:\/\/example.com\/not-found.csv\";\n    const NEEDS_PUBLISH = \"https:\/\/docs.google.com\/spreadsheets\/d\/XXXX\/edit?usp=sharing\";<\/p>\n<p>    let headers=[], rows=[], map={code:\"\",name:\"\",category:\"\",price:\"\",quote:\"\",conv:\"\"};\n    let plan=[], pieCategory, barProduct;<\/p>\n<p>    function asNumber(x){ if(x==null) return 0; const n=parseFloat(String(x).replace(\/[, ]\/g,\"\").replace(\"\u0e3f\",\"\")); return isFinite(n)?n:0; }\n    function detectCategory(name){ const n=(name||\"\").toLowerCase(); if(\/co\\s?2|co\u2082|co2\/.test(n)) return \"CO\u2082\"; if(\/bf2000|\u0e19\u0e49\u0e33\u0e22\u0e32|clean|halotron|hcfc|fe36|novec|hfc\/.test(n)) return \"\u0e19\u0e49\u0e33\u0e22\u0e32\u0e40\u0e2b\u0e25\u0e27\u0e23\u0e30\u0e40\u0e2b\u0e22 \/ Clean Agent\"; if(\/\u0e40\u0e04\u0e21\u0e35\u0e41\u0e2b\u0e49\u0e07|dry|abc\/.test(n)) return \"\u0e40\u0e04\u0e21\u0e35\u0e41\u0e2b\u0e49\u0e07\"; return \"\u0e2d\u0e37\u0e48\u0e19 \u0e46\"; }\n    function gsheetToCsv(u){ try{ const url=new URL(u); if(!url.hostname.includes(\"docs.google.com\")) return u; if(url.pathname.includes(\"\/spreadsheets\/d\/\")){ const parts=url.pathname.split(\"\/\"); const id=parts[parts.indexOf(\"d\")+1]; const gid=url.searchParams.get(\"gid\")||\"0\"; return `https:\/\/docs.google.com\/spreadsheets\/d\/${id}\/export?format=csv&gid=${gid}`; } if(url.searchParams.get(\"output\")===\"csv\") return u; }catch(e){} return u; }\n    function guessMap(hs){ const f=(re)=>hs.find(h=>re.test(h.trim()))||\"\"; return { code:f(\/\u0e23\u0e2b\u0e31\u0e2a|code|sku\/i), name:f(\/\u0e0a\u0e37\u0e48\u0e2d\u0e2a\u0e34\u0e19\u0e04\u0e49\u0e32|product|name\/i), category:f(\/\u0e2b\u0e21\u0e27\u0e14|\u0e1b\u0e23\u0e30\u0e40\u0e20\u0e17|category\/i), price:f(\/\u0e23\u0e32\u0e04\u0e32.*\u0e40\u0e09\u0e25\u0e35\u0e48\u0e22|avg|price\/i), quote:f(\/\u0e21\u0e39\u0e25\u0e04\u0e48\u0e32\u0e43\u0e1a\u0e40\u0e2a\u0e19\u0e2d\u0e23\u0e32\u0e04\u0e32|\u0e43\u0e1a\u0e40\u0e2a\u0e19\u0e2d\u0e23\u0e32\u0e04\u0e32|quote\/i), conv:f(\/%\\s*\u0e04\u0e27\u0e32\u0e21\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16.*\u0e1b\u0e34\u0e14|conversion|conv|\u0e1b\u0e34\u0e14\u0e01\u0e32\u0e23\u0e02\u0e32\u0e22\/i) }; }<\/p>\n<p>    function fillMapUI(){\n      [\"#map-code\",\"#map-name\",\"#map-category\",\"#map-price\",\"#map-quote\",\"#map-conv\"].forEach(sel=>{\n        const el=$(sel); el.innerHTML=headers.map(h=>`<option value=\"${h}\">${h}<\/option>`).join(\"\");\n      });\n      if(map.code) $(\"#map-code\").value=map.code;\n      if(map.name) $(\"#map-name\").value=map.name;\n      $(\"#map-category\").value=map.category||\"\";\n      $(\"#map-price\").value=map.price||\"\";\n      $(\"#map-quote\").value=map.quote||\"\";\n      $(\"#map-conv\").value=map.conv||\"\";\n      $(\"#stp-mapping\").style.display=\"grid\";\n    }\n    function readMap(){ map={ code:$(\"#map-code\").value, name:$(\"#map-name\").value, category:$(\"#map-category\").value, price:$(\"#map-price\").value, quote:$(\"#map-quote\").value, conv:$(\"#map-conv\").value }; }<\/p>\n<p>    function buildPlan(){\n      readMap();\n      const target = asNumber($(\"#stp-target\").value);\n      const mapped = rows.map(r=>{\n        const code=r[map.code], name=r[map.name];\n        const category=map.category?r[map.category]:undefined;\n        const price=asNumber(r[map.price]); const quote=asNumber(r[map.quote]); const conv=asNumber(r[map.conv]);\n        const projection = quote * (conv\/100);\n        return { code,name,category,price,quote,conv,projection };\n      }).filter(r=>(r.name||r.code)&&r.price>0);<\/p>\n<p>      const sorted = [...mapped].sort((a,b)=> b.projection-a.projection || b.conv-a.conv || b.quote-a.quote);<\/p>\n<p>      let remaining = target; plan=[];\n      for(const r of sorted){\n        if(remaining<=0) break;\n        const maxUse = Math.max(0, r.projection);\n        const take = Math.min(remaining, maxUse>0 ? maxUse : remaining);\n        const qty = r.price>0 ? Math.ceil(take \/ r.price) : 0;\n        const revenue = qty * r.price;\n        plan.push({ ...r, plannedQty: qty, plannedRevenue: revenue });\n        remaining -= Math.min(revenue, take);\n      }<\/p>\n<p>      let sum = plan.reduce((s,p)=> s+(p.plannedRevenue||0), 0);\n      for(let i=plan.length-1; i>=0 && sum>target; i--){\n        const p=plan[i]; if(p.plannedQty>0){ p.plannedQty-=1; p.plannedRevenue=p.plannedQty*p.price; sum = plan.reduce((s,x)=> s+x.plannedRevenue, 0); }\n      }<\/p>\n<p>      renderTable(remaining);\n      renderCharts();\n    }<\/p>\n<p>    function renderTable(remaining){\n      const tbody=$(\"#stp-table tbody\");\n      tbody.innerHTML = plan.map(p=>`<\/p>\n<tr>\n<td>${p.code||\"-\"}<\/td>\n<td>${p.name||\"-\"}<\/td>\n<td>${(p.category||detectCategory(p.name))}<\/td>\n<td class=\"right\">${fmt(p.price)}<\/td>\n<td class=\"right\">${fmt(p.quote)}<\/td>\n<td class=\"right\">${(Number(p.conv)||0).toFixed(2)}%<\/td>\n<td class=\"right\">${fmt(p.projection)}<\/td>\n<td class=\"right\"><b>${fmt(p.plannedQty)}<\/b><\/td>\n<td class=\"right\"><b>${fmt(p.plannedRevenue)}<\/b><\/td>\n<\/tr>\n<p>`).join(\"\");<\/p>\n<p>      const totalQty=plan.reduce((s,p)=> s+(p.plannedQty||0),0);\n      const totalRev=plan.reduce((s,p)=> s+(p.plannedRevenue||0),0);\n      $(\"#stp-total-qty\").innerHTML = \"<b>\"+fmt(totalQty)+\"<\/b>\";\n      $(\"#stp-total-rev\").innerHTML = \"<b>\"+fmt(totalRev)+\"<\/b>\";\n      $(\"#stp-remaining\").textContent = \"\u0e40\u0e2b\u0e25\u0e37\u0e2d\u0e40\u0e1b\u0e49\u0e32\u0e42\u0e14\u0e22\u0e1b\u0e23\u0e30\u0e21\u0e32\u0e13: \" + fmt(Math.max(0, Math.round(remaining))) + \" \u0e1a\u0e32\u0e17\";\n      $(\"#stp-output\").style.display = \"block\";\n    }<\/p>\n<p>    function renderCharts(){\n      const byCat={}; plan.forEach(p=>{ const c=(p.category||detectCategory(p.name)).trim(); byCat[c]=(byCat[c]||0)+(p.plannedRevenue||0); });\n      const catLabels=Object.keys(byCat), catValues=catLabels.map(k=>byCat[k]);\n      const prodLabels=plan.map(p=>p.code||\"-\"), prodValues=plan.map(p=>p.plannedRevenue||0);\n      if(pieCategory) pieCategory.destroy(); if(barProduct) barProduct.destroy();<\/p>\n<p>      pieCategory = new Chart(document.getElementById(\"stp-pie-category\").getContext(\"2d\"), {\n        type:\"pie\",\n        data:{ labels:catLabels, datasets:[{ data:catValues }] },\n        options:{ plugins:{ legend:{position:\"bottom\"}, tooltip:{ callbacks:{ label:(ctx)=> `${ctx.label}: ${fmt(ctx.raw)} \u0e1a\u0e32\u0e17` } } } }\n      });<\/p>\n<p>      barProduct = new Chart(document.getElementById(\"stp-bar-product\").getContext(\"2d\"), {\n        type:\"bar\",\n        data:{ labels:prodLabels, datasets:[{ label:\"\u0e22\u0e2d\u0e14\u0e02\u0e32\u0e22\u0e15\u0e31\u0e49\u0e07\u0e40\u0e1b\u0e49\u0e32\", data:prodValues }] },\n        options:{ plugins:{ legend:{display:false}, tooltip:{ callbacks:{ label:(c)=> `${fmt(c.raw)} \u0e1a\u0e32\u0e17`} } }, scales:{ y:{ ticks:{ callback:(v)=> fmt(v) } } } }\n      });\n    }<\/p>\n<p>    function prettyNetError(e, src){ const isProg=Object.prototype.toString.call(e||{}).includes(\"ProgressEvent\"); let host; try{ host=new URL(src).hostname }catch{ host=src } if(isProg) return `\u0e42\u0e2b\u0e25\u0e14\u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25\u0e44\u0e21\u0e48\u0e2a\u0e33\u0e40\u0e23\u0e47\u0e08 (Network\/CORS) \u2014 \u0e15\u0e23\u0e27\u0e08\u0e25\u0e34\u0e07\u0e01\u0e4c \u201c${host}\u201d \u0e43\u0e2b\u0e49 Publish to web + public`; const msg=(e&&e.message)?e.message:String(e||\"\"); return \"\u0e42\u0e2b\u0e25\u0e14\u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25\u0e44\u0e21\u0e48\u0e2a\u0e33\u0e40\u0e23\u0e47\u0e08: \"+msg.replace(\"[object ProgressEvent]\",\"Network error\"); }\n    function parseCsvText(text){ const parsed=Papa.parse(text,{header:true,dynamicTyping:true}); rows=(parsed.data||[]).filter(Boolean); if(!rows.length) throw new Error(\"\u0e44\u0e1f\u0e25\u0e4c CSV \u0e27\u0e48\u0e32\u0e07\u0e40\u0e1b\u0e25\u0e48\u0e32\u0e2b\u0e23\u0e37\u0e2d\u0e2b\u0e31\u0e27\u0e04\u0e2d\u0e25\u0e31\u0e21\u0e19\u0e4c\u0e44\u0e21\u0e48\u0e16\u0e39\u0e01\u0e15\u0e49\u0e2d\u0e07\"); headers=Object.keys(rows[0]||{}); map=guessMap(headers); fillMapUI(); $(\"#stp-output\").style.display=\"none\"; buildPlan(); }<\/p>\n<p>    async function loadFromUrl(u){\n      setError(\"\"); const input=(u||$(\"#stp-url\").value||\"\").trim();\n      if(!input) return setError(\"\u0e01\u0e23\u0e38\u0e13\u0e32\u0e27\u0e32\u0e07\u0e25\u0e34\u0e07\u0e01\u0e4c\u0e01\u0e48\u0e2d\u0e19\");\n      if(\/usp=sharing\/.test(input)) return setError(\"\u0e22\u0e31\u0e07\u0e44\u0e21\u0e48 Publish to web \u2014 \u0e44\u0e1b\u0e17\u0e35\u0e48 File \u2192 Share \u2192 Publish to web \u0e01\u0e48\u0e2d\u0e19\");\n      const real=gsheetToCsv(input);\n      Papa.parse(real,{download:true,header:true,dynamicTyping:true,\n        complete:(res)=>{ rows=(res.data||[]).filter(Boolean); if(!rows.length) return setError(\"\u0e42\u0e2b\u0e25\u0e14\u0e2a\u0e33\u0e40\u0e23\u0e47\u0e08\u0e41\u0e15\u0e48\u0e44\u0e21\u0e48\u0e1e\u0e1a\u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25\u0e43\u0e19 CSV\"); headers=Object.keys(rows[0]||{}); map=guessMap(headers); fillMapUI(); $(\"#stp-output\").style.display=\"none\"; buildPlan(); },\n        error: async (err)=>{ try{ const resp=await fetch(real,{headers:{Accept:\"text\/csv, text\/plain, *\/*\"}}); if(!resp.ok) throw new Error(`HTTP ${resp.status} ${resp.statusText}`); const text=await resp.text(); parseCsvText(text); }catch(e2){ setError(prettyNetError(e2||err, real)); } }\n      });\n    }\n    function loadFromFile(file){\n      setError(\"\");\n      Papa.parse(file,{header:true,dynamicTyping:true,\n        complete:(res)=>{ try{ const r=(res.data||[]).filter(Boolean); if(!r.length) throw new Error(\"\u0e44\u0e1f\u0e25\u0e4c CSV \u0e27\u0e48\u0e32\u0e07\u0e40\u0e1b\u0e25\u0e48\u0e32\u0e2b\u0e23\u0e37\u0e2d\u0e2b\u0e31\u0e27\u0e04\u0e2d\u0e25\u0e31\u0e21\u0e19\u0e4c\u0e44\u0e21\u0e48\u0e15\u0e23\u0e07\"); rows=r; headers=Object.keys(rows[0]||{}); map=guessMap(headers); fillMapUI(); $(\"#stp-output\").style.display=\"none\"; buildPlan(); }catch(e){ setError((e&&e.message)||String(e)); } },\n        error:(err)=> setError(prettyNetError(err,file.name))\n      });\n    }\n    function exportPlan(){\n      const lines=[[\"\u0e23\u0e2b\u0e31\u0e2a\u0e2a\u0e34\u0e19\u0e04\u0e49\u0e32\",\"\u0e0a\u0e37\u0e48\u0e2d\u0e2a\u0e34\u0e19\u0e04\u0e49\u0e32\",\"\u0e2b\u0e21\u0e27\u0e14\",\"\u0e23\u0e32\u0e04\u0e32\u0e40\u0e09\u0e25\u0e35\u0e48\u0e22\",\"\u0e21\u0e39\u0e25\u0e04\u0e48\u0e32\u0e43\u0e1a\u0e40\u0e2a\u0e19\u0e2d\u0e23\u0e32\u0e04\u0e32\",\"\u0e40\u0e1b\u0e2d\u0e23\u0e4c\u0e40\u0e0b\u0e47\u0e19\u0e15\u0e4c\u0e1b\u0e34\u0e14\u0e01\u0e32\u0e23\u0e02\u0e32\u0e22\",\"Projection\",\"\u0e08\u0e33\u0e19\u0e27\u0e19\u0e17\u0e35\u0e48\u0e04\u0e27\u0e23\u0e15\u0e31\u0e49\u0e07\u0e40\u0e1b\u0e49\u0e32\",\"\u0e22\u0e2d\u0e14\u0e02\u0e32\u0e22\u0e17\u0e35\u0e48\u0e15\u0e31\u0e49\u0e07\u0e40\u0e1b\u0e49\u0e32\"].join(\",\")];\n      plan.forEach(p=> lines.push([p.code,p.name,(p.category||detectCategory(p.name)),p.price,p.quote,p.conv,Math.round(p.projection),p.plannedQty,Math.round(p.plannedRevenue)].join(\",\")));\n      const blob=new Blob([lines.join(\"\\n\")],{type:\"text\/csv;charset=utf-8;\"}); const url=URL.createObjectURL(blob); const a=document.createElement(\"a\"); a.href=url; a.download=\"sales_target_plan.csv\"; a.click(); URL.revokeObjectURL(url);\n    }<\/p>\n<p>    \/\/ wire UI\n    $(\"#stp-inputs\").style.display=\"block\";\n    $(\"#stp-load\").addEventListener(\"click\", ()=> loadFromUrl());\n    $(\"#stp-test-sample\").addEventListener(\"click\", ()=> { $(\"#stp-url\").value=DATA_URI; loadFromUrl(DATA_URI); });\n    $(\"#stp-test-bad\").addEventListener(\"click\", ()=> { $(\"#stp-url\").value=BAD_URL; loadFromUrl(BAD_URL); });\n    $(\"#stp-test-publish\").addEventListener(\"click\", ()=> { $(\"#stp-url\").value=NEEDS_PUBLISH; loadFromUrl(NEEDS_PUBLISH); });\n    $(\"#stp-file\").addEventListener(\"change\", (e)=>{ const f=e.target.files && e.target.files[0]; if(f) loadFromFile(f); });\n    [\"#map-code\",\"#map-name\",\"#map-category\",\"#map-price\",\"#map-quote\",\"#map-conv\",\"#stp-target\"].forEach(id=>{\n      document.addEventListener(\"change\",(ev)=>{ if(ev.target && ev.target.matches(id)) buildPlan(); });\n    });\n    $(\"#stp-export\").addEventListener(\"click\", exportPlan);\n    $(\"#stp-parse-text\").addEventListener(\"click\", ()=>{ const txt=$(\"#stp-csv\").value||\"\"; if(!txt.trim()) return setError(\"\u0e44\u0e21\u0e48\u0e21\u0e35\u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25\u0e43\u0e19\u0e0a\u0e48\u0e2d\u0e07 CSV\"); setError(\"\"); try{ parseCsvText(txt); }catch(e){ setError((e&&e.message)||String(e)); } });\n  }<\/p>\n<p>  document.getElementById(\"stp-init\").addEventListener(\"click\", async ()=>{\n    try{\n      setError(\"\");\n      await ensureLibs();\n      startApp();\n      const btn=$(\"#stp-init\"); btn.textContent=\"\u0e40\u0e23\u0e34\u0e48\u0e21\u0e17\u0e33\u0e07\u0e32\u0e19\u0e41\u0e25\u0e49\u0e27 \u2713\"; btn.disabled=true;\n    }catch(e){\n      setError(\"\u0e44\u0e21\u0e48\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e42\u0e2b\u0e25\u0e14\u0e44\u0e25\u0e1a\u0e23\u0e32\u0e23\u0e35\u0e08\u0e32\u0e01 CDN \u0e44\u0e14\u0e49: \" + (e && e.message ? e.message : String(e)));\n    }\n  });\n})();\n<\/script><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Sales Target Planner \u0e27\u0e32\u0e07\u0e25\u0e34\u0e07\u0e01\u0e4c Google Sheet (\u0e2b\u0e23\u0e37\u0e2d\u0e2d\u0e31\u0e1b\u0e42\u0e2b\u0e25\u0e14<\/p>\n","protected":false},"author":4,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-494008","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.2 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Test &#8212; \u0e23\u0e49\u0e32\u0e19\u0e44\u0e17\u0e22\u0e08\u0e23\u0e32\u0e08\u0e23<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/trafficthai.com\/shop\/test-3\" \/>\n<meta property=\"og:locale\" content=\"th_TH\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Test &#8212; \u0e23\u0e49\u0e32\u0e19\u0e44\u0e17\u0e22\u0e08\u0e23\u0e32\u0e08\u0e23\" \/>\n<meta property=\"og:description\" content=\"Sales Target Planner \u0e27\u0e32\u0e07\u0e25\u0e34\u0e07\u0e01\u0e4c Google Sheet (\u0e2b\u0e23\u0e37\u0e2d\u0e2d\u0e31\u0e1b\u0e42\u0e2b\u0e25\u0e14\" \/>\n<meta property=\"og:url\" content=\"https:\/\/trafficthai.com\/shop\/test-3\" \/>\n<meta property=\"og:site_name\" content=\"\u0e23\u0e49\u0e32\u0e19\u0e44\u0e17\u0e22\u0e08\u0e23\u0e32\u0e08\u0e23\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/trafficthai\" \/>\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:\\\/\\\/trafficthai.com\\\/shop\\\/test-3\",\"url\":\"https:\\\/\\\/trafficthai.com\\\/shop\\\/test-3\",\"name\":\"Test &#8212; \u0e23\u0e49\u0e32\u0e19\u0e44\u0e17\u0e22\u0e08\u0e23\u0e32\u0e08\u0e23\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/trafficthai.com\\\/shop\\\/#website\"},\"datePublished\":\"2025-09-02T07:04:11+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/trafficthai.com\\\/shop\\\/test-3#breadcrumb\"},\"inLanguage\":\"th\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/trafficthai.com\\\/shop\\\/test-3\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/trafficthai.com\\\/shop\\\/test-3#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/trafficthai.com\\\/shop\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Test\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/trafficthai.com\\\/shop\\\/#website\",\"url\":\"https:\\\/\\\/trafficthai.com\\\/shop\\\/\",\"name\":\"\u0e23\u0e49\u0e32\u0e19\u0e44\u0e17\u0e22\u0e08\u0e23\u0e32\u0e08\u0e23\",\"description\":\"\u0e2d\u0e38\u0e1b\u0e01\u0e23\u0e13\u0e4c\u0e08\u0e23\u0e32\u0e08\u0e23\u0e17\u0e35\u0e48\u0e2b\u0e25\u0e32\u0e01\u0e2b\u0e25\u0e32\u0e22 \u0e41\u0e25\u0e30\u0e17\u0e31\u0e19\u0e2a\u0e21\u0e31\u0e22\u0e17\u0e35\u0e48\u0e2a\u0e38\u0e14\u0e43\u0e19\u0e1b\u0e23\u0e30\u0e40\u0e17\u0e28\u0e44\u0e17\u0e22\",\"publisher\":{\"@id\":\"https:\\\/\\\/trafficthai.com\\\/shop\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/trafficthai.com\\\/shop\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"th\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/trafficthai.com\\\/shop\\\/#organization\",\"name\":\"SMART BESTBUYS CO.,LTD\",\"alternateName\":\"\u0e23\u0e49\u0e32\u0e19\u0e44\u0e17\u0e22\u0e08\u0e23\u0e32\u0e08\u0e23\",\"url\":\"https:\\\/\\\/trafficthai.com\\\/shop\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"th\",\"@id\":\"https:\\\/\\\/trafficthai.com\\\/shop\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/trafficthai.com\\\/shop\\\/wp-content\\\/uploads\\\/2025\\\/04\\\/Untitled-design-19.png\",\"contentUrl\":\"https:\\\/\\\/trafficthai.com\\\/shop\\\/wp-content\\\/uploads\\\/2025\\\/04\\\/Untitled-design-19.png\",\"width\":1350,\"height\":1350,\"caption\":\"SMART BESTBUYS CO.,LTD\"},\"image\":{\"@id\":\"https:\\\/\\\/trafficthai.com\\\/shop\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/trafficthai\",\"https:\\\/\\\/trafficthai.com\\\/shop\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Test &#8212; \u0e23\u0e49\u0e32\u0e19\u0e44\u0e17\u0e22\u0e08\u0e23\u0e32\u0e08\u0e23","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/trafficthai.com\/shop\/test-3","og_locale":"th_TH","og_type":"article","og_title":"Test &#8212; \u0e23\u0e49\u0e32\u0e19\u0e44\u0e17\u0e22\u0e08\u0e23\u0e32\u0e08\u0e23","og_description":"Sales Target Planner \u0e27\u0e32\u0e07\u0e25\u0e34\u0e07\u0e01\u0e4c Google Sheet (\u0e2b\u0e23\u0e37\u0e2d\u0e2d\u0e31\u0e1b\u0e42\u0e2b\u0e25\u0e14","og_url":"https:\/\/trafficthai.com\/shop\/test-3","og_site_name":"\u0e23\u0e49\u0e32\u0e19\u0e44\u0e17\u0e22\u0e08\u0e23\u0e32\u0e08\u0e23","article_publisher":"https:\/\/www.facebook.com\/trafficthai","twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/trafficthai.com\/shop\/test-3","url":"https:\/\/trafficthai.com\/shop\/test-3","name":"Test &#8212; \u0e23\u0e49\u0e32\u0e19\u0e44\u0e17\u0e22\u0e08\u0e23\u0e32\u0e08\u0e23","isPartOf":{"@id":"https:\/\/trafficthai.com\/shop\/#website"},"datePublished":"2025-09-02T07:04:11+00:00","breadcrumb":{"@id":"https:\/\/trafficthai.com\/shop\/test-3#breadcrumb"},"inLanguage":"th","potentialAction":[{"@type":"ReadAction","target":["https:\/\/trafficthai.com\/shop\/test-3"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/trafficthai.com\/shop\/test-3#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/trafficthai.com\/shop\/"},{"@type":"ListItem","position":2,"name":"Test"}]},{"@type":"WebSite","@id":"https:\/\/trafficthai.com\/shop\/#website","url":"https:\/\/trafficthai.com\/shop\/","name":"\u0e23\u0e49\u0e32\u0e19\u0e44\u0e17\u0e22\u0e08\u0e23\u0e32\u0e08\u0e23","description":"\u0e2d\u0e38\u0e1b\u0e01\u0e23\u0e13\u0e4c\u0e08\u0e23\u0e32\u0e08\u0e23\u0e17\u0e35\u0e48\u0e2b\u0e25\u0e32\u0e01\u0e2b\u0e25\u0e32\u0e22 \u0e41\u0e25\u0e30\u0e17\u0e31\u0e19\u0e2a\u0e21\u0e31\u0e22\u0e17\u0e35\u0e48\u0e2a\u0e38\u0e14\u0e43\u0e19\u0e1b\u0e23\u0e30\u0e40\u0e17\u0e28\u0e44\u0e17\u0e22","publisher":{"@id":"https:\/\/trafficthai.com\/shop\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/trafficthai.com\/shop\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"th"},{"@type":"Organization","@id":"https:\/\/trafficthai.com\/shop\/#organization","name":"SMART BESTBUYS CO.,LTD","alternateName":"\u0e23\u0e49\u0e32\u0e19\u0e44\u0e17\u0e22\u0e08\u0e23\u0e32\u0e08\u0e23","url":"https:\/\/trafficthai.com\/shop\/","logo":{"@type":"ImageObject","inLanguage":"th","@id":"https:\/\/trafficthai.com\/shop\/#\/schema\/logo\/image\/","url":"https:\/\/trafficthai.com\/shop\/wp-content\/uploads\/2025\/04\/Untitled-design-19.png","contentUrl":"https:\/\/trafficthai.com\/shop\/wp-content\/uploads\/2025\/04\/Untitled-design-19.png","width":1350,"height":1350,"caption":"SMART BESTBUYS CO.,LTD"},"image":{"@id":"https:\/\/trafficthai.com\/shop\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/trafficthai","https:\/\/trafficthai.com\/shop"]}]}},"_links":{"self":[{"href":"https:\/\/trafficthai.com\/shop\/index.php?rest_route=\/wp\/v2\/pages\/494008","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/trafficthai.com\/shop\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/trafficthai.com\/shop\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/trafficthai.com\/shop\/index.php?rest_route=\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/trafficthai.com\/shop\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=494008"}],"version-history":[{"count":1,"href":"https:\/\/trafficthai.com\/shop\/index.php?rest_route=\/wp\/v2\/pages\/494008\/revisions"}],"predecessor-version":[{"id":494009,"href":"https:\/\/trafficthai.com\/shop\/index.php?rest_route=\/wp\/v2\/pages\/494008\/revisions\/494009"}],"wp:attachment":[{"href":"https:\/\/trafficthai.com\/shop\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=494008"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}