Documentation · Pinch food delivery theme

Pinch, from the inside

Everything the Pinch bundle adds to wp-admin, WooCommerce, the Site Editor and Elementor: the live order board, the restaurant editor, menus as products, fees and ETAs, tracking, the plugin’s 80 blocks and 36 widgets, and the path from a fresh install to a working ordering site. Screenshots are from the live demo.

On this page

In the boxInstallwp-adminLive ordersRestaurantsDishesTaxonomiesReviews & leadsSettingsOrdering flowBlocksSite EditorElementorChecklistFAQ

The Food Delivery dashboard in wp-admin: live orders, kitchens, couriers and the one-click WooCommerce setup

The Food Delivery › Dashboard: active orders, open kitchens, today’s revenue and median delivery time, the store-health panel with one-click fixes, and the live kitchens-and-couriers map.

What you get

Three pieces on WooCommerce

The download contains two themes and the plugin that powers both. WooCommerce holds the dishes, the basket, checkout and orders; the plugin turns that into restaurants, menus, delivery zones, fees, ETAs and live tracking.

Stepfox Food Delivery (plugin)

Required by both themes. Registers restaurants, leads, reviews and the four taxonomies, adds the Food Delivery menu with the live order board, menu manager, settings and tools, two WooCommerce shipping methods, the quote engine, order tracking, REST routes, WP-CLI commands, 80 editor blocks, 36 Elementor widgets and 3 dynamic tags, dark mode, JSON-LD and the Lisbon demo.

Pinch (block theme)

26 templates, 25 template parts and 6 patterns over a theme.json palette. It ships no CSS of its own: every colour, gap and breakpoint is a block attribute edited in the Site Editor. Needs Stepfox Looks (included) and WooCommerce.

Pinch Elementor (classic theme)

The same design as native Elementor widgets, with PHP fallback templates for every route, four menu locations, a WooCommerce cart override and an Appearance › Pinch Setup wizard. Needs Elementor 3.20+ and WooCommerce; Elementor Pro is optional.

Lisbon demo + updates

24 illustrated kitchens, 221 dishes with option groups, coupons, reviews, six journal stories, a demo customer and orders that keep moving on the board, installed and removed in one click. All packages check stepfoxthemes.com for updates; there is no licence key.

Requirements

  • WordPress 6.7 or newer, PHP 8.0 or newer, WooCommerce 9.6 or newer (tested up to 11.1). The plugin declares compatibility with High-Performance Order Storage and the Cart and Checkout blocks.
  • Pretty permalinks (Settings › Permalinks › Post name) for /restaurants/, /restaurant/…/, /cuisine/…/ and /area/…/.
  • Maps work without a key on OpenStreetMap tiles for light traffic; a keyed provider (CARTO, Stadia, MapTiler, Mapbox) is recommended for a real store. Address search uses Photon or Nominatim without a key, or Mapbox / MapTiler with one.
  • Block edition: Stepfox Looks. Elementor edition: Elementor 3.20 or newer; Elementor Pro only if you want the Theme Builder templates to be editable.

First run

Install and first run

Activating either theme takes you to a one-click installer that handles the plugins, the WooCommerce setup and the Lisbon demo. Everything it creates is stamped and removable.

Activate the theme

Upload Pinch or Pinch Elementor under Appearance › Themes and activate it. You land on Appearance › Install Demo; a dismissible notice points there until the demo is installed. A dependency notice lists what is missing in the right activation order (WooCommerce, then Stepfox Looks or Elementor, then Stepfox Food Delivery) with an Install and activate all button.

Demo path

Press Install the demo. It installs and activates the plugins, runs “Configure WooCommerce for delivery”, imports the Lisbon kitchens with menus, coupons, reviews, stories and demo orders, creates the pages every template expects, sets the logo and site icon, switches permalinks to post name and sets the tagline. The Elementor edition also builds its kit, pages, menus and templates.

Clean path

Install the plugins from the dependency notice, then Food Delivery › Tools › Configure WooCommerce. Open the Dashboard’s Store health panel and press the fix buttons (Create pages and friends) until every row reads “All good”. Elementor edition: also run Appearance › Pinch Setup › Install the layout.

Correct the store basics

The configure step hard-codes a Lisbon address, Portugal as the selling country, EUR and taxes off. Change store address, currency, countries and taxes under WooCommerce › Settings before you take real orders.

Turn demo mode off

Food Delivery › Settings › General › Demo mode. While it is on, customer e-mails are off, checkout is pre-filled with a fictional guest, orders are rate-limited and visitor orders are purged after 24 hours.

The Appearance → Install Demo screen of the Pinch block theme in wp-admin

The Appearance › Install Demo screen of the block theme. The steps are plugins › WooCommerce + Lisbon kitchens › logo and icon › finishing up. It runs in slices, logs every step, resumes if the tab is closed, and can reinstall or remove everything it created.

Food Delivery → Tools: the Lisbon demo panel, Configure WooCommerce, Rebuild indexes, Reset demo orders and the system report

Food Delivery › Tools: the demo panel (install, update or remove the Lisbon kitchens), Configure WooCommerce, Rebuild indexes after importing data outside the editor, Reset demo orders, and a copyable system report for support that contains no keys or customer data.

What “Configure WooCommerce for delivery” changes: delivery and pickup as zone-less shipping methods, fees shown before an address, cart and checkout pages (blocks on block themes, shortcodes on classic ones), guest checkout and account creation, phone required, “Cash on delivery” and “Card on delivery” gateways, coming-soon mode off, analytics and onboarding quietened. It never touches order storage (HPOS). It is safe to run again and also runs as wp sfd woo configure.

The back office

One Food Delivery menu

Restaurants, dishes, orders, taxonomies, reviews, leads, settings and tools all sit under one menu with a fork-and-knife icon. The menu title carries a red bubble with the number of active orders.

  • Dashboardcounts, store health, kitchens-and-couriers map
  • Live orderskanban board; bubble = active orders
  • Restaurantsthe restaurant editor
  • Menu managerprices, sell-outs and favourites for a whole menu
  • DishesWooCommerce products filtered to dishes
  • Cuisines · Areasrestaurant taxonomies
  • Menu sections · Dietsdish taxonomies
  • Reviewsrestaurant ratings (comments)
  • Leadspartner, courier and app sign-ups
  • Settingsten tabs: fees, timing, maps…
  • Toolsdemo, WooCommerce setup, indexes, report

