// Page Code for /checkout-link import { cart } from 'wix-stores'; import wixLocation from 'wix-location'; /** * Accepts `products` query parameter in Meta format: * - Encoded: products=112233%3A1%2C445566%3A2 * - Unencoded: products=112233:1,445566:2 (still works) * * Each entry is ID:QTY. Colons/commas may be RFC 3986-escaped. * Example final URL for Meta: * https://mysticalcrow.com/checkout-link?products=112233%3A1%2C445566%3A2 */ function parseProductsParam(rawParam) { if (!rawParam || typeof rawParam !== 'string') return []; // Try to decode once; if it throws or changes nothing, we still continue safely let decoded = rawParam; try { // decodeURIComponent will convert %3A -> ":", %2C -> "," decoded = decodeURIComponent(rawParam); } catch (_e) { // If decoding fails, we’ll proceed with the original string } // Split by commas (now that we normalized to ":" and ",") // Trim spaces just in case. return decoded .split(',') .map(s => s.trim()) .filter(Boolean) .map(pair => { const [id, qty] = pair.split(':').map(x => (x || '').trim()); const quantity = Number(qty); return (id && !Number.isNaN(quantity) && quantity > 0) ? { productId: id, quantity } : null; }) .filter(Boolean); } async function addAllToCart(items) { // Wix Stores cart.addProducts accepts an array of product objects. // We’ll add one by one to ensure each promise resolves, but you can batch if desired. for (const item of items) { // If a product has variants/options, you’ll need to pass the relevant // selection data here (e.g., options: [{ optionName, selection }]). // For simple products, productId + quantity is sufficient. await cart.addProducts([{ productId: item.productId, quantity: item.quantity }]); } } $w.onReady(async function () { const { products } = wixLocation.query; if (!products) { // No parameter present; go to cart so the user isn't stuck. wixLocation.to('/cart'); return; } const items = parseProductsParam(products); if (!items.length) { // Parameter present but invalid/empty after parsing wixLocation.to('/cart'); return; } try { await addAllToCart(items); // Success: go straight to checkout wixLocation.to('/checkout'); } catch (_err) { // If anything fails (bad ID, etc.), fall back to cart wixLocation.to('/cart'); } });
top of page

The Solitary Witch Oracle: Lore, Wisdom, and Light for your Magickal Path 
Cards – April 8, 2023
by Lucy Cavendish (Author), Lady Viktoria (Author)

---Brand New---

Journey into the magical realm of The Solitary Witch Oracle and find the guidance you need. Lady Viktoria's evocative and ethereal illustrations give deep meaning and power to each of the 45 cards, and the 180-page companion book helps you enhance every reading with Lucy Cavendish's expert advice. This oracle shows you there is much to gain on a solitary path, and it will be your constant companion in improving your craft.

 



About the Author
Lucy Cavendish (Sydney, Australia) is the cocreator of seventeen oracle decks, including Alice: The Wonderland Oracle (9780738759937), Blessed Be Cards (9780738759609), and The Faery Forest Oracle (9780738750286). S

he is a founding member of the Goddess Association in Australia.



Lady Viktoria is an artist based on Toronto, Canada. 

She is the illustrator of The Solitary Witch Oracle.



Publisher ‏ : ‎ Llewellyn Publications (April 8, 2023)
Language ‏ : ‎ 

English
Cards ‏ : ‎ 180 pages
ISBN-10 ‏ : ‎ 

0738775878
ISBN-13 ‏ : ‎ 

9780738775876


Item Weight ‏ : ‎ 1.12 pounds

Solitary Witch Oracle

$32.00Price
Quantity
    bottom of page