A restaurant website with online ordering should do more than show a menu. A customer needs to choose dishes, pick options, select pickup or delivery, pay, and know the restaurant actually received the order. The restaurant team needs the same order to arrive with the right items, modifiers, address, payment state, and timing.
This guide builds a practical first version around WooCommerce. It works well for a single restaurant that wants direct online orders without turning the site into a marketplace or delivery app.
TL;DR
To build a restaurant website with online ordering in WordPress, use WooCommerce for the menu, cart, checkout, payments, and orders, then add WooCommerce Product Add-Ons for choices such as size, spice level, toppings, and extras. Configure pickup and delivery as WooCommerce shipping methods, connect a supported payment gateway, create a mobile-friendly menu, and place a complete test order. The site is ready only when the correct food, options, fulfillment method, customer details, payment state, and order notification all reach the restaurant exactly as expected.
Decide what kind of ordering you actually need
Restaurant ordering can mean very different things. A café taking twenty pickup orders a day does not need the same system as a multi-location restaurant with timed delivery slots, kitchen screens, driver dispatch, table ordering, and QR codes.
There are several restaurant-specific WordPress plugins, which we compare in our WordPress restaurant plugins roundup. For this walkthrough, we will use WooCommerce because it gives us a stable product, cart, checkout, payment, shipping, and order-management flow that is easy to understand. We will add WooCommerce Product Add-Ons only where menu modifiers are required.
If your operation depends on scheduled delivery slots, table-side QR ordering, kitchen display screens, multiple branches, or driver management, choose a restaurant-focused ordering plugin from the roundup instead of forcing those workflows into a basic WooCommerce setup.
Essential plugin stack
| Role | Plugin | Why it is here |
|---|---|---|
| Menu, cart, checkout, orders | WooCommerce, | Handles menu products, cart, checkout, shipping methods, customer details, order status, and payment-gateway connections. |
| Dish options and extras | WooCommerce Product Add-Ons, | Adds paid or free choices such as size, extra cheese, sauce, toppings, spice level, or side dishes. |
| Card payments, if needed | WooCommerce Stripe Payment Gateway, | Use it only if Stripe is available for your business. Another WooCommerce-compatible gateway can replace it. |
How to build a restaurant website with online ordering
Step 01: Define the order flow before adding menu items
Write down whether customers can choose pickup, delivery, or both. For delivery, define the exact area you serve, how delivery fees work, your minimum order if you have one, and what happens outside the delivery area. For pickup, decide where customers collect the order and which opening hours apply.
Keep the first version simple. If the kitchen cannot reliably prepare orders every fifteen minutes, do not add precise time-slot promises just because a plugin supports them.
Check: You can explain the entire customer flow in one sentence: choose food, choose pickup or delivery, enter details, pay, receive confirmation.
Step 02: Install WooCommerce and set the restaurant basics
Install and activate WooCommerce. Complete the store setup with the restaurant address, currency, selling locations, and checkout settings. Create the Cart and Checkout pages if WooCommerce has not created them automatically.
Use the restaurant address as the store base because shipping zones and taxes may depend on it. Do not publish the menu until the checkout page works from a logged-out browser.
Check: Add a temporary product to the cart and reach checkout successfully with the correct currency and restaurant location.
Step 03: Build the menu as clear product categories
Create categories that match how people order, such as Burgers, Pizza, Rice, Drinks, Desserts, or Combos. Then create one WooCommerce product for each dish. Use a short, useful description, a clear price, an accurate food photo, and only the information a customer needs to decide.
Avoid uploading the menu only as a PDF. A real HTML menu is easier to use on phones, easier to update, and lets customers add items directly to the cart.
Check: A first-time visitor can open the menu on a phone, understand the categories, and add a basic item to the cart without zooming or downloading a file.
Step 04: Add sizes, toppings, and other food choices
Simple choices such as Small, Medium, and Large can sometimes be handled as WooCommerce variations. For extras and flexible modifiers, install WooCommerce Product Add-Ons. Add only options the kitchen can actually fulfill.
Keep required and optional choices obvious. For example, a pizza may require one size but make extra cheese optional. Put an additional price beside every paid modifier so the customer sees the real cost before checkout.
Check: Add a product with several modifiers to the cart and confirm every selected option and added cost appears correctly in the cart.
Step 05: Configure pickup and delivery separately
In WooCommerce shipping settings, create shipping zones for the areas you serve. Add Local Pickup for pickup orders. Add the delivery method you actually use for supported zones, such as a flat rate. Keep unsupported addresses outside your delivery zones so customers do not place orders you cannot fulfill.
State delivery expectations in plain language. If delivery time varies with distance, traffic, or kitchen load, avoid promising a fixed time the system cannot enforce.
Check: Test one address inside your delivery area and one outside it. The first should show the intended delivery option and fee; the second should not be able to select unavailable delivery.
Step 06: Set restaurant hours and out-of-stock handling
Your website should not accept an order that the kitchen cannot prepare. WooCommerce can manage product stock, so mark unavailable dishes out of stock instead of leaving them orderable. For opening-hour restrictions, use the restaurant workflow or extension that matches your operation rather than relying on staff to notice orders placed while closed.
If the basic WooCommerce stack does not give you the opening-hour or time-slot control you need, that is a sign to move to a restaurant-specific solution from the restaurant plugin roundup.
Check: Temporarily mark a dish unavailable and confirm a visitor cannot add it to the cart as if it were still being served.
Step 07: Connect payment without blocking cash orders unnecessarily
Choose the payment methods your restaurant can support. For online card payments, this guide uses WooCommerce Stripe Payment Gateway where Stripe is available. You may also offer Cash on Delivery if it fits your pickup or delivery process.
Use the gateway’s test mode when available. Do not turn on live payments until you can create an order, see the correct payment status, and understand how refunds are handled.
Check: A test payment creates one WooCommerce order with the correct total and payment state. A failed test payment should not look like a paid order.
Step 08: Make the order useful to the kitchen
Place a complete sample order with a main dish, modifier, extra, drink, and pickup or delivery. Open the WooCommerce order in the dashboard and read it as if you were the kitchen or front-desk staff.
The order should clearly show item quantities, selected options, customer name, phone number, address when relevant, fulfillment method, notes, total, and payment status. If staff must guess what a modifier means, fix the product labels before launch.
Check: A staff member who did not build the website can read the order and know exactly what to prepare and where the order is going.
Step 09: Verify confirmation and restaurant notifications
WooCommerce sends order emails based on its email settings. Confirm that the restaurant receives the new-order notification and the customer receives the correct confirmation. The customer message should not promise preparation or delivery details your workflow does not actually track.
Do not assume an email was sent because the order exists in WordPress. Test delivery to a real inbox and check spam.
Check: Both the restaurant and customer receive the expected message for the test order, with the correct order number and details.
Step 10: Test the full mobile ordering journey
Most food orders will be placed quickly, often from a phone. Open the site logged out on a small screen. Browse the menu, open a dish, choose modifiers, add multiple items, change quantities, select pickup or delivery, enter customer details, pay, and reach the order-confirmation screen.
Pay attention to sticky headers, popups, oversized product images, tiny modifier controls, and checkout fields that make the flow slow.
Check: Complete the order on mobile without zooming, losing selected options, encountering hidden buttons, or reaching an unclear confirmation state.
What usually breaks restaurant ordering
The most common failures happen between the website and real restaurant operations: delivery areas that are too broad, unavailable dishes still visible, modifiers that do not appear clearly on the order, online payments marked incorrectly, and staff not watching the order channel.
Assign a real person to own online orders during opening hours. A perfect checkout is still a bad system if nobody sees the order until thirty minutes later.
Final launch check
Before launch, place at least one pickup order and one delivery order from a logged-out mobile browser. Include a dish with modifiers and an item with an extra charge. Confirm the menu price, modifier price, tax where applicable, delivery fee, payment state, customer confirmation, restaurant notification, and final order details. Also test an unsupported delivery address and an out-of-stock item.
Conclusion
A restaurant ordering site works when the online order matches what the kitchen needs to prepare. Start with a simple WooCommerce flow, make the menu easy to scan, use Product Add-Ons only for real food choices, define pickup and delivery carefully, and test the complete order before advertising the site. Add restaurant-specific scheduling or operations tools only when the business actually needs them.
FAQs
Can WooCommerce be used for restaurant online ordering?
Yes. WooCommerce can handle menu products, cart, checkout, payments, pickup, delivery methods, and order management. Restaurants that need timed slots, table ordering, kitchen displays, drivers, or multi-location workflows may need a restaurant-specific extension.
Should a restaurant menu be a PDF or a web page?
A web-based menu is usually easier for customers to use on phones and easier for the restaurant to update. PDF menus can still be offered as a secondary download if needed.
How do I add toppings or extra cheese to restaurant products?
Use WooCommerce variations for simple fixed choices or a product-options plugin for flexible extras. This guide uses WooCommerce Product Add-Ons for paid and optional modifiers.
Can customers choose pickup instead of delivery?
Yes. WooCommerce includes Local Pickup as a shipping method. Configure it separately from delivery so the checkout clearly shows the customer’s fulfillment choice.
What if I need scheduled delivery times?
Use a restaurant ordering solution that supports the exact scheduling rules your operation needs. Do not promise precise time slots unless the plugin and kitchen workflow can enforce them reliably.