What the Dashboard shows

  • Four cards: Active orders (with how many wait to be accepted), Open kitchens as “N / M” by opening hours and pauses, Revenue today, and the Median delivery time from order to door over the last 30 days.
  • Store health: WooCommerce version, order storage, cart and checkout pages, delivery and pickup methods, fees before an address, store visibility, permalinks, store pages, theme, map tiles, address search, background tasks, restaurant locations, opening hours, unlinked dishes and demo content. Failed rows get a fix button or a link to the right settings tab.
  • Kitchens and couriers: a live map with open and closed kitchens and couriers on the way, plus a button to the live board.
  • The admin bar shows “Live orders (N)” on every page, front end included, for anyone who may manage orders.

Roles

Administrators and shop managers get every capability. A new Restaurant partner role sees only the restaurants it owns (set via the restaurant’s Partner account field) and their dishes, can run the live board and the menu manager, and can never delete anything. Delivery-zone and fee fields stay locked for partners unless Partners may edit delivery zones and fees is switched on in Settings › Advanced.

Operations

The live order board

A kanban view of every order in flight. It refreshes every ten seconds, can chime on new orders, and is where staff accept, prepare and hand over.

Food Delivery → Live orders: the kanban board with New, Preparing, Ready, On the way and Done columns

Food Delivery › Live orders: columns New, Preparing, Ready, On the way and Done; a restaurant filter, a sound toggle and a map toggle. On the demo the board runs at 6× speed and some orders are marked “Demo order · moves on its own”.

Order is…Main buttonThen
Received or ScheduledAcceptMoves to Preparing; the customer’s tracker shows “Preparing your food”
Preparing (delivery)Handed to courierMoves to On the way; the tracker follows the courier on the map
Preparing (pickup)ReadyMoves to Ready; the tracker says “Ready for pickup”
ReadyCollectedDone; the WooCommerce order completes
Picked up or ArrivingDeliveredDone; the WooCommerce order completes and the customer can rate it
Any stageCancelAsks “Cancel this order?”; sets the WooCommerce order to cancelled
Cards can also be dragged between columns. Clicking a card opens an Order details panel with items, notes, customer, phone, drop-off, total, stage, expected time and links to the WooCommerce order and the customer’s tracking page.

How tracking works

  • When an order turns Processing, the plugin plans a timeline: a courier name from a fixed roster, a route, and a planned time per stage computed from the acceptance delay, the kitchen’s preparation and busy minutes, and travel time at the configured courier speed. Background jobs (Action Scheduler) advance the stage on schedule. Every order starts in this simulated mode.
  • The first time staff press a board button, the order switches to manual mode: from then on it only advances when staff stamp a stage, and an order note records who did it.
  • Stage sequences: delivery = received › preparing › picked up › arriving › delivered; pickup = received › preparing › ready › collected; scheduled orders start with a scheduled stage.
  • Delivered or Collected sets the WooCommerce order to Completed when Complete orders when delivered is on. Cancelled, refunded or failed orders drop their jobs and show “This order was cancelled”.
  • A real courier position can replace the simulated one for two minutes at a time through POST /stepfox-food/v1/orders/{id}/courier-location (capability sfd_update_courier). No courier app is included.
A WooCommerce order in wp-admin with the Delivery & tracking side box added by the plugin

The WooCommerce order screen gains a Delivery & tracking side box: order type, time slot, current stage with the planned time per stage, the destination with a map link and distance, extras such as cutlery or an 18+ confirmation, the courier, stage buttons and links to the live board and the customer’s tracking page. The orders list gets a Stage column.

If nobody touches the board, orders keep advancing on their simulated schedule with a fictional courier name. On a real store either work the board, or switch off Show the courier’s first name under Settings › Tracking.

Kitchens

The restaurant editor

A restaurant is a post of type sfd_restaurant that opens in the classic editor: the story is the content, the tagline is the excerpt, and everything else lives in one tabbed “Restaurant” box right under the title.

Food Delivery → Restaurants: logo, restaurant, cuisine, area, right-now state, rating and 30-day orders columns

The Restaurants list: Logo, Restaurant, Cuisine, Area, Right now (the live open state computed from hours and pauses), Rating (“4.6 (128)” or “New”) and Orders over 30 days, with cuisine and area filters. Health links can filter it to kitchens with no pin or no hours.

A Pinch restaurant open in the editor with the tabbed Restaurant box: Basics, Location & zone, Hours, Delivery & fees, Branding and Menu

A restaurant open in the editor. The Restaurant box has six tabs: Basics, Location & zone, Hours, Delivery & fees, Branding and Menu. The editor below it is headed “About the restaurant”.

Tab: Basics

FieldStored asNotes
Taglineexcerpt (≤160 chars)One short line shown on cards and the restaurant page.
Main cuisine / Also servessfd_cuisine_primary + cuisine termsThe main cuisine is shown first on cards; extra cuisines are tick boxes.
Neighbourhoodsfd_area termA dropdown nested by city.
Price levelsfd_price_level 1–4Segmented €, €€, €€€, €€€€.
Phonesfd_phoneShown on the page and in the tracker.
“New” badge until / Home page / Partner accountsfd_new_until, sfd_featured, sfd_ownerStore staff only. The partner account is the user with the Restaurant partner role who runs this kitchen.
Taking orderssfd_status, sfd_paused_untilOpen, Busy (longer prep) or Paused, with presets of 15, 30 or 60 minutes, until tomorrow, or until reopened.

Tab: Location & zone

  • Find the address autocompletes through the configured geocoder and fills Street address, Postcode, City and Country code. Latitude and longitude are stored with six decimals; drag the map to put the pin on the restaurant door.
  • Delivery zone: a Radius slider from 1 to 10 km (or the store default of 4.5 km), or a Drawn area: click the map to add corners, undo, clear, start from the radius, or paste and copy GeoJSON. Stored as a Polygon or MultiPolygon.
  • Test an address answers “Delivers here” or “Outside the delivery zone” before you publish.

