{"id":355,"date":"2015-08-12T12:07:32","date_gmt":"2015-08-12T12:07:32","guid":{"rendered":"http:\/\/savoy.nordicmade.com\/?page_id=355"},"modified":"2026-07-25T04:29:03","modified_gmt":"2026-07-25T04:29:03","slug":"rastreo-de-orden","status":"publish","type":"page","link":"https:\/\/fdvape.com\/es\/rastreo-de-orden\/","title":{"rendered":"Rastreo de orden"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"355\" class=\"elementor elementor-355\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-772f86d1 e-flex e-con-boxed e-con e-parent\" data-id=\"772f86d1\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-a397a64 e-flex e-con-boxed e-con e-child\" data-id=\"a397a64\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-56d8cf1 elementor-widget elementor-widget-heading\" data-id=\"56d8cf1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h1 class=\"elementor-heading-title elementor-size-default\">Order Tracking<\/h1>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-24ab20c elementor-widget elementor-widget-heading\" data-id=\"24ab20c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<p class=\"elementor-heading-title elementor-size-default\">Enter your order number in the designated box<\/p>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-40470a2 elementor-widget elementor-widget-heading\" data-id=\"40470a2\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<p class=\"elementor-heading-title elementor-size-default\">Click the 'Track' button on the page<\/p>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-fc6736c elementor-widget__width-auto elementor-widget elementor-widget-html\" data-id=\"fc6736c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div>\r\n  <div class=\"track-main\">\r\n    <div class=\"track-form\">\r\n      <input id=\"inputNo\" class=\"track-input\" type=\"text\" placeholder=\"Please fill in Logistics tracking number\" \/>\r\n      <span id=\"checkButton\" class=\"track-button\">Track<\/span>\r\n    <\/div>\r\n  <\/div> \r\n  \r\n  \r\n    <div id=\"trackingResults\" class=\"track-result\">\r\n    <\/div>\r\n    \r\n    <div class=\"lang-switch\">\r\n        <span>Language: <\/span>\r\n        <a class=\"ignore\" href=\"javascript:translate.changeLanguage('english');\">English<\/a> |\r\n        <a class=\"ignore\" href=\"javascript:translate.changeLanguage('deutsch');\">Deutsch<\/a> |\r\n        <a class=\"ignore\" href=\"javascript:translate.changeLanguage('french');\">Fran\u00e7ais<\/a> |\r\n        <a class=\"ignore\" href=\"javascript:translate.changeLanguage('spanish');\">Espa\u00f1ol<\/a> |\r\n        <a class=\"ignore\" href=\"javascript:translate.changeLanguage('italian');\">Italiano<\/a> |\r\n        <a class=\"ignore\" href=\"javascript:translate.changeLanguage('swedish');\">Svenska<\/a> |\r\n        <a class=\"ignore\" href=\"javascript:translate.changeLanguage('dutch');\">Nederlands<\/a> |\r\n        <a class=\"ignore\" href=\"javascript:translate.changeLanguage('chinese_simplified');\">\u7b80\u4f53\u4e2d\u6587<\/a>\r\n    <\/div>\r\n\r\n<\/div>\r\n\r\n<script>\r\n\r\nlet currentLanguage = localStorage.getItem('Language') || 'en';\r\n\r\n\r\nfunction delUrlParam(param) {\r\n    let obj = new URL(window.location.href);\r\n    obj.searchParams.delete(param);\r\n    return obj.href;\r\n}\r\n\r\n\r\nfunction addUrlParam(key, value) {\r\n    let obj = new URL(window.location.href);\r\n    obj.searchParams.set(key, value);\r\n    return obj.href;\r\n}\r\n\r\n\r\nfunction addLinksToText(text) {\r\n\r\n    const regex = \/(https?:\\\/\\\/[^\\s]+)\/g;\r\n\r\n    return text.replace(regex, function(match) {\r\n        return `<a style=\"color: blue\" href=\"${match}\" target=\"_blank\">${match}<\/a>`;\r\n    });\r\n}\r\n\r\n\r\n\r\n\/\/ \u67e5\u8be2\u7269\u6d41\r\nasync function performTrackingQuery(trackingNumber) {\r\n\r\n    const resultBox = document.querySelector('#trackingResults');\r\n\r\n    resultBox.innerHTML = `\r\n        <p>Checking. Please wait....<\/p>\r\n    `;\r\n\r\n\r\n    try {\r\n\r\n        const response = await fetch(\r\n            '\/wp-json\/api\/v1\/tracking\/' + encodeURIComponent(trackingNumber)\r\n        );\r\n\r\n\r\n        const json = await response.json();\r\n\r\n        const list = typeof json === 'string'\r\n            ? JSON.parse(json)\r\n            : json;\r\n\r\n\r\n        let html = `<ul class=\"track-list\">`;\r\n\r\n\r\n        list.forEach((item,index)=>{\r\n\r\n            html += `\r\n                <li id=\"track-item-${index}\">\r\n                    <span class=\"time\">${item.time}<\/span>\r\n                    <span class=\"location\" id=\"location-${index}\">\r\n                        Translating...\r\n                    <\/span>\r\n                    <span class=\"detail\" id=\"detail-${index}\">\r\n                        Translating...\r\n                    <\/span>\r\n                <\/li>\r\n            `;\r\n        });\r\n\r\n\r\n        html += `<\/ul>`;\r\n\r\n\r\n        resultBox.innerHTML = html;\r\n\r\n\r\n        translateAndUpdateBatch(list);\r\n\r\n\r\n    } catch(error){\r\n\r\n        console.error(error);\r\n\r\n        resultBox.innerHTML = `\r\n            <p>\u67e5\u8be2\u51fa\u9519\uff0c\u8bf7\u7a0d\u540e\u518d\u8bd5\u3002<\/p>\r\n        `;\r\n\r\n    }\r\n\r\n}\r\n\r\n\r\n\r\n\/\/ \u6279\u91cf\u7ffb\u8bd1\r\nasync function translateAndUpdateBatch(list){\r\n\r\n    try {\r\n\r\n        const textsToTranslate = list.flatMap(item=>[\r\n            item.location,\r\n            item.detail\r\n        ]);\r\n\r\n\r\n        const translatedTexts =\r\n            await translateTexts(textsToTranslate);\r\n\r\n\r\n\r\n        list.forEach((item,index)=>{\r\n\r\n            document.querySelector(\r\n                '#location-'+index\r\n            ).innerHTML =\r\n                translatedTexts[index*2];\r\n\r\n\r\n            document.querySelector(\r\n                '#detail-'+index\r\n            ).innerHTML =\r\n                addLinksToText(\r\n                    translatedTexts[index*2+1]\r\n                );\r\n\r\n        });\r\n\r\n\r\n    }catch(error){\r\n\r\n        console.error(\r\n            'Translation error:',\r\n            error\r\n        );\r\n\r\n\r\n        list.forEach((item,index)=>{\r\n\r\n            document.querySelector(\r\n                '#location-'+index\r\n            ).innerHTML =\r\n                item.location;\r\n\r\n\r\n            document.querySelector(\r\n                '#detail-'+index\r\n            ).innerHTML =\r\n                addLinksToText(item.detail);\r\n\r\n        });\r\n\r\n    }\r\n\r\n}\r\n\r\n\r\n\r\n\r\n\/\/ \u8bed\u8a00\u5207\u6362\r\nconst translate = {\r\n\r\n    changeLanguage:function(language){\r\n\r\n        const languageMap = {\r\n\r\n            english:'en',\r\n            deutsch:'de',\r\n            french:'fr',\r\n            spanish:'es',\r\n            italian:'it',\r\n            swedish:'sv',\r\n            dutch:'nl',\r\n            chinese_simplified:'zh-Hans'\r\n\r\n        };\r\n\r\n\r\n        currentLanguage =\r\n            languageMap[language] || 'en';\r\n\r\n\r\n        localStorage.setItem(\r\n            'Language',\r\n            currentLanguage\r\n        );\r\n\r\n\r\n\r\n        const items =\r\n            document.querySelectorAll('.track-list li');\r\n\r\n\r\n        let list=[];\r\n\r\n\r\n        items.forEach((element,index)=>{\r\n\r\n            list.push({\r\n\r\n                location:\r\n                document.querySelector(\r\n                    '#location-'+index\r\n                ).innerText,\r\n\r\n\r\n                detail:\r\n                document.querySelector(\r\n                    '#detail-'+index\r\n                ).innerText\r\n\r\n            });\r\n\r\n\r\n            document.querySelector(\r\n                '#location-'+index\r\n            ).innerHTML =\r\n                'Translating...';\r\n\r\n\r\n            document.querySelector(\r\n                '#detail-'+index\r\n            ).innerHTML =\r\n                'Translating...';\r\n\r\n        });\r\n\r\n\r\n\r\n        if(list.length){\r\n\r\n            translateAndUpdateBatch(list);\r\n\r\n        }\r\n\r\n    }\r\n\r\n};\r\n\r\n\r\n\r\n\r\n\/\/ Microsoft Translator\r\nasync function translateTexts(texts){\r\n\r\n    try{\r\n\r\n\r\n        const accessToken =\r\n            await getAccessToken();\r\n\r\n\r\n        const response =\r\n            await fetch(\r\n                `https:\/\/api.cognitive.microsofttranslator.com\/translate?api-version=3.0&to=${currentLanguage}`,\r\n                {\r\n\r\n                    method:'POST',\r\n\r\n                    headers:{\r\n\r\n                        'Content-Type':'application\/json',\r\n\r\n                        'Authorization':\r\n                        `Bearer ${accessToken}`\r\n\r\n                    },\r\n\r\n\r\n                    body:\r\n                    JSON.stringify(\r\n                        texts.map(text=>({\r\n                            Text:text\r\n                        }))\r\n                    )\r\n\r\n                }\r\n            );\r\n\r\n\r\n\r\n        const data =\r\n            await response.json();\r\n\r\n\r\n\r\n        return data.map(\r\n            item=>item.translations[0].text\r\n        );\r\n\r\n\r\n    }catch(error){\r\n\r\n        console.error(error);\r\n\r\n        return texts;\r\n\r\n    }\r\n\r\n}\r\n\r\n\r\n\r\nasync function getAccessToken(){\r\n\r\n    const response =\r\n        await fetch(\r\n            'https:\/\/edge.microsoft.com\/translate\/auth'\r\n        );\r\n\r\n\r\n    return await response.text();\r\n\r\n}\r\n\r\n\r\n\r\n\r\n\/\/ \u9875\u9762\u52a0\u8f7d\r\ndocument.addEventListener(\r\n    'DOMContentLoaded',\r\n    function(){\r\n\r\n\r\n        const urlParams =\r\n            new URLSearchParams(\r\n                window.location.search\r\n            );\r\n\r\n\r\n        const trackingNumber =\r\n            urlParams.get('no');\r\n\r\n\r\n\r\n        if(trackingNumber){\r\n\r\n            document.querySelector(\r\n                '#inputNo'\r\n            ).value =\r\n                trackingNumber;\r\n\r\n\r\n            performTrackingQuery(\r\n                trackingNumber\r\n            );\r\n\r\n        }\r\n\r\n\r\n\r\n\r\n        document.querySelector(\r\n            '#checkButton'\r\n        )\r\n        .addEventListener(\r\n            'click',\r\n            function(){\r\n\r\n\r\n                const number =\r\n                    document.querySelector(\r\n                        '#inputNo'\r\n                    ).value;\r\n\r\n\r\n\r\n                if(number.trim()){\r\n\r\n\r\n                    history.pushState(\r\n                        {},\r\n                        '',\r\n                        delUrlParam('no')\r\n                    );\r\n\r\n\r\n                    history.pushState(\r\n                        {},\r\n                        '',\r\n                        addUrlParam(\r\n                            'no',\r\n                            number\r\n                        )\r\n                    );\r\n\r\n\r\n\r\n                    performTrackingQuery(\r\n                        number\r\n                    );\r\n\r\n\r\n                }else{\r\n\r\n                    alert(\r\n                        'Please enter the tracking number\uff01'\r\n                    );\r\n\r\n                }\r\n\r\n\r\n            }\r\n        );\r\n\r\n\r\n    }\r\n);\r\n\r\n\r\n<\/script>\r\n\r\n<style>\r\n\r\n#main  .lang-switch a{\r\n  color: #2196F3 !important;\r\n}\r\n\r\n#main  .lang-switch {\r\n  margin: 10px 0;\r\n}\r\n \r\n \r\n\r\n#main .track-form {\r\n  display: flex;\r\n}\r\n#main .track-input {\r\n  width: 100%;\r\n  height: auto;\r\n  margin: 0;\r\n  border: 1px solid #f4f4f4;\r\n  padding: 0 10px;\r\n}\r\n#main .track-button {\r\n  background: #17ef97;\r\n  padding: 4px 50px;\r\n  color: #000;\r\n  font-weight: 500;\r\n  line-height: 3;    cursor: pointer;\r\n}\r\n\r\n\/* \u9ed8\u8ba4\u6837\u5f0f\uff0c\u9002\u7528\u4e8e\u684c\u9762\u7aef\u8bbe\u5907 *\/\r\n#main .track-list {\r\n  padding: 0;\r\n  margin: 0;\r\n  list-style-type: none;\r\n}\r\n\r\n#main  .track-list li {\r\n  padding: 10px 15px 10px 45px; \/* \u589e\u52a0\u5de6\u53f3\u5185\u8fb9\u8ddd\uff0c\u63d0\u9ad8\u89e6\u63a7\u533a *\/\r\n  border-color: 1px solid #EBEAEB !important;\r\n  font-size: 16px; \/* \u9ed8\u8ba4\u5b57\u4f53\u5927\u5c0f *\/\r\n  position: relative;\r\n}\r\n\r\n\r\n#main   .track-list li::before {\r\n    content: '';\r\n    display: inline-block;\r\n    width: 10px;\r\n    height: 10px;\r\n    border-radius: 50%; \/* \u5706\u5f62 *\/\r\n    background-color: #a4a4a4; \/* \u9ed1\u8272 *\/\r\n    margin-right: 10px; \/* \u5706\u5f62\u548c\u6587\u672c\u4e4b\u95f4\u7684\u95f4\u8ddd *\/\r\n    position: absolute;\r\n    left: 5px;\r\n    top: 50%;\r\n  }\r\n  .track-list li:first-child::before {\r\n    background-color: #17ef97;\r\n  animation: glowGreen 1.5s ease-in-out infinite; \/* \u7eff\u8272\u5706\u5f62\u5149\u6548\u52a8\u753b *\/\r\n  }\r\n\r\n#main .track-list .time {\r\n   display: block;\r\n  font-weight: bold;\r\n}\r\n\r\n#main .track-list .location {\r\n   display: block;\r\n}\r\n\r\n#main .track-list .detail {\r\n   display: block;\r\n  word-wrap: break-word; \/* \u9632\u6b62\u957f\u5355\u8bcd\u6216\u8005URL\u6ea2\u51fa *\/\r\n}\r\n\r\n#main .track-list .detail a {\r\n  color: #00c7ff !important; \/* \u94fe\u63a5\u7684\u989c\u8272\u4fdd\u6301\u4e00\u81f4 *\/\r\n  text-decoration: none; \/* \u53bb\u9664\u94fe\u63a5\u7684\u4e0b\u5212\u7ebf *\/\r\n}\r\n\r\n\/* \u79fb\u52a8\u7aef\u6837\u5f0f *\/\r\n@media (max-width: 768px) {\r\n  .track-list li {\r\n    flex-direction: column; \/* \u5217\u8868\u9879\u5782\u76f4\u6392\u5217 *\/\r\n     padding: 10px 0 10px 30px; \/* \u589e\u52a0\u5185\u8fb9\u8ddd\uff0c\u63d0\u9ad8\u89e6\u63a7\u533a\u57df *\/\r\n  }\r\n\r\n  \/* \u5728\u5c0f\u5c4f\u5e55\u4e0b\uff0ctime \u548c location \u653e\u5728\u540c\u4e00\u884c\uff0cdetail \u5728\u4e0b\u65b9 *\/\r\n  .track-list .time,\r\n  .track-list .location {\r\n    width: 100%;\r\n    display: block;\r\n  }\r\n\r\n  .track-list .detail {\r\n    width: 100%; \/* detail \u5360\u6ee1\u5269\u4f59\u5bbd\u5ea6 *\/\r\n    margin-top: 10px; \/* \u589e\u52a0\u4e0e\u4e0a\u4e00\u884c\u7684\u95f4\u8ddd *\/\r\n  }\r\n\r\n  .track-list .time,\r\n  .track-list .location {\r\n    font-size: 14px; \/* \u8c03\u6574\u5b57\u4f53\u5927\u5c0f\u9002\u5e94\u5c0f\u5c4f *\/\r\n  }\r\n\r\n  .track-list .detail {\r\n    font-size: 14px;\r\n  }\r\n}\r\n\r\n\r\n\r\n\/* \u7eff\u8272\u5706\u5f62\u5149\u6548\u52a8\u753b *\/\r\n@keyframes glowGreen {\r\n  0% {\r\n    box-shadow: 0 0 5px #17ef97, 0 0 15px #17ef97, 0 0 20px #17ef97;\r\n  }\r\n  50% {\r\n    box-shadow: 0 0 10px #17ef97, 0 0 25px #17ef97, 0 0 30px #0f0;\r\n  }\r\n  100% {\r\n    box-shadow: 0 0 5px #17ef97, 0 0 15px #17ef97, 0 0 20px #17ef97;\r\n  }\r\n}\r\n\r\n\r\n<\/style>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Seguimiento de pedido Introduce tu n\u00famero de pedido en el campo indicado Haz clic en el bot\u00f3n \u2018Rastrear\u2019 de la p\u00e1gina Idioma de seguimiento: English | Deutsch | Fran\u00e7ais | Espa\u00f1ol | Italiano | Svenska | Nederlands | \u7b80\u4f53\u4e2d\u6587<\/p>","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_seopress_titles_title":"","_seopress_titles_desc":"","_seopress_robots_index":"","_seopress_robots_follow":"","_seopress_robots_imageindex":"","_seopress_robots_snippet":"","_seopress_robots_primary_cat":"","_seopress_robots_breadcrumbs":"","_seopress_robots_freeze_modified_date":"","_seopress_robots_custom_modified_date":"","_seopress_robots_canonical":"","_seopress_social_fb_title":"","_seopress_social_fb_desc":"","_seopress_social_fb_img":"","_seopress_social_fb_img_attachment_id":0,"_seopress_social_fb_img_width":0,"_seopress_social_fb_img_height":0,"_seopress_social_twitter_title":"","_seopress_social_twitter_desc":"","_seopress_social_twitter_img":"","_seopress_social_twitter_img_attachment_id":0,"_seopress_social_twitter_img_width":0,"_seopress_social_twitter_img_height":0,"_seopress_redirections_value":"","_seopress_redirections_enabled":"","_seopress_redirections_enabled_regex":"","_seopress_redirections_logged_status":"both","_seopress_redirections_param":"","_seopress_redirections_type":301,"_seopress_analysis_target_kw":"Order Tracking,vape,vapeshop,Disposable Vape,fdvape","_seopress_news_disabled":"","_seopress_video_disabled":"","_seopress_video":[],"_seopress_pro_schemas_manual":[],"_seopress_pro_rich_snippets_disable_all":"","_seopress_pro_rich_snippets_disable":[],"_seopress_pro_schemas":[],"footnotes":""},"class_list":["post-355","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/fdvape.com\/es\/wp-json\/wp\/v2\/pages\/355","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fdvape.com\/es\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/fdvape.com\/es\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/fdvape.com\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fdvape.com\/es\/wp-json\/wp\/v2\/comments?post=355"}],"version-history":[{"count":0,"href":"https:\/\/fdvape.com\/es\/wp-json\/wp\/v2\/pages\/355\/revisions"}],"wp:attachment":[{"href":"https:\/\/fdvape.com\/es\/wp-json\/wp\/v2\/media?parent=355"}],"curies":[{"name":"gracias","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}