WordPress database error: [Cannot add foreign key constraint]CREATE TABLE IF NOT EXISTS `wp_stw_collections` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`user_id` bigint(20) unsigned NOT NULL,
`url_code` varchar(255) NOT NULL DEFAULT '',
`name` varchar(255) NOT NULL DEFAULT 'My Wishlist',
`description` text,
`status` varchar(50) NOT NULL DEFAULT 'publish',
`is_default` tinyint(1) NOT NULL DEFAULT 0,
`is_public` tinyint(1) NOT NULL DEFAULT 0,
`created_at` datetime DEFAULT CURRENT_TIMESTAMP,
`updated_at` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
KEY `user_id` (`user_id`),
KEY `is_default` (`is_default`),
KEY `is_public` (`is_public`),
CONSTRAINT `fk_wishlist_collections_user` FOREIGN KEY (`user_id`) REFERENCES `wp_users` (`ID`) ON DELETE CASCADE
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci
WordPress database error: [Cannot add foreign key constraint]CREATE TABLE IF NOT EXISTS `wp_stw_collection_items` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`collection_id` bigint(20) unsigned NOT NULL,
`product_id` bigint(20) unsigned NOT NULL,
`variation_id` bigint(20) DEFAULT 0,
`sort_order` int(11) DEFAULT 0,
`quantity` int(11) NOT NULL DEFAULT 1,
`priority` enum('low','medium','high') DEFAULT 'medium',
`notes` text,
`added_at` datetime DEFAULT CURRENT_TIMESTAMP,
`updated_at` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `collection_product_variation` (`collection_id`,`product_id`,`variation_id`),
KEY `collection_id` (`collection_id`),
KEY `product_id` (`product_id`),
KEY `variation_id` (`variation_id`),
KEY `priority` (`priority`),
KEY `added_at` (`added_at`),
CONSTRAINT `fk_wishlist_items_collection` FOREIGN KEY (`collection_id`) REFERENCES `wp_stw_collections` (`id`) ON DELETE CASCADE,
CONSTRAINT `fk_wishlist_items_product` FOREIGN KEY (`product_id`) REFERENCES `wp_posts` (`ID`) ON DELETE CASCADE
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci
WordPress database error: [Cannot add foreign key constraint]CREATE TABLE IF NOT EXISTS `wp_stw_collection_sharing` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`collection_id` bigint(20) unsigned NOT NULL,
`share_token` varchar(64) NOT NULL,
`expires_at` datetime DEFAULT NULL,
`view_count` int(11) DEFAULT 0,
`created_at` datetime DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `share_token` (`share_token`),
KEY `collection_id` (`collection_id`),
KEY `expires_at` (`expires_at`),
CONSTRAINT `fk_wishlist_shares_collection` FOREIGN KEY (`collection_id`) REFERENCES `wp_stw_collections` (`id`) ON DELETE CASCADE
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci
WordPress database error: [Table 'blackbro_wrdp1.wp_stw_collection_items' doesn't exist]SHOW INDEX FROM `wp_stw_collection_items` WHERE Key_name = 'collection_product'
WordPress database error: [Table 'blackbro_wrdp1.wp_stw_collection_items' doesn't exist]SHOW INDEX FROM `wp_stw_collection_items` WHERE Key_name = 'variation_id'
WordPress database error: [Table 'blackbro_wrdp1.wp_stw_collection_items' doesn't exist]ALTER TABLE `wp_stw_collection_items` ADD KEY `variation_id` (`variation_id`)
WordPress database error: [Table 'blackbro_wrdp1.wp_stw_collection_items' doesn't exist]SHOW INDEX FROM `wp_stw_collection_items` WHERE Key_name = 'collection_product_variation'
WordPress database error: [Table 'blackbro_wrdp1.wp_stw_collection_items' doesn't exist]ALTER TABLE `wp_stw_collection_items` ADD UNIQUE KEY `collection_product_variation` (`collection_id`,`product_id`,`variation_id`)
{"use strict";const e=window.wp.hooks,t="mailchimp-woocommerce";let i=!1;function c(){return void 0!==window.$mcSite&&window.$mcSite.pixel&&void 0!==window.$mcSite.pixel.api&&"function"==typeof window.$mcSite.pixel.api.track}function r(){return window.mcPixel&&window.mcPixel.cartId?window.mcPixel.cartId:""}function n(e,t){i&&c()&&window.$mcSite.pixel.api.track(e,t).catch(function(t){console.error("Mailchimp Pixel Blocks: Error tracking "+e,t)})}function o(e){const t=e.prices||{},i=t.currency_minor_unit||2,c=Math.pow(10,i),r=t.price?parseInt(t.price,10)/c:0;return{id:String(e.id),productId:String(e.id),title:e.name||"",price:r,currency:(t.currency_code||"").toUpperCase(),sku:e.sku||"",imageUrl:e.images&&e.images.length>0?e.images[0].src:"",productUrl:e.permalink||"",vendor:"",categories:[]}}function d(e){const t=e.prices||{},i=t.currency_minor_unit||2,c=Math.pow(10,i),r=t.line_total?parseInt(t.line_total,10)/c:0;return{item:o(e),quantity:e.quantity||1,price:r,currency:(t.currency_code||"").toUpperCase()}}(0,e.addAction)("experimental__woocommerce_blocks-cart-add-item",t,function(e){if(!i)return;if(window.mcPixel&&window.mcPixel._handled.addToCart)return;const t=e.product;if(!t)return;const c=function(e){const t=e.prices||{},i=t.currency_minor_unit||2,c=Math.pow(10,i),r=t.price?parseInt(t.price,10)/c:0;return{id:String(e.id),productId:String(e.id),title:e.name||"",price:r,currency:(t.currency_code||"").toUpperCase(),sku:e.sku||"",imageUrl:e.images&&e.images.length>0?e.images[0].src:"",productUrl:e.permalink||"",vendor:"",categories:(e.categories||[]).map(function(e){return e.name||""})}}(t),o=e.quantity||1;n("PRODUCT_ADDED_TO_CART",{cartId:r(),product:{item:{id:c.id,productId:c.productId,title:c.title,price:c.price,currency:c.currency,sku:c.sku},quantity:o,price:c.price*o,currency:c.currency}}),window.mcPixel&&(window.mcPixel._handled.addToCart=!0,setTimeout(function(){window.mcPixel._handled.addToCart=!1},1e3))}),(0,e.addAction)("experimental__woocommerce_blocks-cart-remove-item",t,function(e){if(!i)return;if(window.mcPixel&&window.mcPixel._handled.removeFromCart)return;const t=e.product;if(!t)return;const c=o(t),d=e.quantity||1;n("PRODUCT_REMOVED_FROM_CART",{cartId:r(),product:{item:{id:c.id,productId:c.productId,title:c.title,price:c.price,currency:c.currency,sku:c.sku},quantity:d,price:c.price*d,currency:c.currency}}),window.mcPixel&&(window.mcPixel._handled.removeFromCart=!0,setTimeout(function(){window.mcPixel._handled.removeFromCart=!1},1e3))}),(0,e.addAction)("experimental__woocommerce_blocks-checkout-render-checkout-form",t,function(e){if(!i)return;if(window.mcPixel&&window.mcPixel._handled.checkout)return;const t=e.storeCart;t&&t.cartItems&&0!==t.cartItems.length&&(n("CHECKOUT_STARTED",{checkout:function(e){const t=e.cartTotals||{},i=t.currency_minor_unit||2,c=Math.pow(10,i),n=(e.cartItems||[]).map(d),o=r();return{id:"checkout_"+o,cartId:o,lineItems:n,subtotalPrice:t.total_items?parseInt(t.total_items,10)/c:0,totalTax:t.total_tax?parseInt(t.total_tax,10)/c:0,totalShipping:t.total_shipping?parseInt(t.total_shipping,10)/c:0,totalPrice:t.total_price?parseInt(t.total_price,10)/c:0,currency:(t.currency_code||"").toUpperCase()}}(t)}),window.mcPixel&&(window.mcPixel._handled.checkout=!0))}),(0,e.addAction)("experimental__woocommerce_blocks-product-list-render",t,function(){i&&(window.mcPixel&&window.mcPixel._handled.category||window.mcPixel&&window.mcPixel.data&&window.mcPixel.data.category&&(n("PRODUCT_CATEGORY_VIEWED",window.mcPixel.data.category),window.mcPixel&&(window.mcPixel._handled.category=!0)))}),(0,e.addAction)("experimental__woocommerce_blocks-product-search",t,function(e){if(!i)return;if(window.mcPixel&&window.mcPixel._handled.search)return;const t=e.searchTerm||"";t&&(n("SEARCH_SUBMITTED",{query:t}),window.mcPixel&&(window.mcPixel._handled.search=!0))}),function(){let e=0;!function t(){if(c())return void setTimeout(function(){i=!0},1e3);if(e>=20)return;const r=Math.min(100*Math.pow(2,e),5e3);e+=1,setTimeout(t,r)}()}()})(); (function($){const modal=$('
'+stwlite_frontend_js_vars.i18n.added_to_wishlist+'
' if(stwlite_frontend_js_vars.stwOptions.showLoginCreateLink==='yes'){modalContent+=''+stwlite_frontend_js_vars.i18n.guest_wishlist_description+'
'} modalElement.find('.stw-modal-body').html(modalContent) openModal(function(confirmed){if(confirmed){window.location.href=stwlite_frontend_js_vars.stwOptions.wishlistUrl}else{closeModal()}})}}}catch(e){console.error('Save to Wishlist: Could not save wishlist to localStorage.',e)} return} if(button.hasClass('stw-active')){if(stwlite_frontend_js_vars.stwOptions.allowRemoveProductFromWishlist){button.prop('disabled',!0) button.addClass('stw-removing') button.find('.stw-text-label').text(stwlite_frontend_js_vars.i18n.removing) jQuery.ajax({url:stwlite_frontend_js_vars.ajax_url,type:'POST',data:{action:'stwlite_remove_product_from_wishlist',nonce:stwlite_frontend_js_vars.nonce,product_id:productId,collection_id:collectionId},success:function(response){if(response.status==='success'){button.removeClass('stw-active') button.find('.stw-text-label').text(stwlite_frontend_js_vars.buttonLabels.shopWishlistLabel) button.removeAttr('disabled') button.removeClass('stw-removing')}}}) return} if(!stwlite_frontend_js_vars.stwOptions.allowMultipleProductsInWishlist){return}} button.prop('disabled',!0) button.addClass('stw-adding') button.find('.stw-text-label').text(stwlite_frontend_js_vars.i18n.adding) jQuery.ajax({url:stwlite_frontend_js_vars.ajax_url,type:'POST',data:{action:'stwlite_add_to_wishlist',nonce:stwlite_frontend_js_vars.nonce,product_id:productId,collection_id:collectionId},success:function(response){if(stwlite_frontend_js_vars.stwOptions.wishlistAddActionButton==='redirect'){window.location.href=stwlite_frontend_js_vars.stwOptions.wishlistUrl+urlProductCode}else if(stwlite_frontend_js_vars.stwOptions.wishlistAddActionButton==='fade'){resetButton(button) showFadeNotification(button,wishlistName)}else{openModal(function(confirmed){if(confirmed){window.location.href=stwlite_frontend_js_vars.stwOptions.wishlistUrl+urlProductCode}else{closeModal()}}) resetButton(button)}}})} function setWishlistButtonState($button,isActive){const label=isActive?stwlite_frontend_js_vars.buttonLabels.selectedShopWishlistLabel:stwlite_frontend_js_vars.buttonLabels.shopWishlistLabel $button.toggleClass('stw-active',isActive) $button.find('.stw-text-label').text(label)} function disableIfCartItemButton(button){if(button.closest('[class*="stw-wishlist-button-placement-cart_item"]').length){button.prop('disabled',!0) return!0} return!1} function resetButton(button){setWishlistButtonState(button,!0) button.removeClass('stw-adding') button.removeAttr('disabled')} function closeModal(){modalElement.hide()} function showFadeNotification(button,wishlistName){const container=button.closest('.stw-wishlist-button-container') container.find('.stw-fade-notification').remove() const message=stwlite_frontend_js_vars.i18n.added_to_wishlist_name.replace('%s',wishlistName) const checkIcon='' const notification=$(''+checkIcon+$('').text(message).html()+'') notification.css('display','block').hide() container.append(notification) notification.fadeIn(300,function(){setTimeout(function(){notification.fadeOut(400,function(){notification.remove()})},2000)})} span.on('click',function(){closeModal()}) $(window).on('click',function(event){if(event.target==modalElement[0]){closeModal()}}) if(isTouchPrimary){$('body').append(listsBackdrop) listsBackdrop.on('click',closeMobileListsPopup)} if(parseInt(stwlite_frontend_js_vars.user_id)===0&&stwlite_frontend_js_vars.stwOptions.disableGuestWishlist==='no'){const storedWishlist=localStorage.getItem('stw_wishlist') if(storedWishlist){const wishlist=JSON.parse(storedWishlist) const productIds=Object.keys(wishlist) $('.save-to-wishlist-button').each(function(){const $btn=$(this) const btnProductId=String($btn.data('product-id')) if(productIds.includes(btnProductId)){setWishlistButtonState($btn,!0) disableIfCartItemButton($btn)}})}} const storedWishlist=localStorage.getItem('stw_wishlist') if(parseInt(stwlite_frontend_js_vars.user_id)>0&&storedWishlist){const wishlist=JSON.parse(storedWishlist) $.ajax({url:stwlite_frontend_js_vars.ajax_url,type:'POST',data:{action:'stwlite_store_wishlist_from_local_storage',wishlist,nonce:stwlite_frontend_js_vars.nonce},success:function(response){if(response.status==='success'&&response.items.length>0){localStorage.removeItem('stw_wishlist') response.items.forEach(function(itemId){const button=$('.save-to-wishlist-button[data-product-id="'+itemId+'"]') button.addClass('stw-active') button.each(function(){disableIfCartItemButton($(this))})})}}})} $(document).on('click','.save-to-wishlist-button',function(e){e.preventDefault() if(isTouchPrimary){const container=$(this).closest('.stw-wishlist-button-container') const popup=container.find('.save-to-wishlist-multiple-lists-container') if(popup.length&&!popup.hasClass('stw-multiple-lists-open')){openMobileListsPopup(popup) return}} const button=$(this) const collectionId=button.data('collection-id')??stwlite_frontend_js_vars.stwOptions.defaultWishlist?.id let productId=button.data('product-id') const variationId=getVariationId(button) if(variationId>0){productId=variationId} addItemToWishlist(button,productId,collectionId)}) $(document).on('click','.save-to-wishlist-multiple-lists-container',function(e){e.preventDefault() e.stopPropagation()}) $(document).on('change','.save-to-wishlist-multiple-lists-button-content select',function(e){e.preventDefault() const select=$(this) let productId=select.data('product-id') const button=$('.save-to-wishlist-product-id-'+productId) const wishlistData=select.val() const collectionId=wishlistData.split(':')[0] const urlCode=wishlistData.split(':')[1] const variationId=getVariationId(button) if(variationId>0){productId=variationId} select.val(select.find('option:first').val()) addItemToWishlist(button,productId,collectionId,urlCode) if(isTouchPrimary){closeMobileListsPopup()}}) function getVariationId(button){let variationId=button.data('variation-id') if(!variationId){const variationsForm=button.closest('form.variations_form, .product').find('form.variations_form').first() if(variationsForm.length>0){const selectedVariationId=variationsForm.find('input[name="variation_id"]').val() if(selectedVariationId&&selectedVariationId!==''){variationId=selectedVariationId}}} return variationId?parseInt(variationId):0} function addItemToWishlistCart(button,collectionId,selectedIds,urlCode='',wishlistName=''){wishlistName=wishlistName||(stwlite_frontend_js_vars.stwOptions.defaultWishlist&&stwlite_frontend_js_vars.stwOptions.defaultWishlist.name)||'' const urlProductCode=urlCode||stwlite_frontend_js_vars.stwOptions.defaultWishlist.url_code button.prop('disabled',!0) button.addClass('stw-adding') button.find('.stw-text-label').text(stwlite_frontend_js_vars.i18n.adding) const postData={action:'stwlite_add_product_cart_to_wishlist',nonce:stwlite_frontend_js_vars.nonce,collection_id:collectionId} if(selectedIds&&selectedIds.length>0){postData.product_ids=selectedIds} jQuery.ajax({url:stwlite_frontend_js_vars.ajax_url,type:'POST',data:postData,success:function(response){if(response.all_in_wishlist){button.prop('disabled',!0) button.attr('title',stwlite_frontend_js_vars.i18n.all_cart_items_in_wishlist) button.find('.stw-text-label').text(button.find('.stw-text-label').attr('data-label')) button.removeClass('stw-adding') return} if(stwlite_frontend_js_vars.stwOptions.wishlistAddActionButton==='redirect'){window.location.href=stwlite_frontend_js_vars.stwOptions.wishlistUrl+urlProductCode}else if(stwlite_frontend_js_vars.stwOptions.wishlistAddActionButton==='fade'){button.fadeOut(400,function(){button.find('.stw-text-label').text(button.find('.stw-text-label').attr('data-label')) button.removeAttr('disabled') button.removeClass('stw-adding') button.fadeIn(400,function(){showFadeNotification(button,wishlistName)})})}else{modalElement.find('.stw-modal-body').html(''+response.message+'
') openModal(function(confirmed){if(confirmed){window.location.href=stwlite_frontend_js_vars.stwOptions.wishlistUrl+urlProductCode}else{closeModal()}}) button.find('.stw-text-label').text(button.find('.stw-text-label').attr('data-label')) button.removeAttr('disabled') button.removeClass('stw-adding')}}})} $(document).on('change','.save-to-wishlist-multiple-lists-cart-button-content select',function(e){e.preventDefault() const select=$(this) const button=$('.save-to-wishlist-cart-button') const wishlistData=select.val() const collectionId=wishlistData.split(':')[0] const urlCode=wishlistData.split(':')[1] const wishlistName=select.find(':selected').text() addItemToWishlistCart(button,collectionId,null,urlCode,wishlistName)}) $(document).on('click','.save-to-wishlist-cart-button',function(e){e.preventDefault() const button=$(this) const collectionId=stwlite_frontend_js_vars.stwOptions.defaultWishlist?.id addItemToWishlistCart(button,collectionId,null)}) function handleVariationChange(event,variation){const variationsForm=$(event.target).closest('form.variations_form') const productId=variationsForm.find('input[name="product_id"]').val()||variationsForm.data('product_id') const button=$('.save-to-wishlist-button[data-product-id="'+productId+'"]') if(button.length===0){return} const variationId=variationsForm.find('input[name="variation_id"]').val() if(variationId&&parseInt(variationId)>0){button.data('variation-id',variationId) if(parseInt(stwlite_frontend_js_vars.user_id)>0){jQuery.ajax({url:stwlite_frontend_js_vars.ajax_url,type:'POST',data:{action:'stwlite_check_product_in_wishlist',nonce:stwlite_frontend_js_vars.nonce,product_id:productId,variation_id:variationId},success:function(response){if(response.status==='success'&&response.exists===!0){button.addClass('stw-active') button.find('.stw-text-label').text(stwlite_frontend_js_vars.buttonLabels.selectedShopWishlistLabel) button.removeAttr('disabled')}else{button.removeClass('stw-active') button.find('.stw-text-label').text(stwlite_frontend_js_vars.buttonLabels.shopWishlistLabel) button.removeAttr('disabled')}}})}else{const storedWishlist=localStorage.getItem('stw_wishlist') if(storedWishlist){const wishlist=JSON.parse(storedWishlist) const productKey=String(variationId) if(wishlist.hasOwnProperty(productKey)){button.addClass('stw-active')}else{button.removeClass('stw-active')}}else{button.removeClass('stw-active')}}}else{button.removeData('variation-id') button.removeClass('stw-active')} $(document).trigger('stwlite_variation_changed',{productId:productId,variationId:variationId,variation:variation,button:button})} function initVariationChangeListener(){$(document.body).on('found_variation','.variations_form',handleVariationChange) $(document.body).on('reset_data','.variations_form',function(event){handleVariationChange(event,null)})} $(document).ready(function(){initVariationChangeListener()});(function(){const blockItems=stwlite_frontend_js_vars.blockCartItems if(!blockItems||!blockItems.length)return function normalisePath(raw){try{return new URL(raw).pathname.replace(/\/$/,'')}catch(e){return raw.replace(/\/$/,'')}} const normalisedButtonMap={} blockItems.forEach(function(item){normalisedButtonMap[normalisePath(item.permalink)]=item.button_html}) function injectBlockCartButtons(){document.querySelectorAll('.wc-block-cart-items__row').forEach(function(row){if(row.querySelector('.stw-wishlist-button-container'))return const nameWrapper=row.querySelector('.wc-block-components-product-name') if(!nameWrapper)return const nameLink=nameWrapper.tagName==='A'?nameWrapper:nameWrapper.querySelector('a') if(!nameLink)return const buttonHtml=normalisedButtonMap[normalisePath(nameLink.href)] if(!buttonHtml)return const tmp=document.createElement('div') tmp.innerHTML=buttonHtml const buttonNode=tmp.firstElementChild if(buttonNode){nameWrapper.after(buttonNode)}})} $(document).ready(function(){const observer=new MutationObserver(injectBlockCartButtons) observer.observe(document.body,{childList:!0,subtree:!0}) injectBlockCartButtons()})}()) if($('#stw-button-placement-top_image_right').length>0){const button=$('#stw-button-placement-top_image_right') const productImage=$('.woocommerce-product-gallery') const clonedButton=button.clone(!0) productImage.prepend(clonedButton) button.remove()}})(jQuery);