Tab: Hours

Weekly ranges in 24-hour time, up to three a day (a closing time earlier than the opening time runs past midnight; 00:00–24:00 is open all day), with Add hours, 24 h and Copy Monday to all days. Special dates cover holidays and one-off changes: a date without hours is closed all day. The front end computes “open now”, “opens at” and the dinner-clock fallback from these.

Tab: Delivery & fees

FieldMeta keyNotes
Order typessfd_accepts_delivery / _pickup / _scheduledDelivery, Pickup and Orders for later; all on by default.
Preparation time / Extra time when busysfd_prep_min 15, sfd_busy_extra_min 10Feed the ETA.
Minimum ordersfd_min_orderCheckout stays blocked below this subtotal; 0 = none.
Free delivery from / Sponsored deliverysfd_free_over, sfd_free_deliveryFree above a subtotal, or always free.
Delivery feesfd_fee_mode + sfd_fee_base, _per_km, _included_km, _min, _maxStore default, or custom values for this kitchen; empty fields fall back to the store default shown in grey. A fee calculator previews the result.

Tabs: Branding and Menu

  • Logo and Cover: upload from the Media Library or pick one of the bundled “Pinch Flat” illustrations, with an illustration background (cream, peach, rose, mint, sky, lilac, butter, sage) and a brand colour used behind the logo in admin previews. A live card preview sits beside the fields.
  • Menu: drag the sections into the order you want, then Add dish to this restaurant (opens a new product already linked to it) or Open in the menu manager.
  • Computed, not edited: rating average and count (blended with imported seeds), orders in the last 30 days, the union of the menu’s diet labels and a menu version used for caching.

Menus

Dishes are WooCommerce products

A dish is a simple product with a restaurant set on its Food tab. Price, photo, stock and sales come from WooCommerce; section, options, diets, allergens and availability come from the plugin.

A dish open in the WooCommerce product editor with the Food tab: restaurant, menu section, diet, spice, allergens, flags, availability and option groups

A dish open in the product editor with the Food tab selected: Restaurant, Menu section, Illustration, Diet, Spice, Energy, Allergens, Popular and 18+ flags, availability window, name language and the visual builder for option groups.

FieldMeta keyNotes
Restaurant_sfd_restaurantSearchable select. “Not a dish (regular product)” keeps it an ordinary shop product.
Menu section / Or a new sectionsfd_menu_section termExactly one section; this restaurant’s sections are listed first.
Illustration_sfd_artShown when the product has no image.
Dietsfd_diet termsTick boxes (Vegan, Vegetarian, Gluten-free, Spicy, Contains nuts in the demo).
Spice / Energy_sfd_spice 0–3, _sfd_kcalNot spicy, Mild, Medium, Hot; kcal.
Allergens_sfd_allergensThe EU-14 list: Gluten, Crustaceans, Eggs, Fish, Peanuts, Soy, Milk, Tree nuts, Celery, Mustard, Sesame, Sulphites, Lupin, Molluscs.
Flags_sfd_popular, _sfd_age_restrictedPopular dishes sort first among best sellers; 18+ dishes make customers confirm their age at checkout.
Available from … until_sfd_available_from / _toFor breakfast or lunch-only dishes; empty = all opening hours.
Name language_sfd_name_langHelps screen readers pronounce “Bacalhau à Brás” (pt).
Options customers choose_sfd_option_groups (JSON)See below.

Option groups (modifiers)

  • Each group has a name (“Size”, “Extras”, “Spice level”), a type (Pick one or Pick several), a required flag, at-least / at-most counts, and choices with a label, a price change (negative allowed), a preselected flag and a sold-out flag.
  • Limits: 12 groups per dish and 20 choices per group. Insert from the library copies one of the demo templates into the dish; it is a copy, so changes affect this dish only. There is no shared modifier library.
  • Prices are always recalculated on the server when a dish is added to the basket, so the JSON cannot be tampered with from the browser.
[{"id":"size","label":"Size","type":"single","required":true,"min":1,"max":1,
  "choices":[{"id":"reg","label":"Regular 30 cm","price":0,"default":true},
             {"id":"lg","label":"Large 36 cm","price":3.5}]}]

How a menu is assembled

  • Sections are the Menu section terms used by the restaurant’s published dishes, ordered by the restaurant’s own section order, then each term’s order, then name. Dishes inside a section follow the product menu order, then title.
  • A virtual Popular section appears first when at least two dishes qualify (ranked by units sold, then the Popular flag). Dishes without a section go into a final More dishes section.
  • The assembled menu is cached for twelve hours and refreshed whenever a dish, section or order changes. Tools › Rebuild indexes rebuilds it after imports.
  • Dish product pages redirect to the restaurant menu with the dish sheet open, and the shop page redirects to the restaurant list (both switchable under Settings › Advanced). Products are noindex and left out of sitemaps.
Food Delivery → Menu manager for one kitchen: inline prices, Available today switches, Popular stars and bulk actions

The Menu manager for one kitchen: inline price edits (saved as the WooCommerce regular price), an Available today switch per dish, a Popular star and the count of option groups, plus bulk actions Sold out today, Back in stock and Move to section.

Coupons

WooCommerce coupons gain four Food fields: Restaurants (the code works only for orders from these kitchens), Order type (delivery and pickup, pickup only, delivery only), First order only (valid when the billing e-mail has no completed order yet) and Maximum discount for percentage codes. The demo ships OLA5, PINCHFREE, PICKUP10 and LISBOA20.

Vocabulary

Cuisines, areas, sections and diets

Two taxonomies on restaurants, two on dishes. They drive the cuisine rail, the area pages, the menu sections and the diet badges.

Food Delivery → Cuisines: the cuisine taxonomy list

The Cuisines screen. The demo seeds Pizza, Burgers, Sushi, Asian, Portuguese, Chicken, Bowls, Tacos, Curry, Middle Eastern, Sweets, Coffee, Vegan and Seafood, each with a bundled illustration.

