Vintage Soccer Jersey Borussia Dortmund Home 1988
Vintage Soccer Jersey Borussia Dortmund Home 1988
Vintage Soccer Jersey Borussia Dortmund Home 1988
Vintage Soccer Jersey Borussia Dortmund Home 1988
Vintage Soccer Jersey Borussia Dortmund Home 1988
Vintage Soccer Jersey Borussia Dortmund Home 1988
Vintage Soccer Jersey Borussia Dortmund Home 1988
Vintage Soccer Jersey Borussia Dortmund Home 1988
1 / 8
Vintage Soccer Jersey Borussia Dortmund Home 1988
Vintage Soccer Jersey Borussia Dortmund Home 1988
Vintage Soccer Jersey Borussia Dortmund Home 1988
Vintage Soccer Jersey Borussia Dortmund Home 1988
Vintage Soccer Jersey Borussia Dortmund Home 1988
Vintage Soccer Jersey Borussia Dortmund Home 1988
Vintage Soccer Jersey Borussia Dortmund Home 1988
Vintage Soccer Jersey Borussia Dortmund Home 1988
You may also like Don't Like These?
55% OFF

Vintage Soccer Jersey Borussia Dortmund Home 1988

$59.00 $130.10
const TAG = "spz-custom-product-automatic"; class SpzCustomProductAutomatic extends SPZ.BaseElement { constructor(element) { super(element); this.variant_id = '9171f33c-9b8d-411f-91bb-76537fe30461'; this.isRTL = SPZ.win.document.dir === 'rtl'; this.isAddingToCart_ = false; // 加购中状态 } static deferredMount() { return false; } buildCallback() { this.action_ = SPZServices.actionServiceForDoc(this.element); this.templates_ = SPZServices.templatesForDoc(this.element); this.xhr_ = SPZServices.xhrFor(this.win); this.setupAction_(); this.viewport_ = this.getViewport(); } mountCallback() { this.init(); // 监听事件 this.bindEvent_(); } async init() { this.handleFitTheme(); const data = await this.getDiscountList(); this.renderApiData_(data); } async getDiscountList() { const productId = 'f6645e87-92cd-4866-b010-71d2ee79e7ed'; const variantId = this.variant_id; const productType = 'default'; const reqBody = { product_id: productId, variant_id: variantId, discount_method: "DM_AUTOMATIC", customer: { customer_id: window.C_SETTINGS.customer.customer_id, email: window.C_SETTINGS.customer.customer_email }, product_type: productType } const url = `/api/storefront/promotion/display_setting/text/list`; const data = await this.xhr_.fetchJson(url, { method: "post", body: reqBody }).then(res => { return res; }).catch(err => { this.setContainerDisabled(false); }) return data; } async renderDiscountList() { this.setContainerDisabled(true); const data = await this.getDiscountList(); this.setContainerDisabled(false); // 重新渲染 抖动问题处理 this.renderApiData_(data); } clearDom() { const children = this.element.querySelector('*:not(template)'); children && SPZCore.Dom.removeElement(children); } async renderApiData_(data) { const parentDiv = document.querySelector('.automatic_discount_container'); const newTplDom = await this.getRenderTemplate(data); if (parentDiv) { parentDiv.innerHTML = ''; parentDiv.appendChild(newTplDom); } else { console.log('automatic_discount_container is null'); } } doRender_(data) { const renderData = data || {}; return this.templates_ .findAndRenderTemplate(this.element, renderData) .then((el) => { this.clearDom(); this.element.appendChild(el); }); } async getRenderTemplate(data) { const renderData = data || {}; return this.templates_ .findAndRenderTemplate(this.element, { ...renderData, isRTL: this.isRTL }) .then((el) => { this.clearDom(); return el; }); } setContainerDisabled(isDisable) { const automaticDiscountEl = document.querySelector('.automatic_discount_container_outer'); if(isDisable) { automaticDiscountEl.setAttribute('disabled', ''); } else { automaticDiscountEl.removeAttribute('disabled'); } } // 绑定事件 bindEvent_() { window.addEventListener('click', (e) => { let containerNodes = document.querySelectorAll(".automatic-container .panel"); let bool; Array.from(containerNodes).forEach((node) => { if(node.contains(e.target)){ bool = true; } }) // 是否popover面板点击范围 if (bool) { return; } if(e.target.classList.contains('drowdown-icon') || e.target.parentNode.classList.contains('drowdown-icon')){ return; } const nodes = document.querySelectorAll('.automatic-container'); Array.from(nodes).forEach((node) => { node.classList.remove('open-dropdown'); }) // 兼容主题 this.toggleProductSticky(true); }) // 监听变体变化 document.addEventListener('dj.variantChange', async(event) => { // 重新渲染 const variant = event.detail.selected; if (variant.product_id == 'f6645e87-92cd-4866-b010-71d2ee79e7ed' && variant.id != this.variant_id) { this.variant_id = variant.id; this.renderDiscountList(); } }); } // 兼容主题 handleFitTheme() { // top 属性影响抖动 let productInfoEl = null; if (window.SHOPLAZZA.theme.merchant_theme_name === 'Wind' || window.SHOPLAZZA.theme.merchant_theme_name === 'Flash') { productInfoEl = document.querySelector('.product-info-body .product-sticky-container'); } else if (window.SHOPLAZZA.theme.merchant_theme_name === 'Hero') { productInfoEl = document.querySelector('.product__info-wrapper .properties-content'); } if(productInfoEl){ productInfoEl.classList.add('force-top-auto'); } } // 兼容 wind/flash /hero 主题 (sticky属性影响 popover 层级展示, 会被其他元素覆盖) toggleProductSticky(isSticky) { let productInfoEl = null; if (window.SHOPLAZZA.theme.merchant_theme_name === 'Wind' || window.SHOPLAZZA.theme.merchant_theme_name === 'Flash') { productInfoEl = document.querySelector('.product-info-body .product-sticky-container'); } else if (window.SHOPLAZZA.theme.merchant_theme_name === 'Hero') { productInfoEl = document.querySelector('.product__info-wrapper .properties-content'); } if(productInfoEl){ if(isSticky) { // 还原该主题原有的sticky属性值 productInfoEl.classList.remove('force-position-static'); return; } productInfoEl.classList.toggle('force-position-static'); } } setupAction_() { this.registerAction('handleDropdown', (invocation) => { const discount_id = invocation.args.discount_id; const nodes = document.querySelectorAll('.automatic-container'); Array.from(nodes).forEach((node) => { if(node.getAttribute('id') != `automatic-${discount_id}`) { node.classList.remove('open-dropdown'); } }) const $discount_item = document.querySelector(`#automatic-${discount_id}`); $discount_item && $discount_item.classList.toggle('open-dropdown'); // 兼容主题 this.toggleProductSticky(); }); // 加购事件 this.registerAction('handleAddToCart', (invocation) => { // 阻止事件冒泡 const event = invocation.event; if (event) { event.stopPropagation(); event.preventDefault(); } // 如果正在加购中,直接返回 if (this.isAddingToCart_) { return; } const quantity = invocation.args.quantity || 1; this.addToCart(quantity); }); } // 加购方法 async addToCart(quantity) { // 设置加购中状态 this.isAddingToCart_ = true; const productId = 'f6645e87-92cd-4866-b010-71d2ee79e7ed'; const variantId = this.variant_id; const url = '/api/cart'; const reqBody = { product_id: productId, variant_id: variantId, quantity: quantity }; try { const data = await this.xhr_.fetchJson(url, { method: 'POST', body: reqBody }); // 触发加购成功提示 this.triggerAddToCartToast_(); return data; } catch (error) { error.then(err=>{ this.showToast_(err?.message || err?.errors?.[0] || 'Unknown error'); }) } finally { // 无论成功失败,都重置加购状态 this.isAddingToCart_ = false; } } showToast_(message) { const toastEl = document.querySelector("#apps-match-drawer-add_to_cart_toast"); if (toastEl) { SPZ.whenApiDefined(toastEl).then((apis) => { apis.showToast(message); }); } } // 触发加购成功提示 triggerAddToCartToast_() { // 如果主题有自己的加购提示,则不显示 const themeAddToCartToastEl = document.querySelector('#add-cart-event-proxy'); if (themeAddToCartToastEl) return; // 显示应用的加购成功提示 this.showToast_("Added successfully"); } triggerEvent_(name, data) { const event = SPZUtils.Event.create(this.win, `${ TAG }.${ name }`, data || {}); this.action_.trigger(this.element, name, event); } isLayoutSupported(layout) { return layout == SPZCore.Layout.CONTAINER; } } SPZ.defineElement(TAG, SpzCustomProductAutomatic);
class SpzCustomDiscountBundle extends SPZ.BaseElement { constructor(element) { super(element); } isLayoutSupported(layout) { return layout == SPZCore.Layout.LOGIC; } mountCallback() {} unmountCallback() {} setupAction_() { this.registerAction('showAddToCartToast', () => { const themeAddToCartToastEl = document.querySelector('#add-cart-event-proxy') if(themeAddToCartToastEl) return const toastEl = document.querySelector('#apps-match-drawer-add_to_cart_toast') SPZ.whenApiDefined(toastEl).then((apis) => { apis.showToast("Added successfully"); }); }); } buildCallback() { this.setupAction_(); }; } SPZ.defineElement('spz-custom-discount-toast', SpzCustomDiscountBundle);
/** * 优惠码组件模型类 * 处理优惠码的显示和交互逻辑 */ class SpzCustomDiscountCodeModel extends SPZ.BaseElement { constructor(element) { super(element); // 复制按钮和内容的类名 this.copyBtnClass = "discount_code_btn" this.copyClass = "discount_code_value" } isLayoutSupported(layout) { return layout == SPZCore.Layout.LOGIC; } buildCallback() { // 初始化服务 this.action_ = SPZServices.actionServiceForDoc(this.element); this.templates_ = SPZServices.templatesForDoc(this.element); this.xhr_ = SPZServices.xhrFor(this.win); } /** * 渲染优惠码组件 * @param {Object} data - 渲染数据 */ doRender_(data) { return this.templates_ .findAndRenderTemplate(this.element, Object.assign(this.getDefaultData(), data) ) .then((el) => { this.clearDom(); this.element.appendChild(el); // 绑定复制代码功能 this.copyCode(el, data); }); } /** * 获取渲染模板 * @param {Object} data - 渲染数据 */ getRenderTemplate(data) { const renderData = Object.assign(this.getDefaultData(), data); return this.templates_ .findAndRenderTemplate(this.element, renderData) .then((el) => { this.clearDom(); return el; }); } /** * 清除DOM内容 */ clearDom() { const children = this.element.querySelector('*:not(template)'); children && SPZCore.Dom.removeElement(children); } /** * 获取默认数据 * @returns {Object} 默认数据对象 */ getDefaultData() { return { isMobile: appDiscountUtils.judgeMobile(), isRTL: appDiscountUtils.judgeRTL(), image_domain: this.win.SHOPLAZZA.image_domain, copyBtnClass: this.copyBtnClass, copyClass: this.copyClass } } /** * 复制优惠码功能 * @param {Element} el - 当前元素 */ copyCode(el) { const copyBtnList = el.querySelectorAll(`.${this.copyBtnClass}`); if (copyBtnList.length > 0) { copyBtnList.forEach(item => { item.onclick = async () => { // 确保获取正确的元素和内容 const codeElement = item.querySelector(`.${this.copyClass}`); if (!codeElement) return; // 获取纯文本内容 const textToCopy = codeElement.innerText.trim(); // 尝试使用现代API,如果失败则使用备用方案 try { if (navigator.clipboard && navigator.clipboard.writeText) { await navigator.clipboard.writeText(textToCopy); } else { throw new Error('Clipboard API not available'); } // 显示复制成功提示 this.showCopySuccessToast(textToCopy, el); } catch (err) { console.error('Modern clipboard API failed, trying fallback...', err); // 使用备用复制方案 this.fallbackCopy(textToCopy, el); } const discountId = item.dataset["discountId"]; // 是否跳转落地页配置 const redirection = item.dataset["redirection"] === "true"; // 跳转到落地页 if (redirection && appDiscountUtils.inProductBody(this.element)) { this.win.open(`/promotions/discount-default/${discountId}`); } } }) } } /** * 使用 execCommand 的复制方案 * @param {string} codeText - 要复制的文本 * @param {Element} el - 当前元素 */ fallbackCopy(codeText, el) { const textarea = this.win.document.createElement('textarea'); textarea.value = codeText; // 设置样式使文本框不可见 textarea.style.position = 'fixed'; textarea.style.left = '-9999px'; textarea.style.top = '0'; // 添加 readonly 属性防止移动端虚拟键盘弹出 textarea.setAttribute('readonly', 'readonly'); this.win.document.body.appendChild(textarea); textarea.focus(); textarea.select(); try { this.win.document.execCommand('copy'); // 显示复制成功提示 this.showCopySuccessToast(codeText, el); } catch (err) { console.error('Copy failed:', err); } this.win.document.body.removeChild(textarea); } /** * 创建 Toast 元素 * @returns {Element} 创建的 Toast 元素 */ createToastEl_() { const toast = document.createElement('ljs-toast'); toast.setAttribute('layout', 'nodisplay'); toast.setAttribute('hidden', ''); toast.setAttribute('id', 'discount-code-toast'); toast.style.zIndex = '1051'; return toast; } /** * 挂载 Toast 元素到 body * @returns {Element} 挂载的 Toast 元素 */ mountToastToBody_() { const existingToast = this.win.document.getElementById('discount-code-toast'); if (existingToast) { return existingToast; } const toast = this.createToastEl_(); this.win.document.body.appendChild(toast); return toast; } /** * 复制成功的提醒 * @param {string} codeText - 要复制的文本 * @param {Element} el - 当前元素 */ showCopySuccessToast(codeText, el) { const $toast = this.mountToastToBody_(); SPZ.whenApiDefined($toast).then(toast => { toast.showToast("Discount code copied !"); this.codeCopyInSessionStorage(codeText); }); } /** * 复制优惠码成功后要存一份到本地存储中,购物车使用 * @param {string} codeText - 要复制的文本 */ codeCopyInSessionStorage(codeText) { try { sessionStorage.setItem('other-copied-coupon', codeText); } catch (error) { console.error(error) } } } // 注册自定义元素 SPZ.defineElement('spz-custom-discount-code-model', SpzCustomDiscountCodeModel);
/** * Custom discount code component that handles displaying and managing discount codes * @extends {SPZ.BaseElement} */ class SpzCustomDiscountCode extends SPZ.BaseElement { constructor(element) { super(element); // API endpoint for fetching discount codes this.getDiscountCodeApi = "\/api\/storefront\/promotion\/code\/list"; // Debounce timer for resize events this.timer = null; // Current variant ID this.variantId = "9171f33c-9b8d-411f-91bb-76537fe30461"; // Store discount code data this.discountCodeData = {} } /** * Check if layout is supported * @param {string} layout - Layout type * @return {boolean} */ isLayoutSupported(layout) { return layout == SPZCore.Layout.LOGIC; } /** * Initialize component after build */ buildCallback() { this.templates_ = SPZServices.templatesForDoc(); this.viewport_ = this.getViewport(); // Bind methods to maintain context this.render = this.render.bind(this); this.resize = this.resize.bind(this); this.switchVariant = this.switchVariant.bind(this); } /** * Setup component when mounted */ mountCallback() { this.getData(); // Add event listeners this.viewport_.onResize(this.resize); this.win.document.addEventListener('dj.variantChange', this.switchVariant); } /** * Cleanup when component is unmounted */ unmountCallback() { this.viewport_.removeResize(this.resize); this.win.document.removeEventListener('dj.variantChange', this.switchVariant); // 清除定时器 if (this.timer) { clearTimeout(this.timer); this.timer = null; } } /** * Handle resize events with debouncing */ resize() { if (this.timer) { clearTimeout(this.timer) this.timer = null; } this.timer = setTimeout(() => { if (appDiscountUtils.inProductBody(this.element)) { this.render(); } else { this.renderSkeleton(); } }, 200); } /** * Handle variant changes * @param {Event} event - Variant change event */ switchVariant(event) { const variant = event.detail.selected; if (variant.product_id == 'f6645e87-92cd-4866-b010-71d2ee79e7ed' && variant.id != this.variantId) { this.variantId = variant.id; this.getData(); } } /** * Fetch discount code data from API */ getData() { if (appDiscountUtils.inProductBody(this.element)) { const reqBody = { product_id: "f6645e87-92cd-4866-b010-71d2ee79e7ed", variant_id: this.variantId, product_type: "default", } if (!reqBody.product_id || !reqBody.variant_id) return; this.discountCodeData = {}; this.win.fetch(this.getDiscountCodeApi, { method: "POST", body: JSON.stringify(reqBody), headers: { "Content-Type": "application/json" } }).then(async (response) => { if (response.ok) { let data = await response.json(); if (data.list && data.list.length > 0) { data.list[0].product_setting.template_config = JSON.parse(data.list[0].product_setting.template_config); // Format timestamps to local timezone const zone = this.win.SHOPLAZZA.shop.time_zone; data.list = data.list.map(item => { if(+item.ends_at !== -1) { item.ends_at = appDiscountUtils.convertTimestampToFormat(+item.ends_at, zone); } item.starts_at = appDiscountUtils.convertTimestampToFormat(+item.starts_at, zone); return item; }); } this.discountCodeData = data; this.render(); } else { this.clearDom(); } }).catch(err => { console.error("discount_code", err) this.clearDom(); }); } else { this.renderSkeleton(); } } /** * Clear component DOM except template */ clearDom() { const children = this.element.querySelector('*:not(template)'); children && SPZCore.Dom.removeElement(children); } /** * Render discount codes with formatted dates */ render() { // Render using discount code model SPZ.whenApiDefined(document.querySelector('#spz_custom_discount_code_model')).then(renderApi => { renderApi.doRender_({ discountCodeData: this.discountCodeData }) }).catch(err => { this.clearDom(); }) } renderSkeleton() { // Render template for non-product pages this.templates_ .findAndRenderTemplate(this.element, { isMobile: appDiscountUtils.judgeMobile() }) .then((el) => { this.clearDom(); this.element.appendChild(el); }) .catch(err => { this.clearDom(); }); } } // Register custom element SPZ.defineElement('spz-custom-discount-code', SpzCustomDiscountCode);
Size
Custom Items
CUSTOM PATCH
Qty 999 in stock
/** @private {string} */ class SpzCustomAnchorScroll extends SPZ.BaseElement { static deferredMount() { return false; } constructor(element) { super(element); /** @private {Element} */ this.scrollableContainer_ = null; } isLayoutSupported(layout) { return layout == SPZCore.Layout.LOGIC; } buildCallback() { this.viewport_ = this.getViewport(); this.initActions_(); } setTarget(containerId, targetId) { this.containerId = '#' + containerId; this.targetId = '#' + targetId; } scrollToTarget() { const container = document.querySelector(this.containerId); const target = container.querySelector(this.targetId); const {scrollTop} = container; const eleOffsetTop = this.getOffsetTop_(target, container); this.viewport_ .interpolateScrollIntoView_( container, scrollTop, scrollTop + eleOffsetTop ); } initActions_() { this.registerAction( 'scrollToTarget', (invocation) => this.scrollToTarget(invocation?.caller) ); this.registerAction( 'setTarget', (invocation) => this.setTarget(invocation?.args?.containerId, invocation?.args?.targetId) ); } /** * @param {Element} element * @param {Element} container * @return {number} * @private */ getOffsetTop_(element, container) { if (!element./*OK*/ getClientRects().length) { return 0; } const rect = element./*OK*/ getBoundingClientRect(); if (rect.width || rect.height) { return rect.top - container./*OK*/ getBoundingClientRect().top; } return rect.top; } } SPZ.defineElement('spz-custom-anchor-scroll', SpzCustomAnchorScroll); const STRENGTHEN_TRUST_URL = "/api/strengthen_trust/settings"; class SpzCustomStrengthenTrust extends SPZ.BaseElement { constructor(element) { super(element); this.renderElement_ = null; } isLayoutSupported(layout) { return layout == SPZCore.Layout.CONTAINER; } buildCallback() { this.xhr_ = SPZServices.xhrFor(this.win); const renderId = this.element.getAttribute('render-id'); SPZCore.Dom.waitForChild( document.body, () => !!document.getElementById(renderId), () => { this.renderElement_ = SPZCore.Dom.scopedQuerySelector( document.body, `#${renderId}` ); if (this.renderElement_) { this.render_(); } this.registerAction('track', (invocation) => { this.track_(invocation.args); }); } ); } render_() { this.fetchData_().then((data) => { if (!data) { return; } SPZ.whenApiDefined(this.renderElement_).then((apis) => { apis?.render(data); document.querySelector('#strengthen-trust-render-1539149753700').addEventListener('click',(event)=>{ if(event.target.nodeName == 'A'){ this.track_({type: 'trust_content_click'}); } }) }); }); } track_(data = {}) { const track = window.sa && window.sa.track; if (!track) { return; } track('trust_enhancement_event', data); } parseJSON_(string) { let result = {}; try { result = JSON.parse(string); } catch (e) {} return result; } fetchData_() { return this.xhr_ .fetchJson(STRENGTHEN_TRUST_URL) .then((responseData) => { if (!responseData || !responseData.data) { return null; } const data = responseData.data; const moduleSettings = (data.module_settings || []).reduce((result, moduleSetting) => { return result.concat(Object.assign(moduleSetting, { logos: (moduleSetting.logos || []).map((item) => { return moduleSetting.logos_type == 'custom' ? this.parseJSON_(item) : item; }) })); }, []); return Object.assign(data, { module_settings: moduleSettings, isEditor: window.self !== window.top, }); }); } } SPZ.defineElement('spz-custom-strengthen-trust', SpzCustomStrengthenTrust);

FAQs

Got questions? We've got answers...

  • NEW ORDERS
  • EXISTING ORDERS
  • When will my order be shipped?

    Non-Customized Orders: Shipped within 1 to 3 business days after ordering.

    Customized Orders: Processing time is 5 business days.
    You will be notified by email when your order has shipped.

    Note:

    If you haven't received the email, please check your spam folder first.
    If your order has not been shipped within 7 business days, please contact customer service.

  • International Deliveries

    We ship worldwide and offer a range of delivery options to suit your needs. We utilise a range of couriers including Royal Mail, PostNL, Hermes, Norsk Global, DPD, Deutsche Poste and Hermes.
    We offer tracked and express shipping to all countries.
    Delivery Time:
    Europe: Delivery within 7-15 days (excluding order processing time).
    Other Regions: Delivery within 15-30 days (excluding order processing time).

  • Do you accept customized teamwear orders?

    We welcome team and corporate orders and are pleased to be able to offer volume discounts.
    We realize that your uniforms speak volumes about your team, which is why your on-field image is our primary concern.
    Together with our professional staff of artists, your representative will work with you to create the exact personality and look for your team.
    Whether you choose from our collection of house logos, or create your own masterpiece, we will work with you to ensure your team looks as good as they can be.

  • What Payment Methods Do You Accept?

    We currently accept online payments with a number of credit/debit cards and also PayPal.

  • Printing Details

    Howjerseys Shop offers one of the most extensive football shirt printing services that you will find online. Since our formation in 2020, we have handled thousands of different printing styles and printed tens of thousands of orders, making us a premier choice for your football shirt printing needs.

  • How Do I Track My Order?

    To check the latest information about your order, please visit the 'TRACK ORDER' page, or contact our customer service via email or WhatsApp.
    If your order's tracking number has not been updated, please do not worry. Due to international shipping reasons, the tracking information will only be updated after your package arrives in your country, clears customs, and is handed over to the local post office.
    If the tracking number has not been updated for more than 15 days, please contact us promptly for assistance.

  • Returns Policy

    We hope that you will be happy with your purchase, but should you wish to return or exchange an item, please follow the instructions below.
    Please note we are unable to accept the return of printed shirts or personalised items, unless the item is deemed to be faulty and the fault is that of HowJerseys shop. The same applies if a player leaves the club or changes his squad number during his time at the club.
    Please inform us, either by email or by Whatsapp, of any item you intend to return within 14 days of taking delivery. Returns must be made within 28 days of taking delivery. All items must be returned with all outer packaging and labels intact and be in the exact condition in which they were received.
    Please include a copy of your return form inside the package to allow us to identify the order as yours - you would be amazed how many people send us a shirt and absolutely nothing to help us work out whose order it is. The return form can be accessed through your account. Please also note on the invoice the reason for return and whether you are requesting a refund or an exchange.
    Returns will be inspected upon receipt. If a returned item is found to be non-faulty, correct, and of the correct size, we will not accept any costs incurred in returning the item. If an exchange item is to be sent, the customer will be responsible for the shipping cost on the exchange item as determined by value in our shipping rate chart. In the event that an exchange is requested but not available a refund will be issued.

  • Can I Cancel My Order?

    We're pretty quick at picking and packing your order, therefore we need to be quick to change or cancel your order once your purchase has been confirmed.
    We are unable to accept the cancellation or return of your order once we have started processing your order. After placing your order, you will have a small window before we start processing the order, during which time you will be able to cancel.
    If your order status has been changed to Being Picked for Dispatch, it is usually too late for us to make changes to the order as this means your order has been packed and ready for shipping.
    For printed shirts, once we have begun processing the order, we are unable to accept cancellation because we start building the order immediately. Please note, our order statuses are updated in batch and not in real-time, so your shirt is often printed long before the status updates.
    You are welcome to email us and we will change/cancel if we can, but we cannot guarantee it once the order has been possible.

  • I Have Received The Wrong Order

    If we have mistakenly sent you the wrong product, we will send you the correct item at no additional cost.

  • Printing Details

    When we process your refund, you will get an email confirming that the refund has been initiated. Please allow 5 working days for this to reach your account (although in practice this is often quicker).
    If you have not received your refund after 5 working days, please contact our Customer Service team with your order details and they will escalate with our payment processors.
    If you have received your refund, but you feel the amount is incorrect, please contact our Customer Service team immediately and they will investigate the issue for you.

Shipping Policy

1. When will I receive my order?

Delivery to most physical addresses occurs within 5 to 20 business days. The following in-house processing procedures will postpone the shipping of your order: customization, backorder, and special order. Your entire order’s shipping will depend on how many shirts are in your order. Usually, for every shipment, we ship less than 15 shirts or 3 kg. For orders over 15 shirts or 3 kg, we will add one more shipment.

2. Which countries can it be shipped to?

We ship worldwide and offer a range of delivery options to suit your needs. We utilise a range of couriers including Royal Mail, PostNL, Hermes, Norsk Global, DPD, Deutsche Poste and Hermes.
We offer tracked and express shipping to all countries.
Delivery Time:
Europe: Delivery within 7-15 days (excluding order processing time).
Other Regions: Delivery within 15-30 days (excluding order processing time).

3. What shipping method do you use?

We offer standard shipping options such as Postal Service or USPS. You can also choose expedited shipping via FedEx or DHL for an additional cost to speed up delivery.

4. Can I ship to a post office box or private box address? 

DHL or FedEx shipping does not carry to box addresses, so you must provide a physical address for delivery.

5. Is any of your merchandise restricted in my country?

All countries regulate the quantities and varieties of items that can be imported. Sports apparel is not generally considered a restricted item, but please check with your local customs agency before ordering.

6. Do you charge tax?

We do not charge tax when you check out, but your local customs officials will assess taxes before allowing the item to enter your country. The carrier will usually pay these fees on your behalf and collect them from you at the time of delivery. You are responsible for all customs fees, including duties, taxes, brokerage fees, and any other fees assessed at the border before delivery.

7. Can I return an item?

Yes, returns are accepted. However, we kindly ask that you contact us prior to returning your item to receive the correct return address and an estimate of the return shipping costs.

8. What should I do if I am missing an item or if I received a defective or incorrect item?

Please accept our apologies if your order was not processed correctly. Just contact us, and we will do our best to correct your order as efficiently as possible. 

Free Worldwide shipping Free returns Online Support 100% Secure Checkout
Free shipping on all orders Returns within 14 days of delivery 24 hours a day, 7 days a week PayPal / MasterCard / Visa

Returns&Exchanges

Hey, it happens sometimes; you order something you think is perfect, but when it arrives, it’s not exactly what you imagined. 

But don’t worry! Our returns policy is designed to ensure you can shop with complete confidence. 

Our Return Process is simple:

  • If you are not 100% satisfied with your purchase, you may return your item to us in 365 days from the receipt of the parcel to get a refund.
  • Returned items must be in their original condition, unworn and unused, with all original tags and labels intact. This means the product hasn’t been washed, worn, or had its plastic packaging removed or damaged.
  • Contact customer service to obtain the correct return address before returning the item.
  • Your returned item(s) will be inspected upon arrival before your refund is processed.
  • It can take up to 14 working days for your refund to be processed. You will receive a confirmation email once the refund is completed.
  • All return charges are the customer’s responsibility.

Important Information:

  1. Personalised items are non-returnable. A refund will only be permitted if the garment is faulty, damaged or wrong. 
  2. We accept no responsibility once a jersey or short has been printed, if a player leaves the team and/or their team number changes, or if the badge changes in the future.
  3. Delivery charges will be non-refundable unless the products are faulty, damaged or not as described upon delivery.
  4. soccerjerseycity is not responsible for any returns lost in transit or any additional charges incurred.

Exchange Policy

We currently do not offer exchanges, for the fastest service, simply follow the returns process to return your item and place an order for your new items.

Due to the time required for international shipping,, this is the most efficient means by which an exchange can take place; we cannot otherwise guarantee that your requested replacement item would be in stock by the time we receive your return.

If you’re not satisfied with the size, we offer a Resend Policy. 

You only need to pay the applicable shipping fee to get the new item and there is no need to return the original item. Click here to learn more.

Need More Help

Contact customer service by clicking here.

You may also like Don't Like These?