{"id":332928,"date":"2026-09-02T03:47:19","date_gmt":"2026-09-02T03:47:19","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/pizzalayer\/"},"modified":"2026-09-02T03:47:10","modified_gmt":"2026-09-02T03:47:10","slug":"pizzatier","status":"publish","type":"plugin","link":"https:\/\/en-ca.wordpress.org\/plugins\/pizzatier\/","author":23167946,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"2.3.0","stable_tag":"2.3.0","tested":"7.1","requires":"6.2","requires_php":"7.4","requires_plugins":null,"header_name":"PizzaTier","header_author":"Island Sun Design","header_description":"Pizza toppings customizer and visualizer.","assets_banners_color":"6c5228","last_updated":"2026-09-02 03:47:10","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/pizzatier.com","header_author_uri":"https:\/\/islandsundesign.com","rating":0,"author_block_rating":0,"active_installs":0,"downloads":80,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"2.3.0":{"tag":"2.3.0","author":"islandsundesign","date":"2026-09-02 03:47:10","revision":3677101}},"upgrade_notice":{"2.3.0":"<p>WordPress.org review compliance. All shortcodes renamed from the pizza_ prefix to pizzatier_ (e.g. pizza_builder is now pizzatier_builder). Update your pages, or see the changelog for the filter that re-enables the old tags while you migrate.<\/p>","2.2.1":"<p>Compliance release for the WordPress.org plugin review. No functional changes.<\/p>","2.2.0":"<p>Pizza Orders gets its own top-level admin menu with a live dashboard: status cards, a kitchen queue with one-tap next-step buttons, sound alerts, printable tickets, and a filterable list. Existing order URLs are unchanged.<\/p>","2.1.1":"<p>Compliance release for the WordPress.org submission: adds direct-file-access guards to the block script asset files, and fixes the bundled Spanish\/German translations, which never loaded.<\/p>","2.1.0":"<p>Adds order routing: choose whether orders go to the WooCommerce cart, the pizza order list, both, or straight out by email and webhook. If your builder currently shows both an Add to Cart button and an Order Now button, it will now show one button that does both \u2014 see the changelog.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3677101,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3677101,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256},"icon.svg":{"filename":"icon.svg","revision":3677101,"resolution":false,"location":"assets","locale":false}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3677101,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3677101,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":{"pizzatier\/pizza-static":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"pizzatier\/pizza-static","version":"1.0.0","title":"Pizza Static","category":"media","icon":"food","description":"Displays a non-interactive pizza image built from layer slugs or a saved preset. Great for menus, landing pages, and product displays.","keywords":["pizza","static","image","preset","menu"],"textdomain":"pizzatier","editorScript":"file:.\/block.js","supports":{"html":false,"align":["left","center","right","wide","full"],"spacing":{"margin":true,"padding":true}},"attributes":{"preset":{"type":"string","default":""},"crust":{"type":"string","default":""},"sauce":{"type":"string","default":""},"cheese":{"type":"string","default":""},"toppings":{"type":"string","default":""},"drizzle":{"type":"string","default":""},"cut":{"type":"string","default":""}},"example":{"attributes":{}}},"pizzatier\/pizza-layer":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"pizzatier\/pizza-layer","version":"1.0.0","title":"Pizza Layer Image","category":"media","icon":"format-image","description":"Outputs a single pizza layer image (crust, sauce, cheese, topping, drizzle, or cut) by type and slug. Useful inline in content or for custom layouts.","keywords":["pizza","layer","image","topping","ingredient"],"textdomain":"pizzatier","editorScript":"file:.\/block.js","supports":{"html":false,"align":["left","center","right"],"spacing":{"margin":true}},"attributes":{"layerType":{"type":"string","default":"crust"},"slug":{"type":"string","default":""},"imageField":{"type":"string","default":"list"},"cssClass":{"type":"string","default":""}},"example":{"attributes":{"layerType":"crust","slug":"","imageField":"list"}}},"pizzatier\/pizza-builder":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"pizzatier\/pizza-builder","version":"1.0.0","title":"Pizza Builder","category":"widgets","icon":"pizza-slice","description":"Interactive pizza builder \u2014 lets visitors choose crust, sauce, cheese, toppings, drizzle and slicing style with a live visual preview.","keywords":["pizza","builder","interactive","order"],"textdomain":"pizzatier","editorScript":"file:.\/block.js","supports":{"html":false,"align":["wide","full"],"spacing":{"margin":true,"padding":false}},"attributes":{"instanceId":{"type":"string","default":""},"template":{"type":"string","default":""},"maxToppings":{"type":"string","default":""},"showTabs":{"type":"string","default":""},"hideTabs":{"type":"string","default":""},"defaultCrust":{"type":"string","default":""},"defaultSauce":{"type":"string","default":""},"defaultCheese":{"type":"string","default":""},"pizzaShape":{"type":"string","default":""},"pizzaAspect":{"type":"string","default":""},"pizzaRadius":{"type":"string","default":""},"layerAnim":{"type":"string","default":""}},"example":{"attributes":{}}}},"tagged_versions":["2.3.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3677101,"resolution":"1","location":"assets","locale":"","width":1280,"height":720},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3677101,"resolution":"2","location":"assets","locale":"","width":1280,"height":720},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3677101,"resolution":"3","location":"assets","locale":"","width":1280,"height":720},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3677101,"resolution":"4","location":"assets","locale":"","width":1280,"height":720},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3677101,"resolution":"5","location":"assets","locale":"","width":1280,"height":720}},"screenshots":{"1":"Live visual builder \u2014 customers watch the layered pizza update as they pick crust, sauce, cheese, toppings, drizzle and cut, with the price bar tracking every change.","2":"Eight built-in templates \u2014 Colorbox, Metro, NightPie, Fornaia, PocketPie, Plainlist, Command Center and the Scaffold developer starter.","3":"WooCommerce pricing \u2014 size \u00d7 coverage price grids per ingredient, and the full build stored on the order line item.","4":"Pizza Orders dashboard \u2014 status cards, a live kitchen queue with one-tap next-step buttons, and late-order highlighting.","5":"Admin suite \u2014 the Layer Builder Wizard and Layer Image Maker, with every layer type managed as a WordPress post type."}},"plugin_section":[],"plugin_tags":[6410,2768,65549,20710,286],"plugin_category":[39,43,45],"plugin_contributors":[278742],"plugin_business_model":[],"class_list":["post-332928","plugin","type-plugin","status-publish","hentry","plugin_tags-builder","plugin_tags-customizer","plugin_tags-pizza","plugin_tags-restaurant","plugin_tags-woocommerce","plugin_category-business","plugin_category-customization","plugin_category-ecommerce","plugin_contributors-islandsundesign","plugin_committers-islandsundesign"],"banners":{"banner":"https:\/\/ps.w.org\/pizzatier\/assets\/banner-772x250.png?rev=3677101","banner_2x":"https:\/\/ps.w.org\/pizzatier\/assets\/banner-1544x500.png?rev=3677101","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":"https:\/\/ps.w.org\/pizzatier\/assets\/icon.svg?rev=3677101","icon":"https:\/\/ps.w.org\/pizzatier\/assets\/icon.svg?rev=3677101","icon_2x":false,"generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/pizzatier\/assets\/screenshot-1.png?rev=3677101","caption":"Live visual builder \u2014 customers watch the layered pizza update as they pick crust, sauce, cheese, toppings, drizzle and cut, with the price bar tracking every change."},{"src":"https:\/\/ps.w.org\/pizzatier\/assets\/screenshot-2.png?rev=3677101","caption":"Eight built-in templates \u2014 Colorbox, Metro, NightPie, Fornaia, PocketPie, Plainlist, Command Center and the Scaffold developer starter."},{"src":"https:\/\/ps.w.org\/pizzatier\/assets\/screenshot-3.png?rev=3677101","caption":"WooCommerce pricing \u2014 size \u00d7 coverage price grids per ingredient, and the full build stored on the order line item."},{"src":"https:\/\/ps.w.org\/pizzatier\/assets\/screenshot-4.png?rev=3677101","caption":"Pizza Orders dashboard \u2014 status cards, a live kitchen queue with one-tap next-step buttons, and late-order highlighting."},{"src":"https:\/\/ps.w.org\/pizzatier\/assets\/screenshot-5.png?rev=3677101","caption":"Admin suite \u2014 the Layer Builder Wizard and Layer Image Maker, with every layer type managed as a WordPress post type."}],"raw_content":"<!--section=description-->\n<p><strong>PizzaTier<\/strong> turns any WordPress page into an interactive build-your-own pizza experience. Customers pick a crust, sauce, cheese, toppings, drizzle and cut style while a layered pizza image updates in front of them in real time. When they are done, the finished pizza goes straight into a WooCommerce cart with a server-verified price, or into PizzaTier's own built-in order queue for shops that do not sell online.<\/p>\n\n<p>Everything is included in this one plugin: the visual builder, eight ready-made templates, per-ingredient price grids, the WooCommerce \"Pizza\" product type and a live Pizza Orders dashboard built for running a kitchen during service. There is no separate paid add-on.<\/p>\n\n<p>Plugin site, docs and support: <a href=\"https:\/\/pizzatier.com\">pizzatier.com<\/a>\nBuilt and maintained by <a href=\"https:\/\/islandsundesign.com\">Island Sun Design<\/a> in Hilo, Hawai\u02bbi.<\/p>\n\n<h4>Who it is for<\/h4>\n\n<p>PizzaTier is built for independent and small-chain pizzerias, food trucks and pop-ups, and the agencies and freelancers who build their websites. Site owners get a guided setup wizard and a plain-English admin; developers get hooks, a public PHP and JavaScript API and a Scaffold template to build from.<\/p>\n\n<h4>The builder<\/h4>\n\n<ul>\n<li><strong>Live layered preview<\/strong> \u2014 each ingredient is a transparent PNG layer, stacked and updated as the customer makes selections, with no page reloads<\/li>\n<li><strong>Six ingredient categories<\/strong> \u2014 crusts, sauces, cheeses, toppings, drizzles and cut styles, plus pizza sizes, each managed as a WordPress custom post type<\/li>\n<li><strong>Coverage control<\/strong> \u2014 whole, half-and-half and quarter placement for toppings<\/li>\n<li><strong>Rules<\/strong> \u2014 maximum toppings, required crust or sauce, hidden tabs, restricted ingredient sets and default selections, all set per shortcode<\/li>\n<li><strong>Presets<\/strong> \u2014 save complete pizzas that customers can pick in one click, and show them anywhere with <code>[pizzatier_preset]<\/code><\/li>\n<li><strong>Embed anywhere<\/strong> \u2014 the <code>[pizzatier_builder]<\/code> shortcode or the Pizza Builder block; multiple builders can share a page<\/li>\n<li><strong>Static pizza images<\/strong> \u2014 render a non-interactive layered pizza with <code>[pizzatier_static]<\/code>, or a single ingredient image with <code>[pizzatier_layer]<\/code><\/li>\n<\/ul>\n\n<h4>Eight templates<\/h4>\n\n<p>Switch templates with one setting. Every template is themeable through CSS custom properties, so colours, spacing and typography can be matched to your theme without touching the template files.<\/p>\n\n<ul>\n<li><strong>Colorbox<\/strong> \u2014 bright, playful builder with colourful category tiles and pill tabs. Great for family-friendly and fast-casual brands.<\/li>\n<li><strong>Metro<\/strong> \u2014 clean, modern single-scroll layout with the pizza floating in a centred hero. Built for fast-casual and artisan brands.<\/li>\n<li><strong>NightPie<\/strong> \u2014 dark UI with a sticky split-screen preview, tabbed sections, fly-to animation and a \"Your Pizza\" summary panel.<\/li>\n<li><strong>Fornaia<\/strong> \u2014 warm, homestyle template with earthy tones, aged-paper texture, serif typography and vintage badge accents. Ideal for Neapolitan and wood-fired pizzerias.<\/li>\n<li><strong>PocketPie<\/strong> \u2014 compact mobile-first builder with Corner Quad, Layer Deck, Slide Drawer and Stack Panel layout modes. Ideal for embedded storefronts and small spaces.<\/li>\n<li><strong>Plainlist<\/strong> \u2014 text-first checklist with no visual canvas. Accessible, print-friendly, and available in single-scroll or step-by-step wizard modes.<\/li>\n<li><strong>Command Center<\/strong> \u2014 dark navy UI with a numbered step wizard, persistent order-summary sidebar and a bold red accent. Built for chains that want a premium digital-ordering feel.<\/li>\n<li><strong>Scaffold<\/strong> \u2014 a bare-bones developer starter with fully modular HTML partials and clean hooks. Duplicate any partial and build from there.<\/li>\n<\/ul>\n\n<h4>Selling with WooCommerce<\/h4>\n\n<ul>\n<li>A dedicated <strong>Pizza<\/strong> WooCommerce product type with its own configurator tab<\/li>\n<li>The builder embedded automatically on Pizza product pages, with a size selector and a live price bar<\/li>\n<li><strong>Price grids<\/strong> by size and coverage, set per product, per ingredient or site-wide, with a bulk editor and CSV import\/export<\/li>\n<li><strong>Six pricing models<\/strong> \u2014 add-on per layer, flat per size, highest layer wins, tiered by topping count, free first N, and bundle<\/li>\n<li>Prices are recalculated and verified on the server when the pizza is added to the cart<\/li>\n<li>The full build is stored as order line-item meta and shown in the cart, on the order screen and in order emails<\/li>\n<li>Works with both classic post-based orders and High-Performance Order Storage (HPOS) orders<\/li>\n<\/ul>\n\n<h4>Selling without WooCommerce<\/h4>\n\n<p>PizzaTier ships its own lightweight ordering system, so a builder can take orders on a site with no cart and no payment step. It suits pay-on-collection, phone-order and delivery-on-account shops.<\/p>\n\n<ul>\n<li>Orders are recorded in WordPress with kitchen-oriented statuses \u2014 new, confirmed, preparing, ready, out for delivery and completed, plus cancelled, refunded and failed<\/li>\n<li>Order routing \u2014 send each order to the WooCommerce cart, the pizza order list, both, or straight out by email and webhook<\/li>\n<li>Customer notes visible to staff only<\/li>\n<\/ul>\n\n<h4>Pizza Orders dashboard<\/h4>\n\n<p>A top-level <strong>Pizza Orders<\/strong> menu with a live dashboard designed for service hours. Everything updates in place over AJAX; the page never reloads.<\/p>\n\n<ul>\n<li>Status count cards, with tap-to-filter<\/li>\n<li>An incoming-orders board with one-tap next-step buttons (Confirm \u2192 Start preparing \u2192 Mark ready \u2192 Complete). Orders waiting over 15 minutes turn amber; over 30, red.<\/li>\n<li>Today at a glance \u2014 orders, pizzas, revenue, average order and the pickup\/delivery split<\/li>\n<li>Live polling with a pause toggle, an optional new-order chime and the open-order count mirrored into the browser tab title<\/li>\n<li>Search, filter, sort and bulk-update the full order list; a quick-view drawer with a printable kitchen ticket sized for receipt printers<\/li>\n<\/ul>\n\n<h4>Admin suite<\/h4>\n\n<ul>\n<li><strong>Settings Wizard<\/strong> \u2014 guided first-run setup<\/li>\n<li><strong>Layer Builder Wizard<\/strong> \u2014 step-by-step workflow for adding a new ingredient<\/li>\n<li><strong>Layer Image Maker<\/strong> \u2014 generate and upload transparent layer images from inside the admin<\/li>\n<li><strong>Content Hub<\/strong> \u2014 manage every ingredient post type from one screen<\/li>\n<li><strong>Site Migration<\/strong> \u2014 export and import all PizzaTier settings and content between sites<\/li>\n<li><strong>Admin dark mode<\/strong> for the PizzaTier screens<\/li>\n<li><strong>GDPR tools<\/strong> \u2014 personal-data export and erasure integrated with the WordPress privacy tools; erasure anonymises orders while keeping the records a shop is legally required to retain<\/li>\n<\/ul>\n\n<h4>Shortcodes<\/h4>\n\n<p><strong><code>[pizzatier_builder]<\/code><\/strong> \u2014 renders the full interactive builder.\nAttributes: <code>id<\/code>, <code>template<\/code>, <code>max_toppings<\/code>, <code>show_tabs<\/code>, <code>hide_tabs<\/code>, <code>default_crust<\/code>, <code>default_sauce<\/code>, <code>default_cheese<\/code>, <code>pizza_shape<\/code>, <code>pizza_aspect<\/code>, <code>pizza_radius<\/code>, <code>layer_anim<\/code>, <code>layer_anim_speed<\/code>, <code>restrict<\/code><\/p>\n\n<p><strong><code>[pizzatier_static]<\/code><\/strong> \u2014 renders a non-interactive layered pizza image.\nAttributes: <code>crust<\/code>, <code>sauce<\/code>, <code>cheese<\/code>, <code>toppings<\/code>, <code>drizzle<\/code>, <code>cut<\/code>, <code>preset<\/code>\nExample: <code>[pizzatier_static crust=\"thin-crust\" sauce=\"classic-tomato\" cheese=\"mozzarella\" toppings=\"pepperoni,mushrooms\"]<\/code><\/p>\n\n<p><strong><code>[pizzatier_layer]<\/code><\/strong> \u2014 renders a single ingredient layer image.\nAttributes: <code>type<\/code>, <code>slug<\/code>, <code>size<\/code><\/p>\n\n<p><strong><code>[pizzatier_layer_info]<\/code><\/strong> \u2014 renders text metadata about a layer (name, description, price).<\/p>\n\n<p><strong><code>[pizzatier_preset]<\/code><\/strong> \u2014 renders a saved preset pizza.\nAttributes: <code>id<\/code>, <code>template<\/code>, <code>title<\/code>, <code>size<\/code>, <code>align<\/code><\/p>\n\n<h4>REST API<\/h4>\n\n<p>The public REST API is disabled by default. Enable it under <strong>PizzaTier \u2192 Settings \u2192 Advanced<\/strong>.<\/p>\n\n<ul>\n<li><code>POST \/wp-json\/pizzatier\/v1\/render<\/code> \u2014 render a pizza layer stack and return HTML<\/li>\n<li><code>GET \/wp-json\/pizzatier\/v1\/layer-url<\/code> \u2014 retrieve the image URL for a given layer type and slug<\/li>\n<\/ul>\n\n<p>Both endpoints are read-only and rate-limited (<code>pizzatier_rest_rate_limit<\/code> and <code>pizzatier_rest_rate_window<\/code> filters).<\/p>\n\n<h4>For developers<\/h4>\n\n<p>PizzaTier exposes a public PHP API for use in themes and other plugins:<\/p>\n\n<pre><code>\/\/ Render a full pizza stack as HTML\n$html = PizzaTier\\Builder\\PizzaBuilder::render_pizza_stack([\n    'crust'    =&gt; 'thin-crust',\n    'sauce'    =&gt; 'classic-tomato',\n    'cheese'   =&gt; 'mozzarella',\n    'toppings' =&gt; ['pepperoni', 'mushrooms'],\n    'drizzle'  =&gt; 'hot-honey',\n    'cut'      =&gt; '8-slices',\n]);\n\n\/\/ Get a layer image URL\n$url = PizzaTier\\Builder\\PizzaBuilder::get_layer_url( 'topping', 'pepperoni' );\n<\/code><\/pre>\n\n<p>A selection of the filters and actions available:<\/p>\n\n<ul>\n<li><code>pizzatier_template_dirs<\/code> \u2014 register additional template directory paths<\/li>\n<li><code>pizzatier_query_args_{type}<\/code> \u2014 modify the WP_Query args used to fetch a layer type, e.g. <code>pizzatier_query_args_toppings<\/code><\/li>\n<li><code>pizzatier_builder_atts<\/code> \/ <code>pizzatier_static_atts<\/code> \u2014 filter parsed shortcode attributes before render<\/li>\n<li><code>pizzatier_layer_html<\/code> \u2014 filter the markup of a single layer image<\/li>\n<li><code>pizzatier_order_statuses<\/code>, <code>pizzatier_order_route<\/code>, <code>pizzatier_order_webhook_payload<\/code> \u2014 customise the built-in ordering system<\/li>\n<li><code>pizzatier_orders_next_step_map<\/code> \u2014 customise the one-tap workflow buttons on the orders dashboard<\/li>\n<li><code>pizzatier_before_builder<\/code> \/ <code>pizzatier_after_builder<\/code> \u2014 fire around the builder canvas<\/li>\n<li><code>pizzatier_builder_action_bar<\/code> \u2014 fires inside the builder action bar, where the Add to Cart and Order Now bars render<\/li>\n<li><code>pizzatier_order_created<\/code>, <code>pizzatier_order_status_changed<\/code> \u2014 fire as orders move through the kitchen<\/li>\n<\/ul>\n\n<p>The full hook reference is at <a href=\"https:\/\/pizzatier.com\">pizzatier.com<\/a>.<\/p>\n\n<h4>Custom templates<\/h4>\n\n<p>Duplicate the <strong>Scaffold<\/strong> template folder, give it a unique <code>function_prefix<\/code> in <code>pztp-template-info.php<\/code>, and register it via the <code>pizzatier_template_dirs<\/code> filter. Scaffold includes detailed comments and modular HTML partials designed for exactly this.<\/p>\n\n<h4>Privacy and external services<\/h4>\n\n<p>PizzaTier does not contact any external service on its own. The only outbound requests it makes are the ones you configure: order-notification emails through your site's mail setup, and an optional order webhook to a URL you supply under PizzaTier \u2192 Settings. The public REST API is off until you turn it on. Order records can be exported and erased through the standard WordPress privacy tools.<\/p>\n\n<h4>Translations<\/h4>\n\n<p>Translation-ready with a bundled <code>.pot<\/code> file. Spanish (es_ES) and German (de_DE) translations are included, and further languages can be contributed through translate.wordpress.org.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>In your WordPress admin go to <strong>Plugins \u2192 Add New<\/strong>, search for <strong>PizzaTier<\/strong> and click <strong>Install Now<\/strong>, then <strong>Activate<\/strong>. (Or upload the <code>pizzatier<\/code> folder to <code>\/wp-content\/plugins\/<\/code> and activate it from the Plugins screen.)<\/li>\n<li>Open <strong>PizzaTier \u2192 Setup Guide<\/strong> and follow the Settings Wizard. It walks you through choosing a template, adding your first crust, sauce, cheese and toppings, and uploading layer images.<\/li>\n<li>Add the builder to any page with the <code>[pizzatier_builder]<\/code> shortcode or the <strong>Pizza Builder<\/strong> block.<\/li>\n<li><strong>Selling with WooCommerce?<\/strong> Create a product, set its type to <strong>Pizza<\/strong>, and configure sizes and price grids on the Configurator tab. The builder appears on the product page automatically.<\/li>\n<li><strong>Selling without WooCommerce?<\/strong> Under <strong>PizzaTier \u2192 Settings \u2192 Ordering<\/strong>, turn on built-in ordering and choose where orders go. Orders appear under <strong>Pizza Orders<\/strong>.<\/li>\n<\/ol>\n\n<p>Layer images should be transparent PNGs at a 1:1 aspect ratio (800\u00d7800 px or 1200\u00d71200 px recommended). The Layer Image Maker under the PizzaTier menu can produce these from ordinary photos.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"is%20woocommerce%20required%3F\"><h3>Is WooCommerce required?<\/h3><\/dt>\n<dd><p>No. The builder, price grids, presets and PizzaTier's own ordering system all work without it. WooCommerce is only needed if you want a cart, a checkout and online payment.<\/p><\/dd>\n<dt id=\"what%20image%20format%20should%20i%20use%20for%20ingredient%20layers%3F\"><h3>What image format should I use for ingredient layers?<\/h3><\/dt>\n<dd><p>Transparent PNG. Every layer is stacked on top of the ones below it, so transparency is required for the lower layers to show through. Recommended size: 800\u00d7800 px or 1200\u00d71200 px at a 1:1 aspect ratio.<\/p><\/dd>\n<dt id=\"can%20i%20use%20multiple%20builders%20on%20the%20same%20page%3F\"><h3>Can I use multiple builders on the same page?<\/h3><\/dt>\n<dd><p>Yes. Each <code>[pizzatier_builder]<\/code> shortcode generates a unique instance ID, so you can place as many builders on a single page as you need.<\/p><\/dd>\n<dt id=\"how%20do%20i%20match%20the%20builder%27s%20colours%20to%20my%20theme%3F\"><h3>How do I match the builder's colours to my theme?<\/h3><\/dt>\n<dd><p>Go to <strong>PizzaTier \u2192 Settings \u2192 Colours<\/strong>. All colour values are applied as CSS custom properties and cascade through the active template. You can also add custom CSS under <strong>Settings \u2192 Advanced<\/strong>.<\/p><\/dd>\n<dt id=\"can%20i%20create%20my%20own%20template%3F\"><h3>Can I create my own template?<\/h3><\/dt>\n<dd><p>Yes. Duplicate the <strong>Scaffold<\/strong> template folder, give it a unique <code>function_prefix<\/code> in <code>pztp-template-info.php<\/code>, and register it via the <code>pizzatier_template_dirs<\/code> filter.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20page%20builders%20like%20elementor%20or%20divi%3F\"><h3>Does it work with page builders like Elementor or Divi?<\/h3><\/dt>\n<dd><p>The <code>[pizzatier_builder]<\/code> shortcode works anywhere shortcodes are supported, which includes Elementor, Divi, Beaver Builder and the block editor. A dedicated Elementor widget is on the roadmap.<\/p><\/dd>\n<dt id=\"i%20upgraded%20and%20my%20pizza%20builder%20disappeared.%20what%20happened%3F\"><h3>I upgraded and my pizza builder disappeared. What happened?<\/h3><\/dt>\n<dd><p>Version 2.3.0 renamed the shortcodes from <code>pizza_*<\/code> to <code>pizzatier_*<\/code> to meet the WordPress.org unique-prefix guideline. Update your pages to the new tags, or add <code>add_filter( 'pizzatier_register_legacy_shortcodes', '__return_true' );<\/code> to your theme's functions.php or a small must-use plugin to keep the old tags working while you migrate.<\/p><\/dd>\n<dt id=\"what%20php%20version%20is%20required%3F\"><h3>What PHP version is required?<\/h3><\/dt>\n<dd><p>PHP 7.4 or higher. The plugin is tested on PHP 7.4, 8.0, 8.1 and 8.2.<\/p><\/dd>\n<dt id=\"does%20the%20rest%20api%20expose%20my%20ingredient%20data%20publicly%3F\"><h3>Does the REST API expose my ingredient data publicly?<\/h3><\/dt>\n<dd><p>The REST API is disabled by default. When enabled under Settings \u2192 Advanced, the <code>\/render<\/code> and <code>\/layer-url<\/code> endpoints are public, read-only and rate-limited, and return the same rendered HTML and image URLs already visible on the front end. No write endpoints are exposed.<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20send%20data%20anywhere%3F\"><h3>Does the plugin send data anywhere?<\/h3><\/dt>\n<dd><p>Not unless you tell it to. Order emails go through your site's own mail configuration and the order webhook only fires if you enter a URL for it. Nothing is sent to pizzatier.com or any third party.<\/p><\/dd>\n<dt id=\"where%20can%20i%20get%20support%3F\"><h3>Where can I get support?<\/h3><\/dt>\n<dd><p>Use the <a href=\"https:\/\/wordpress.org\/support\/plugin\/pizzatier\/\">WordPress.org support forum<\/a> or visit <a href=\"https:\/\/pizzatier.com\/support\">pizzatier.com\/support<\/a>.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>2.3.0<\/h4>\n\n<p>WordPress.org plugin review compliance release.<\/p>\n\n<ul>\n<li>Changed: <strong>shortcodes renamed<\/strong> to satisfy the WordPress.org unique-prefix guideline \u2014 <code>[pizza_builder]<\/code>, <code>[pizza_static]<\/code>, <code>[pizza_layer]<\/code>, <code>[pizza_layer_info]<\/code> and <code>[pizza_preset]<\/code> are now <code>[pizzatier_builder]<\/code>, <code>[pizzatier_static]<\/code>, <code>[pizzatier_layer]<\/code>, <code>[pizzatier_layer_info]<\/code> and <code>[pizzatier_preset]<\/code>. Existing content using the old tags will render the tag as plain text until updated. To re-enable the old tags while you migrate, add <code>add_filter( 'pizzatier_register_legacy_shortcodes', '__return_true' );<\/code> to your theme's functions.php or a small must-use plugin. The <code>[pizzatier-menu]<\/code> and <code>[pizzatier-static]<\/code> aliases are unaffected.<\/li>\n<li>Changed: all remaining inline <code>&lt;style&gt;<\/code> and <code>&lt;script&gt;<\/code> blocks (19, across the Cart &amp; Pricing screens, meta boxes and the order screen) moved into enqueued asset files via <code>wp_enqueue_style<\/code> \/ <code>wp_enqueue_script<\/code>, with data passed through <code>wp_localize_script<\/code> \/ <code>wp_add_inline_script<\/code>.<\/li>\n<li>Changed: the <code>[pizzatier_layer]<\/code> shortcode \/ PizzaTier Image block output is now passed through <code>wp_kses()<\/code> with an explicit allowlist at return time, so markup supplied via the <code>pizzatier_layer_html<\/code> filter is escaped late.<\/li>\n<li>Changed: product JSON-LD is now encoded without <code>JSON_UNESCAPED_SLASHES<\/code>, so a <code>&lt;\/script&gt;<\/code> sequence in filtered schema values can no longer terminate the script tag early.<\/li>\n<li>Changed: the WooCommerce product-data tab key <code>pizza_configurator<\/code> renamed to <code>pizzatier_configurator<\/code>.<\/li>\n<li>Added: WooCommerce High-Performance Order Storage (HPOS) compatibility declaration, so PizzaTier no longer shows as incompatible on the HPOS settings screen.<\/li>\n<li>Removed: the unused pre-merge Commerce dashboard class (dead code since the 2.0.0 menu consolidation).<\/li>\n<\/ul>\n\n<h4>2.2.1<\/h4>\n\n<ul>\n<li>Changed: removed the manual <code>load_plugin_textdomain()<\/code> call flagged by Plugin Check \u2014 WordPress.org language packs are loaded automatically since WP 4.6. The <code>\/languages<\/code> catalogues remain in the repo as the translation source.<\/li>\n<li>Changed: shortened the 2.2.0 upgrade notice to fit the 300-character readme limit.<\/li>\n<\/ul>\n\n<h4>2.2.0<\/h4>\n\n<p><strong>Pizza Orders dashboard<\/strong> \u2014 Pizza Orders is now its own top-level admin menu with a live dashboard built for running a shop during service. Everything updates in place over AJAX; the page never reloads.<\/p>\n\n<ul>\n<li>Added: status count cards for every order status, plus All and Needs-attention totals. Tapping a card filters the list.<\/li>\n<li>Added: an incoming-orders board \u2014 open orders oldest first, each with a single one-tap next-step button (Confirm \u2192 Start preparing \u2192 Mark ready \u2192 Complete, with Out for Delivery inserted automatically for delivery orders). Orders waiting over 15 minutes turn amber; over 30, red.<\/li>\n<li>Added: today at a glance \u2014 orders, pizzas, revenue, average order and the pickup\/delivery split for the current day.<\/li>\n<li>Added: live polling with a pause toggle, an optional new-order chime, and the open-order count mirrored into the browser tab title.<\/li>\n<li>Added: a fully filterable, sortable order list \u2014 search by order number, name, phone or email; filter by status, fulfilment method and date range; sort by date, number, customer, total or status; bulk status changes, trash, restore and delete \u2014 all without a page refresh.<\/li>\n<li>Added: a quick-view drawer with the full ticket, one-tap advance, status change, internal notes and history \u2014 plus a printable kitchen ticket sized for receipt printers.<\/li>\n<li>Changed: the classic server-rendered list remains available at Pizza Orders \u2192 Classic List, and is the automatic fallback when JavaScript is off.<\/li>\n<li>Changed: the Pizza Orders entry under the PizzaTier menu is now a link to the new top-level menu. The page slug is unchanged, so bookmarked URLs and links in order-notification emails keep working.<\/li>\n<li>Added: <code>pizzatier_orders_next_step_map<\/code> filter to customise the one-tap workflow buttons.<\/li>\n<\/ul>\n\n<h4>2.1.1<\/h4>\n\n<ul>\n<li>Fixed: the three <code>block.asset.php<\/code> script-dependency files did not guard against direct URL access. Each now exits when <code>ABSPATH<\/code> is undefined, satisfying the Plugin Check <code>missing_direct_file_access_protection<\/code> rule. No functional change \u2014 WordPress always defines <code>ABSPATH<\/code> before reading these files.<\/li>\n<li>Fixed: the bundled Spanish and German translations never loaded. The plugin ships <code>.mo<\/code> files in <code>\/languages<\/code> but never called <code>load_plugin_textdomain()<\/code>, and WordPress's just-in-time loader only reads language packs from <code>wp-content\/languages\/plugins\/<\/code>, not from inside the plugin. Now loaded on <code>init<\/code>.<\/li>\n<\/ul>\n\n<p>Older releases are documented in CHANGELOG.md inside the plugin.<\/p>","raw_excerpt":"Interactive build-your-own pizza builder with a live layered preview, 8 templates, WooCommerce pricing and built-in ordering.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/en-ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/332928","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/en-ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/en-ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/en-ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=332928"}],"author":[{"embeddable":true,"href":"https:\/\/en-ca.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/islandsundesign"}],"wp:attachment":[{"href":"https:\/\/en-ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=332928"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/en-ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=332928"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/en-ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=332928"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/en-ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=332928"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/en-ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=332928"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/en-ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=332928"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}