TaxonomyOnHierarchicalPublic URLTerm meta
Cuisines (sfd_cuisine)restaurantsNo/cuisine/pizza/Bundled art, icon image, order, art background
Areas (sfd_area)restaurantsYes (city › neighbourhood)/area/lisbon/alfama-graca/Latitude, longitude, map zoom, outline (GeoJSON)
Menu sections (sfd_menu_section)dishesNonot publicOrder
Diets (sfd_diet)dishesNonot publicIcon

Version 1.0.0 has no fields for term meta on the add and edit term screens: cuisine illustrations and order, area coordinates and outlines, and diet icons can be set through the REST API, WP-CLI or the demo seeder only. The demo terms arrive fully filled in, and the plugin falls back gracefully (areas without coordinates simply have no map centre).

Inboxes

Reviews and leads

Customers rate delivered orders; partners, couriers and app sign-ups arrive as leads. Both are ordinary WordPress objects you can filter, export and purge.

Reviews

  • A review is a comment of type sfd_review on the restaurant with a 1–5 star rating, optional tags (Hot & fresh, Generous portions, Well packed, Friendly courier, Fast, Great value, Authentic, Would order again), the order id and a verified flag.
  • Customers rate from the tracker’s Rate order block or the Rate action in My Account. Reviews are auto-approved unless they hit the WordPress disallowed-words list.
  • The rating shown on cards blends the imported seed average with real stars and is recalculated whenever a review is added, approved or deleted.
  • Food Delivery › Reviews is the comments screen filtered to reviews, with a sortable Rating column.

Leads

  • Three forms: Restaurant partner (restaurant name, your name, e-mail, phone, address, cuisine, message, consent), Courier (name, e-mail, phone, vehicle, areas, message, right to work, consent) and Get the app (e-mail, consent).
  • Protected by a honeypot and a limit of five sign-ups per IP per hour. Each becomes a private sfd_lead post and an e-mail to the site admin (Reply-To the applicant). In demo mode nothing is sent.
  • Food Delivery › Leads: Lead, Type, Contact, Details, an inline Status select (New, Contacted, Won, Lost) and Received, with views per kind and an Export CSV button. Old leads are purged after the retention period in Settings › Advanced.
Food Delivery → Leads: partner, courier and app sign-ups with inline status

The Leads list with the three kinds and inline status changes.

Privacy: the plugin adds suggested privacy-policy text and registers personal-data exporters and erasers for saved delivery places, favourite restaurants, and partner and courier applications.

Configuration

Food Delivery › Settings

Ten tabs in one option (stepfox_food_settings). Fees, timing and tracking define the numbers every card, basket and checkout shows; map and geocoding decide which providers run.

Food Delivery → Settings in wp-admin with its ten tabs

The Settings screen. Tabs: General, Map, Geocoding, Fees & tips, Timing, Tracking, Checkout, Pages, Places and Advanced. The Map, Geocoding and Fees tabs carry a live side panel (map preview, search test, fee calculator) that previews unsaved values.

General, Map and Geocoding

SettingDefaultWhat it does
Demo mode / Demo tracking speedoff / 6×Demo notices, a demo address, faster tracking, no customer e-mails. Off on a real store.
City name, centre latitude / longitude, default zoomLisbon, 38.7190 / −9.1420, 14Where maps start and what the site calls your city.
Distance units / Default order typekm / deliveryKilometres or miles; delivery or pickup selected first.
Demo dinner clock + thresholdon / 4Demo only: when fewer kitchens are open, hours are evaluated at 19:30 and the page says so.
Tile provider + key, style idsOpenStreetMapOpenStreetMap (no key, light use), CARTO Voyager or Positron, Stadia, MapTiler, Mapbox or a custom tile URL with {z}/{x}/{y}. A keyed provider without a key falls back to OpenStreetMap and says so. Check the provider tests it.
Warm tint on map tilesonTints the map to match the theme.
Address search / Pin to addressPhoton / NominatimForward and reverse geocoders: Photon or Nominatim without a key, Mapbox or MapTiler with one (the key stays on the server), or none (popular places only). Results are cached 30 days.
Limit to countries / Prefer results near the citypt / onComma-separated ISO codes; bias results to the city.

Fees & tips, Timing, Tracking, Checkout

SettingDefaultWhat it does
Base delivery fee, Fee per km, Distance included, Minimum, Maximum0.99, 0.45, 1 km, 0.99, 4.99Fee = base + per-km beyond the included distance, clamped between minimum and maximum.
Round delivery fees to .x9on“Charm” rounding of the computed fee.
Small order threshold / cap / on pickup10 / 3 / offAdds the difference to the threshold as a fee, capped.
Service fee % / minimum / maximum / delivery only5% / 0.39 / 2.49 / onA percentage of the subtotal held between the two bounds.
Fees are taxableoffWhether WooCommerce taxes the fee lines.
Tip presets, custom tip, maximum, default0, 1, 2, 3 / on / 20 / 0Up to six amounts; 0 means “No tip”.
Road distance factor / Courier speed1.35 / 16 km/hRoad distance = straight line × factor; travel time = road km ÷ speed.
Acceptance buffer / Pickup buffer / ETA window2 / 4 / 10 minETA = prep + busy + acceptance (+ pickup buffer + travel for delivery); the window adds the width.
Scheduled slot length / Days ahead / Default delivery radius15 min / 2 / 4.5 kmOrder-for-later slots and the zone used by kitchens on the store default.
Simulated acceptance delay / Tracker refresh / while arriving120 s / 15 s / 5 sHow the customer tracker polls.
Complete orders when delivered / Show the courier’s first nameon / onSee the live board section.
Require a phone number / Cutlery ticked by default / Demo checkout banneron / off / textCheckout behaviour.

Pages, Places and Advanced

  • Pages: which page is the order tracking, terms, map, cuisines, offers, partners, couriers, app, help centre, about and journal page. “Automatic” finds the page by its stamped role or by slug; the screen shows which page it found.
  • Places: the popular squares and landmarks offered in the address search before anything is typed (name, latitude, longitude, postcode; up to 100). Replace the Lisbon list with your own; never list private addresses.
  • Advanced: partners may edit zones and fees, dish-page and shop redirects, lead retention days, demo visitor-order purge hours, hide WooCommerce’s thank-you paragraph, delete all plugin data on uninstall. Two more settings are command-line only: rate-limit exemptions and a QA clock that pins the time used for opening hours.

