Custom Wooden Photo Jigsaw Puzzle - Personalized Picture Game for Family Gifts
Custom Wooden Photo Jigsaw Puzzle - Personalized Picture Game for Family Gifts
Custom Wooden Photo Jigsaw Puzzle - Personalized Picture Game for Family Gifts
Custom Wooden Photo Jigsaw Puzzle - Personalized Picture Game for Family Gifts
Custom Wooden Photo Jigsaw Puzzle - Personalized Picture Game for Family Gifts
Custom Wooden Photo Jigsaw Puzzle - Personalized Picture Game for Family Gifts
Custom Wooden Photo Jigsaw Puzzle - Personalized Picture Game for Family Gifts
Custom Wooden Photo Jigsaw Puzzle - Personalized Picture Game for Family Gifts
Custom Wooden Photo Jigsaw Puzzle - Personalized Picture Game for Family Gifts
Custom Wooden Photo Jigsaw Puzzle - Personalized Picture Game for Family Gifts
Custom Wooden Photo Jigsaw Puzzle - Personalized Picture Game for Family Gifts
Custom Wooden Photo Jigsaw Puzzle - Personalized Picture Game for Family Gifts
Custom Wooden Photo Jigsaw Puzzle - Personalized Picture Game for Family Gifts
Custom Wooden Photo Jigsaw Puzzle - Personalized Picture Game for Family Gifts
Custom Wooden Photo Jigsaw Puzzle - Personalized Picture Game for Family Gifts
Custom Wooden Photo Jigsaw Puzzle - Personalized Picture Game for Family Gifts
Custom Wooden Photo Jigsaw Puzzle - Personalized Picture Game for Family Gifts
Custom Wooden Photo Jigsaw Puzzle - Personalized Picture Game for Family Gifts
Custom Wooden Photo Jigsaw Puzzle - Personalized Picture Game for Family Gifts
Custom Wooden Photo Jigsaw Puzzle - Personalized Picture Game for Family Gifts
Custom Wooden Photo Jigsaw Puzzle - Personalized Picture Game for Family Gifts
Custom Wooden Photo Jigsaw Puzzle - Personalized Picture Game for Family Gifts
Custom Wooden Photo Jigsaw Puzzle - Personalized Picture Game for Family Gifts
Custom Wooden Photo Jigsaw Puzzle - Personalized Picture Game for Family Gifts
Custom Wooden Photo Jigsaw Puzzle - Personalized Picture Game for Family Gifts
Custom Wooden Photo Jigsaw Puzzle - Personalized Picture Game for Family Gifts
Custom Wooden Photo Jigsaw Puzzle - Personalized Picture Game for Family Gifts
Custom Wooden Photo Jigsaw Puzzle - Personalized Picture Game for Family Gifts
Custom Wooden Photo Jigsaw Puzzle - Personalized Picture Game for Family Gifts
Custom Wooden Photo Jigsaw Puzzle - Personalized Picture Game for Family Gifts
Custom Wooden Photo Jigsaw Puzzle - Personalized Picture Game for Family Gifts
Custom Wooden Photo Jigsaw Puzzle - Personalized Picture Game for Family Gifts
Custom Wooden Photo Jigsaw Puzzle - Personalized Picture Game for Family Gifts
Custom Wooden Photo Jigsaw Puzzle - Personalized Picture Game for Family Gifts
Custom Wooden Photo Jigsaw Puzzle - Personalized Picture Game for Family Gifts
Custom Wooden Photo Jigsaw Puzzle - Personalized Picture Game for Family Gifts
Custom Wooden Photo Jigsaw Puzzle - Personalized Picture Game for Family Gifts
Custom Wooden Photo Jigsaw Puzzle - Personalized Picture Game for Family Gifts
Custom Wooden Photo Jigsaw Puzzle - Personalized Picture Game for Family Gifts
Custom Wooden Photo Jigsaw Puzzle - Personalized Picture Game for Family Gifts
Custom Wooden Photo Jigsaw Puzzle - Personalized Picture Game for Family Gifts
Custom Wooden Photo Jigsaw Puzzle - Personalized Picture Game for Family Gifts
Custom Wooden Photo Jigsaw Puzzle - Personalized Picture Game for Family Gifts
Custom Wooden Photo Jigsaw Puzzle - Personalized Picture Game for Family Gifts

