Her Mutfak wanted orders to come through its own domain instead of a marketplace taking a cut of every one. The result is an ordering system on a WooCommerce core that handles meal-card payments, the kitchen screen, courier handoff and staff permissions in one place.
A WooCommerce-based online food ordering platform for Her Mutfak. It adds a custom WooCommerce payment gateway for Multinet meal cards, a kitchen panel where staff track orders live, a ZirveGo webhook integration that hands orders to the courier system, and role-based staff access that hides revenue data. The marketing site and the ordering system are deliberately separate: the main site is static HTML, the ordering system runs on WordPress/WooCommerce.
A restaurant's biggest problem with online ordering is usually not technical but economic: marketplace platforms take a commission on every order, and the customer data never reaches the restaurant. Her Mutfak wanted out of that loop.
The decision was to use WooCommerce as the core rather than write ordering software from scratch. Cart, stock, order status, tax and refunds are all mature in WooCommerce. What had to be written was the part the core does not know: meal cards, kitchen screens, couriers and shift staff.
The site was split in two. The menu and marketing side, hermutfak.com, is static HTML; the ordering side, siparis.hermutfak.com, runs on WordPress. Marketing pages therefore carry none of WordPress's weight, and the ordering system takes no risk every time a landing page changes.
In Turkey a large share of office workers pay for lunch with meal cards such as Multinet, Sodexo or Setcard. A restaurant ordering site that cannot accept them loses a significant part of its audience at the first step. None of these cards ship with WooCommerce.
So a custom WooCommerce payment gateway was written for Multinet. It extends WC_Payment_Gateway and manages this flow:
The last two points are the critical ones. The most common mistake in payment integrations is reading the parameters on the URL the provider redirects to and treating the order as paid. That URL passes through the customer's browser and can be edited. The correct behaviour is a separate server-to-server query on return to learn the real transaction state. That is how this flow was built.
The real problem starts after the order is placed. WooCommerce's admin order list was designed for an e-commerce warehouse, not for a kitchen worker standing at a screen with both hands full.
So a separate kitchen panel was built. Its design decisions came straight from watching the kitchen:
The real engineering in a panel like this is not on the data side; it is in keeping the screen readable during a busy service.
Once an order is ready it has to move to distribution. A webhook integration passes the order to the courier system when the WooCommerce order status reaches the relevant stage, handing delivery to a separate system.
The integration was written as its own plugin for maintainability: when the delivery provider changes or the contract ends, one plugin is disabled. Nothing else in the ordering system is touched.
Not everyone who opens the panel should see the same thing. Someone on shift needs to manage orders; they do not need daily revenue, sales reports or the full customer database.
So role-based limited staff access was set up, driven by predefined permission presets. A user in the staff role can run the order flow, while revenue and reporting screens are hidden for those roles. Because it sits on WordPress's own capability system, adding a new staff member is just assigning a role.
The overwhelming majority of food orders come from phones, often on mobile data. Performance here is not cosmetic — it is lost orders.
preload, so it starts fetching without waiting for CSS.Her Mutfak now takes orders on its own domain, with its own payment methods and its own customer data. The system is live and in active use.
The transferable lesson: when building a restaurant ordering system, writing software from scratch is rarely the right call. The right call is to take a mature core (WooCommerce) and custom-build only what that core does not know — meal cards, kitchen screens, couriers, shift staff. Maintenance stays small and the system can grow with the restaurant.
Once your order volume reaches a certain level, yes. Marketplace commission is deducted from every single order, while your own system is a one-off build with low ongoing cost — and the customer data and marketing consent stay with you. You do not have to leave the marketplace entirely; most restaurants run both.
As a core, yes. Cart, order statuses, payment infrastructure, tax and refunds all ship with it. What is missing is restaurant-specific: meal-card payments, the kitchen screen, courier handoff, service hours and shift permissions. Written as plugins, the result is both capable and maintainable.
Yes, but not with an off-the-shelf plugin — it requires a custom WooCommerce payment gateway built against the provider's own integration documentation. The merchant agreement and integration credentials are obtained by the business; the development work is wiring the payment flow correctly into the WooCommerce order lifecycle.
The WooCommerce order list is built for an e-commerce operation: filtering, search, bulk actions. A kitchen needs a screen that reads at a glance, flags late orders by colour and shows only today. One interface cannot serve both needs.