Under the hood

From basket to doorstep

What the plugin does inside WooCommerce between “Add” and “Delivered”. One rule set lives on the server and is mirrored to the browser, so cards, the bag and checkout always agree.

Address first

The visitor sets a delivery address (or picks pickup) in the location sheet: saved places, recent places, popular landmarks or a typed search. The address is kept in the WooCommerce session and a cookie, and every card immediately shows its distance, fee and ETA.

One kitchen per basket

Adding a dish from another restaurant raises a conflict dialog (“Your basket has items from … Start a new order from …”). The current basket is kept until the new dish is really added.

Fees and ETA

The quote engine computes the road distance, the delivery fee, the small-order and service fees and the ETA window from the settings and the kitchen’s own values. The cart drawer shows a progress bar towards free delivery or the minimum order.

Checkout

Delivery and pickup are zone-less shipping methods, so the Checkout block’s own Delivery / Pickup toggle switches the mode. The panel adds a When slot (as soon as possible, or 15-minute slots up to two days ahead), tip radios and, for delivery, drop-off (hand it to me, leave at the door, meet outside), cutlery, a 140-character note for the courier and an 18+ confirmation when needed.

Checks before placing

Checkout is blocked when the basket is below the minimum order, the kitchen is closed or paused or does not offer the chosen mode, the address is outside the zone or unconfirmed, the slot has expired or the 18+ confirmation is missing.

Order received

The order is stamped with restaurant, mode, slot and quote. The block theme’s order-confirmation template shows the live tracker; on classic themes the plugin prints it above WooCommerce’s thank-you text. The processing e-mail adds a “Track your order” link of the form /track/?sfd_order=ID&key=….

After delivery

The order completes, the customer can rate it and reorder from My Account, which also gains Favourites and Saved places endpoints. Guests’ favourites live in a cookie and merge into the account at sign-in.

REST API and WP-CLI

Route (namespace stepfox-food/v1)Purpose
GET /restaurants, /restaurants/{id}, /restaurants/{id}/menu, /dishes/{id}Kitchens, one kitchen, its assembled menu, one dish
GET /quote, /search, /geocode, /geocode/reverse, /placesFee and ETA quote, search, address search, pin to address, popular places
/me/favorites, /me/places, /me/orders/activeThe signed-in customer’s favourites, saved places and active order
GET /track/{id}, /track/demo; POST /orders/{id}/rating, /orders/{id}/reorderThe tracker, the public demo delivery, rating and reorder
GET /board, POST /board/orders/{id}/stage, POST /orders/{id}/courier-locationThe live board, stage changes, real courier positions
POST /leads, POST /demo, GET /view, POST /render-batchSign-ups, the demo installer, partial re-renders, editor previews
The plugin also extends the WooCommerce Store API with set_location, set_mode, set_tip and set_slot cart actions.
wp sfd demo install            # or: wp sfd demo remove --yes / wp sfd demo status
wp sfd woo configure           # the same as Tools › Configure WooCommerce
wp sfd index rebuild           # after importing restaurants or dishes
wp sfd quote --restaurant=lotus-thai-kitchen --lat=38.71 --lng=-9.14 --subtotal=24
wp sfd orders simulate --count=3
wp sfd settings get fees.base  # or: wp sfd settings set advanced.qa_now 19:30

Background work runs through Action Scheduler in the sfd group: an hourly job and a daily job at 04:00 site time (order counts, diet unions, review blending, lead purge), plus one job per planned order stage. SEO fallbacks (meta description, Open Graph, Restaurant and Menu JSON-LD) switch themselves off when Yoast, Rank Math or AIOSEO is active.

Block editor

The 80 blocks

All blocks sit in the “Food” inserter category and are prefixed “Food —”. They render real data in the canvas, and they are small: a field, an image, a button, a loop, a sheet. Cards and dialogs are built by nesting them.

The block inserter in the Site Editor filtered to the Food category, listing the plugin blocks

The block inserter filtered to Food inside the Site Editor. Every block shares the Stepfox Looks attributes (per-device styles, custom id), a Specific item ID, an empty-state text and device visibility.

How a block knows which item to show

  • Blocks that expect a restaurant work in the single-restaurant template, inside a restaurant Query Loop, inside a Food — Restaurant wrapper, or with a Specific item ID.
  • Blocks that expect a dish need a Food — Dish wrapper, the Food — Dishes loop or the Food — Dish dialog. Blocks that expect an order need the Food — Order wrapper; term blocks need the Food — Terms loop.
  • Loops repeat their inner blocks per item: Menu sections, Dishes, Reviews, Cart lines, Terms, Order steps and Order lines. The Field block then reads one value of the current item, with a prefix such as line.*, step.* or review.* telling you which loop it belongs in.

Fields and media (12)

BlockItemInspector controls
FieldanyField (see the list below); HTML element (span, p, div, h1–h4, strong, small); text before / after / when empty; Link (none, its page, open the dish sheet, edit the bag item); Format (default, short, long)
Logo, CoverrestaurantSize and link; aspect ratio (16/9, 3/1, 2/1, 4/3, 1/1), link, lazy or eager loading
Dish artdishAspect ratio; link (none / open the dish sheet); show the quantity in the bag
Art, Icon—A bundled illustration (chosen, or the cuisine / area / dish / cover / logo / order stage / courier of the item), width, height, alt, link; an icon name, size and label
RatingrestaurantStyle (badge, stars, score, summary); show the number of ratings
Open staterestaurantStyle (pill, text, dot); show the next change; hide while open
Diet badges, AllergensdishIcons, labels or both; inline or expandable
Opening hoursrestaurantHighlight today; compact
Promo badgerestaurantStyle (ribbon, pill, text); the most important badge or all

Menu and ordering (17)