Custom Wooden Photo Jigsaw Puzzle - Personalized Picture Game for Family Gifts

$13.89
$13.89
Size
Please select a size
const TAG = "spz-custom-product-automatic"; class SpzCustomProductAutomatic extends SPZ.BaseElement { constructor(element) { super(element); this.variant_id = '42f7ea81-4499-416a-9d8c-8be20a7206a5'; 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 = '6ef97ec0-a53f-40bf-a64e-f2c5ea8fc754'; const variantId = this.variant_id; const productType = ''; 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 == '6ef97ec0-a53f-40bf-a64e-f2c5ea8fc754' && 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 = '6ef97ec0-a53f-40bf-a64e-f2c5ea8fc754'; 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() { // 同一页可能有多个 block 各自渲染本 snippet,导致逻辑元素 spz-custom-discount-toast(#appsAddCartToastFunc) 重复。 // 仅保留 DOM 中第一个实例,其余重复实例移除自身,保证逻辑元素及其 action 引用(appsAddCartToastFunc)唯一。 const funcs = document.querySelectorAll('#appsAddCartToastFunc'); if (funcs.length > 1 && this.element !== funcs[0]) { this.element.remove(); return; } // 全局折扣 toast 的弹出点分散在多个模板/组件里(含声明式 @atcError),无法逐一在弹出前前置, // 故挂载时幂等地去重并挂到 body;加购 toast 改为弹出前按需去重(见 showAddToCartToast) this.ensureSingleToastInBody_('cart_match_discount_toast_wrap'); } unmountCallback() {} // 同一页面可能有多个 block 各自渲染本 toast snippet(如商详的 discount_automatic + 购物车抽屉里的折扣横幅), // 导致 toast 外层出现重复 id。重复 id 下 getElementById/querySelector 及 SPZ 动作引用都只命中第一个, // 且被关进抽屉的那份会被抽屉的 transform/overflow 裁剪/错位。这里在挂载时幂等去重: // 只保留一份、移除多余的,并把保留的挂到 body(body 是 position:fixed 最安全的落点,避免被任何祖先裁剪)。可反复调用。 ensureSingleToastInBody_(id) { const els = Array.from(document.querySelectorAll('#' + id)); if (!els.length) return; els.slice(1).forEach((el) => el.remove()); const keep = els[0]; if (keep.parentNode !== document.body) { document.body.appendChild(keep); } } // 主题购物车抽屉是否打开 isInCartDrawer_() { return !!document.querySelector('[data-section-type="cart_drawer"] spz-sidebar[open]'); } setupAction_() { this.registerAction('showAddToCartToast', () => { // 抽屉内加购:主题本就不会有加购效果,统一弹插件自己的 toast // 非抽屉:主题有加购代理则沿用主题加购效果,否则插件兜底 const proxyEl = document.getElementById('add-cart-event-proxy'); const inDrawer = this.isInCartDrawer_(); if (!inDrawer && proxyEl) { return; } // 弹出前按需去重并挂到 body(幂等),避免重复 id 命中错对象或被抽屉裁剪/错位 this.ensureSingleToastInBody_('apps_add_cart_toast_wrap'); 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);
Shipping

Personalization FAQs

Enter the requested text and/or upload your photo in the fields above. For the best print quality, use the original, highest-resolution image available and avoid screenshots, blurry photos, or social-media downloads. Images may be cropped slightly to fit the selected product size, so keep faces, text, and important details away from the edges. Please double-check all information before adding the item to your cart.

A digital proof is not provided automatically. To request one, leave a note at checkout or email us immediately after ordering with your order number. We will send the proof within 2 business days and begin production after your approval. Requesting a proof may extend the estimated delivery date, so please respond promptly.

Please contact us within 24 hours of placing your order. We will do our best to accommodate changes or cancellations, but they are only possible before production begins and cannot be guaranteed once your item has entered production.

Each item is made especially for you. Production normally takes 1–3 business days. The estimated delivery date shown on this page includes both production and shipping time. Tracking information will be emailed once your order ships. Orders requiring a proof or additional clarification may take longer.

If your item arrives damaged, defective, or different from the personalization details you submitted, please contact us as soon as possible with your order number and clear photos. Once confirmed, we will arrange a free replacement or another appropriate resolution. Because personalized items are made specifically for you, correctly produced items cannot be returned for change of mind, an incorrect size selection, or errors in customer-submitted details.

Custom Wooden Photo Jigsaw Puzzle

Any Theme, Any Memory: > Our customization service isn't limited to just a few styles. We specialize in bringing any theme to life, including:

  • Romantic Themes: Celebrate your love with a Wedding or Anniversary photo.

  • Family Themes: Turn your Family Reunion or holiday gatherings into a lasting legacy.

  • Pet Themes: Honor your furry friends with a high-definition Pet Portrait puzzle.

  • Travel & Adventure Themes: Relive your favorite vacations piece by piece.

You provide the photo, we provide the masterpiece. (Recommended Age: 14+ years)

Craft stunning custom puzzles with your own photos! Turn your favorite photos into hours of fun with your family!

Our puzzle made with high-quality materials which can be an ideal gift for your family, friends, or the one you love most for any special occasion. If you need to prepare a gift for a birthday, Thanksgiving, Christmas, Valentines', graduation, or other such events, choose our custom puzzle. Our personalized photo puzzles are available in six sizes from beginner to advanced which suitable for all people.

Spending time with your kids, satisfy their curiosity, improve their spatial thinking ability, enhance self-confidence! Sharing a good time with your lover. Exercising the brain to improve the memory of the elderly and enrich their lives!

Why You Should Order

Turn designs, photos, and text into a great game with customizable puzzles! For hours of puzzle enjoyment, give a custom puzzle as a gift today!

Beneficial Activity: Working on jigsaw puzzles and focusing on the same image for longer periods can actually turn out more like meditations and induce a certain calmness and peace in the mind. And solving jigsaw puzzle plays a very important role in improving brain functions and sharpening your memory.

Relieve Stress: Take your mind off stress and anxieties. Research shows that creative activities like doing puzzles help reduce stress.

Perfect Gift Idea: Puzzle is one of the magical games that never go out of style. This is an ideal gift for any special occasion. You can make a jigsaw puzzle with photos representing common memories of you and your loved ones, and then regain the good memories together

Perfect For Beginners: Feel too hard to finish the work? Don’t worry, just check the solution in the backside area. It has been divided into several parts with letters marked as "A" "B"…which is easier for beginners.

Details

Premium Quality: puzzles are manufactured from premium quality wood, non-toxic. Much thicker than the industry average. Each puzzle piece is unique and worthwhile.

High Quality of Printing: Colors printed on Puzzle board material always come out vibrant and stunning, and will not discolor after long-term storage. 

Easy to Customize

Customize your Puzzle with your own picture, just tap the "Choose photo" button, attach your photo, add to cart, checkout. It's so easy!

Q: What are my design and personalization options?

A: Your design and personalization options are completely up to you. You can upload whatever you’d like – brand Logo, team logo, family badge, a photo, an inspiring quote, vintage graphics, memorable landmarks, and more.

Q: Is there anyone else who can help me to crop the photo?

A:  Don't worry about your photos, our Photo Enhancement Team can help you out, crop the photo to fit the bath rug set, remove the background massive, add text on the photo. You don't need to learn any skill to crop the photo, just leave us a message or email us via support@BlingPainting.com

Q & A

Q: If I attached the wrong photo, can I change it?

A:  sure, we can modify the order for you, if you want to change the color, change the photo, just shoot us an email: support@BlingPainting.com

100% Satisfaction Guarantee

Customer Happiness is our No.1 priority. If you're unhappy with your purchase for any reason at all, let us know! 

Production, Shipping & Returns

  • Please allow us to process your custom order within 3-5 business days
  • Free worldwide shipping for orders above $69
  • Free Remake Guarantee. if your first order doesn't fit like you think it should, we'll make you a new one free of charge

Support Team

Email us: support@BlingPainting.com

Bulk order: info@BlingPainting.com

Message us: ‪(302) 315-0808

We want you to be satisfied with the products you buy from us. 

We have 24/7/365 ticket and email support. Please contact us at support@BlingPainting.com if you need any assistance.