BlockWhat it doesInspector controls
Restaurant, Dish (wrappers)Provide the item for the blocks insideSource (current page, bag, order, dish, a specific id; or from the address); id; empty text
Menu sectionsLoop over sectionsStart with a Popular section; its title and size; hide empty
DishesLoop over dishesSource (menu section, whole restaurant, popular, across the city, related, add-ons for the bag, chosen ids, search results); how many; order (menu order, popularity, price); hide sold-out; layout (grid, rail, list); item size
Menu navigation, Menu searchThe sticky section bar and search boxScroll sideways or collapse into “More”; include search; placeholder
Add buttonThe + / Add / price button on a dishStyle (plus button, button, price); label
Dish dialog, Dish options, Quantity, Item note, Add to order buttonThe dish sheet and its partsOptions as list or chips with price deltas; min and max quantity; note length and labels; add / editing / scheduling / sold-out labels
Favourite, ShareHeart and share buttonsIcon or icon + label
ReviewsLoop over reviewsHow many; most recent or rating; minimum stars; only reviews with text

Cart and location (19)

BlockWhat it doesInspector controls
Cart button, Cart bar, Cart drawer, Cart viewHeader button with count and total; the fixed “View order” bar on phones; the slide-in bag; the full cart page bodyShow count / total; where the bar shows; drawer title
Cart lines, Cart totals, Fee progress, Checkout buttonThe bag’s lines, the totals rows, the free-delivery / minimum-order bar, the buttonRows; explain each fee; which bar (automatic, small-order fee, free delivery, minimum order); label
Order timeASAP or a scheduled slotStyle (summary, inline, dropdown) and labels
Address button, Address barThe header “Deliver to …” button; the hero search barText before; show delivery or pickup; placeholder; button; offer “use my location”; go-to URL
Location dialog + Location search, Use my location, Location list, Location details, Confirm addressThe address sheet and its partsSaved / recent / popular lists with headings; My Account mode; labels for home, work, other, save, edit, delete, skip
Delivery / pickup toggle, Zone checkMode switch; “delivers here” lineLabels; show the delivery time; bag line or summary

Discovery, map and forms (18)

BlockWhat it doesInspector controls
MapOne map block for every situationMode (all restaurants, whole restaurant, area, delivery coverage, order, showcase, address picker, static preview); cluster pins; show zone and address; interaction (full, click to activate, static); synced list; fit to results / city / address; tile provider; labels
TermsLoop over cuisines, areas or dietsTaxonomy; parent; only these slugs; order (custom, name, count); how many; hide empty; mark current; layout
Filter form + Filter chip, Filter terms, Filter sort, Filter reset, View toggle, Load moreThe filter bar of the directoryApply instantly; regions to update; chip filter (open now, free delivery, rating, price level, diet, delivery time, mode); taxonomy chips with an “All” chip; labels; query id
SearchRestaurant and dish search with suggestionsPlaceholder; accessible name; search in (all, restaurants, dishes); suggest as you type
Promo strip, Promo codeScrolling messages; copyable couponMessages; automatic messages; speed; code; labels; terms
Show whenShows its content only when a condition holdsAddress set / not set; no kitchen delivers; bag empty / has items; logged in / out; at least N kitchens open; demo mode; dinner clock; order found / stage / mode; restaurant closed or out of range; time between; invert
Lead form + Form field, Form submitPartner, courier and app sign-up formsKind; success message; consent text; field type (text, e-mail, phone, long text, dropdown, one choice, checkbox, area, cuisine or vehicle picker); label; required; choices
Earnings calculator, FAQ searchThe partner page calculator; the help-centre searchCommission; default orders per day and basket; labels; questions to search; placeholder

Order tracking and UI (14)

BlockWhat it doesInspector controls
Order (wrapper)Provides the order for the trackerSource (automatic, My Account order page, from the address, demo delivery, active order, latest order, a specific id); map to follow the courier on
Order steps + Step marker, Order lines, Order progress, Countdown, Stage art, Courier avatarThe timeline, the lines, the bar, minutes left or arrival time, the stage illustration, the courierVertical or horizontal; format (minutes left, arrival time, both); labels; size
Rate order, Reorder, Order lookup, Active orderStar rating with tags and comment; reorder button; order number + e-mail lookup; the header pill or bottom bar for an order in flightTags; questions; labels; demo link label; pill or bar
Sheet close, Sheet panel, Scheme toggle, Demo noticeDialog chrome; the bottom sheet; light / dark switch; demo chips and banners (print nothing outside demo mode)Resting heights; mobile only; label; style (chip, banner, clock, address, speed)

What the Field block can read

  • restaurant (26): name, tagline, cuisine(s), area, city, address, phone, price level, rating and count, preparation / delivery / pickup time, time caption, delivery fee (short and long), distance, minimum order, free-delivery threshold, today’s hours, open status, next opening, delivers to you, pickup address, link.
  • dish (13): name, description, price, price from, calories, spice level, menu section, restaurant name and link, sold out, popular, availability, link.
  • order (27): number, stage, stage message and hint, arrival and quoted time, minutes left, placed at, item count, items, subtotal, each fee, tip, discount, total, order type, drop-off, time slot, destination, restaurant and phone, courier, vehicle, tracking link, demo label.
  • cart (15), line (6), step (3), review (7), section (2), term (6), location (3) and site (9: restaurants, open now, cuisines, areas, median delivery time, city, results, year, copyright).

Block theme

Templates, parts and patterns

Pinch is a full-site-editing theme: every page type, sheet and card is a template or template part of ordinary blocks. There is no theme options screen.

Inside the Site Editor: the Pinch front page open as blocks, List View on the left, block settings on the right

The demo front page open in the Site Editor: List View reaches every block inside every card, and the Stepfox Looks sidebar holds desktop, tablet and mobile values for spacing, colours and typography.

The Site Editor Templates list of the Pinch block theme

The Templates list with the theme’s names and descriptions. Page templates are matched by page slug and also offered in the page editor’s Template picker.

TemplateServesBuilt from
HomeThe static front pageHero with a live map, cuisine rail, Popular / Favourites / Fastest / New rails, most-ordered dishes, the full directory
All restaurants/restaurants/Filter form, sort, result grid and Load more
Restaurant/restaurant/…/Cover and hero facts, menu with the live bag beside it, reviews, hours, similar kitchens
Cuisine, Neighbourhood/cuisine/…/, /area/…/Results, a Popular fallback when few match, most-ordered dishes; “Also delivering to …”
Map, Cuisines, OffersPages with slug map, cuisines, offersFull-screen map with a synced list; every cuisine as a tile; promo codes, free-delivery deals, deals at new kitchens
Cart, Checkout, My account, Order confirmationThe WooCommerce pagesCart block with a restaurant header and show-when states; a minimal header and the Checkout block; My Account plus guest Favourites and Saved places; the tracker above the WooCommerce confirmation blocks
Track orderPage with slug trackThe tracker part, or the Order lookup form when no order is in the address
Become a partner, Become a courier, Get the app, Help centrePages with slug partners, couriers, app, helpSign-up forms with the earnings calculator; app promo with an e-mail-me-the-link form; FAQ search, topics and contact
Journal, Single, Archive, Category, Search, 404, Page, IndexThe editorial layer and fallbacksStory cards; “Kitchens in this story”; restaurants, dishes and stories in search
26 templates. The page templates match by slug; the demo seeder creates those pages empty and stamps them with their role.

Template parts

  • Header (promo strip, logo, address button, search, active order, account, cart button and a burger menu with Restaurants, Map, Offers, Cuisines, Journal, Track an order, My account, Become a partner, Become a courier, Help) and a Header — Checkout; Footer (app band, link columns, areas, scheme toggle, demo notice, cart bar, active order) and Footer — Slim.
  • Ten copies of the restaurant card: Restaurant card, and one each for the Popular, Fastest, New and Favourites rails, Free delivery deals, Deals at new kitchens, Also delivering here, Similar kitchens and Kitchens in this story. Each loop uses its own copy, so restyling one rail never changes another.
  • Item parts: Restaurant row (map list), Dish row (menu), Dish tile (rails), Review card, Story card. Sheets: Dish dialog, Cart drawer, Location dialog. Order: Order tracker, Account — Favourites, Account — Saved places.
  • Links are written for the demo and rewritten to your own site at render time. There are no classic menu locations; edit the navigation blocks in the header and footer parts.

Patterns (category “Pinch”)

App bandFAQHow it worksPromo cardsPartner and courier CTAValue props

theme.json: palette, type and spacing

SettingValues
LayoutContent 1280 px, wide 1440 px
PalettePlate, Card, Linen, Sand, Hairline, Edge; Espresso, Roast, Pepper; Paprika #D2421A with deep, ink and tint; Saffron #FFB423 with tint; Basil #157347 with ink and soft; Chili with ink and soft; Star; Night, Night 2, Night text, Night meta; white, transparent; eight illustration backgrounds (cream … sage)
GradientsBrand, Sunrise, Saffron pop, Basil fresh, Night, Scrim, Shimmer
Fonts (self-hosted, OFL)Bricolage Grotesque (display), Figtree (body)
Font sizes / spacingExtra small … Jumbo; Hair, Tight, Snug, Base, Roomy, Loose, Section, Band, Hero
ShadowsHairline lift, Card, Lift, Float, Pop, Paprika glow, Ring
Dark modeA colour remap under settings.custom.sfdScheme.dark; the Scheme toggle block switches at runtime and remembers the choice

Because the theme has no stylesheet, restyling is done per block: select a card in List View, open the Stepfox Looks panel and change the value for desktop, tablet or mobile. The change becomes a block attribute, so there is no child theme to maintain.

Elementor edition

Pinch for Elementor

The Elementor theme renders the same kitchens, menus and orders through 36 plugin widgets, 7 theme widgets and 3 dynamic tags. With Elementor Pro the layouts are editable Theme Builder templates; without it, every route has a PHP fallback built from the same widget markup.

The Elementor editor: the Pinch front page open with the native widget workspace

The demo front page open in the Elementor editor. Widgets live in a “Food” panel category; most have an Empty state section, an Entity source section (the current page, or one you choose) and a Style tab with accent, text, surfaces, lines and corner radius.

Appearance → Pinch Setup in the Elementor edition: system check and the Install the layout button

The Appearance › Pinch Setup wizard: a system check (Elementor 3.20+, WooCommerce, the plugin, Elementor Pro optional), a link to the Food dashboard and Install the layout, which creates the pages as Elementor documents, the “Pinch Kit”, four menus and, with Pro, fourteen Theme Builder templates. It never overwrites content you edited and rolls back if a step fails.

Widgets (category “Food”)

WidgetContent controls
Address bar, Address button, Delivery or pickupPlaceholder, button label, use-my-location, results page; prefix and labels; mode labels, show times, apply button
Food search, Cart button, Cart drawer, Cart bar, Active orderSearch scope and suggestions; count and total; title, time picker, “Goes well with”; where the bar shows; pill or bar
Promo strip, Promo code, Promo cardsLive and custom messages, speed; code, labels, terms; a repeater of cards
Cuisine rail, Area gridRail or grid, order, number, hide empty, counts, “All cuisines” tile; every neighbourhood, inside or next to the current area, card or link
Restaurant grid, Restaurant carousel, Restaurant list16 sources (all with filters and sort, this archive, popular near you, fastest, new, free-delivery deals, deals at new kitchens, favourites, similar, kitchens in this story, one cuisine, one area, also delivering here, map list, search results, popular fallback); cuisine or area; per page; Show more; filters above; out-of-range last; columns; cards in view
Restaurant filtersSort, open now, free delivery, rated 4.5+, price levels, under 30 min, cuisines, diets; one or two rows; list / map toggle; apply instantly; stick under the header
Food mapMap shows (every restaurant with a synced list, this restaurant and its zone, this area, delivery coverage, the order on its way, a live demo delivery, address picker, static preview); interaction; clustering; zone and address; frame; tiles; height
Restaurant hero, Restaurant menu, Dish rail, Reviews, Restaurant infoDelivery facts and zone map; menu search, Popular count, bag beside the menu; dish sources and layout; summary bars, order, minimum stars; address, small map, hours and allergy note
Order tracker, Order lookupOrder source (automatic, order-received page, tracking link, active order, live demo); map side; details; lookup labels and demo link
Sign-up form, Earnings calculator, FAQ searchForm kind, button, thank-you, consent; commission and starting values; FAQ to search
Open state, Favourite button, Delivery zone check, Food field, Food illustration, Food icon, Dark mode switch, Demo noticeStyle and labels; field with tag, before, after, fallback, link and format; illustration or icon with size; accessible labels; notice kind
Pinch — Home hero, Section head, How it works, Partner and courier cards, App band, Journal stories, Dynamic value (theme widgets)Title, highlighted words, text, live map card; section titles with counts and “See all” links; steps repeater; two CTA cards; the app band; story layouts; a live value (year, copyright, city, restaurant counts, open now, typical delivery time…)

Dynamic tags (group “Food”)

  • Food field: any of the Field block’s values (restaurant, dish, order, cart, site…) with a format.
  • Food image: restaurant cover or logo, dish picture, cuisine illustration, order-stage illustration or courier vehicle, with a fallback.
  • Food link: the restaurant, the dish (opens its sheet), order tracking, the cuisine, the area, cart, checkout, map, all restaurants, favourites.

Templates, menus and options

WhereWhat
Theme Builder (Elementor Pro)Pinch Header, Header (checkout), Footer, Footer (slim), Restaurant, Restaurants, Cuisine, Neighbourhood, Journal, Archive, Story, Page, Search, 404. Without Pro the PHP templates render the same routes.
Page templates by slugapp, couriers, cuisines, help, map, offers, partners and track render from PHP when the page is not built with Elementor; the wizard builds them as Elementor documents.
Appearance › MenusFour locations: Primary navigation (menu overlay), Footer: Pinch, Footer: Work with us, Footer: Legal. The wizard creates Pinch Primary, Pinch Footer, Pinch Work With Us and Pinch Legal; fallback links print until menus exist. [pinch_navigation] prints a location inside Elementor.
WooCommerceClassic cart and checkout shortcodes (the configure step picks classic checkout on non-block themes); the cart button reads “Go to checkout”; the tracker prints on the order-received page.
Appearance › CustomizeLogo and site icon. There is no separate theme options screen; colours and fonts live in the Elementor kit.

Go live

From zero to first order

The order that avoids rework: store basics, then providers and fees, then kitchens and menus, then a test order worked through the board.

Install

Theme, then Install the demo (or the clean path through Tools and Store health). Elementor edition: also Pinch Setup › Install the layout.

Store basics

WooCommerce › Settings: your address, currency, selling countries and taxes. Food Delivery › Settings › General: demo mode off, city name, centre, zoom, units, default order type.

Providers

Settings › Map: a keyed tile provider and its key, then Check the provider. Settings › Geocoding: address search and pin-to-address providers, server key, countries, then Test. Settings › Places: your own landmarks.

Fees, timing, tracking

Settings › Fees & tips (use the calculator), Timing (radius, courier speed, slots, days ahead), Tracking and Checkout. Check Pages if your slugs differ.

Remove the demo

Tools › tick the confirmation › Remove demo content (or from Appearance › Install Demo). Your own content is never touched.

Vocabulary

Cuisines, Areas (the city as parent, neighbourhoods under it), Menu sections and Diets.

Kitchens

Restaurants › Add restaurant: Basics, Location & zone (find the address, drop the pin, radius or drawn zone, test an address), Hours and special dates, Delivery & fees, Branding. Publish.

Menus

From the Menu tab, Add dish to this restaurant; or Products › Add new and the Food tab. Price and photo as the product’s; options, diets, allergens, availability on the Food tab; section order on the Menu tab; bulk prices and sell-outs in Menu manager.

Coupons, payments, partners

Optional: WooCommerce coupons with the Food fields; a real payment gateway next to Cash and Card on delivery; a Restaurant partner user per kitchen.

Test and run an order

Set an address, add a dish, check out with a slot, tip and drop-off. Watch the tracker, then open Live orders: Accept › Handed to courier or Ready › Delivered or Collected. The order completes, the customer rates it, the review appears under Reviews.

Good to know

Questions, answered

Is there a licence key?

No. The plugin and both themes check stepfoxthemes.com through the normal WordPress update check (results cached twelve hours) and show the standard “Update available” rows. Only the slug and version are sent.

Do I need a map or geocoding key?

Not to start: OpenStreetMap tiles and the Photon / Nominatim geocoders need no key and suit light traffic. For a real store pick CARTO, Stadia, MapTiler or Mapbox tiles and, if you like, Mapbox or MapTiler geocoding; the geocoder key never leaves the server.

Is there a courier app?

No. Tracking is simulated from the kitchen’s prep time and the courier speed, and becomes manual when staff use the board. A real GPS feed can post positions to the courier-location endpoint.

What happens to orders if nobody works the board?

They keep advancing on the simulated schedule and complete by themselves. Either work the board (the first button press makes an order manual) or switch off the courier name under Settings › Tracking.

Can a restaurant manage its own menu?

Yes. Create a user with the Restaurant partner role and choose it as the kitchen’s Partner account. The partner sees Live orders and Menu manager for their own kitchens only and can never delete anything.

What does uninstall remove?

Always: options, scheduled jobs, roles, user meta and every demo-stamped item (including demo products and orders). Only when ticked under Advanced: restaurants, leads, reviews and the plugin’s taxonomies. Your own products and orders are never deleted.

Does Elementor need Pro?

No. Pro makes the Theme Builder templates editable; without it the same routes come from the theme’s PHP templates and the widgets work on any Elementor page.

Can I import kitchens and dishes?

Restaurants and dishes are ordinary posts and products with registered meta exposed in the REST API, so importers can create them. Run Tools › Rebuild indexes (or wp sfd index rebuild) afterwards.

Ready to take orders?

Two themes, one ordering engine on WooCommerce, a Lisbon demo with 24 kitchens and live tracking on the map. Get the Pinch bundle for a one-time $99.

Theme overview|Product page|Elementor demo|Support

ABOUT US