WPPizza – A Restaurant Plugin


  • Conceived for Pizza Delivery Businesses, but flexible enough to serve any restaurant type.

  • Maintain your restaurant menu online and accept cash on delivery orders.

  • Set categories, multiple prices per item and descriptions.

  • Multilingual Frontend (just update labels in admin settings page and/or widget as required). WPML compatible.

  • Multisite enabled

  • Keeps track of your online orders.

  • Shortcode enabled. (see complete shortcode list)

To see the plugin in action with different themes try it at demo.wp-pizza.com

If you wish to allow your customers to add additional ingredients to any given menu item, have a look at the premium “WPPizza Add Ingredients” extension

Premium extensions available:

Additional payment gateways to process credit card payments instead of just “Cash on Delivery”

Translations provided by:

  • Italien: Silvia Palandri
  • Hebrew: Yair10 [הלב בניית אתרים ]
  • Dutch: Jelmer
  • Spanish: Andrew Kurtis at WebHostingHub
  • German: Franz Rufnak, Witali Opfer

Many, many thanks guys and girls.

Note: As the plugin gets updated over time and has some other strings and features added, the translations above (and future ones) will probably have a few strings not yet translated. If you wish, feel free to provide any of those missing and I will update the translations accordingly.

If you want to contribute your own translation, feel free to send me your files and I will be more than happy to include them.

Demo Icons:

Please note that the icons used in the demo installation are iconarchive.com icons and not for commercial use.
If you do wish to use any icon from this set commercially, please follow this link to purchase it.


  • Frontend
  • Frontend (Different Theme) - minicart only
  • Frontend - Grid Layout
  • Frontend - Order Page
  • Frontend - Thank You Page
  • Frontend - Purchase History (registered user)
  • Admin - Menu items - quick edit
  • Admin - Global Settings (excerpt)
  • Admin - Order Settings (excerpt)
  • Admin - Opening Times
  • Admin - Additives
  • Admin - Layout (excerpt)
  • Admin - Localization (excerpt)
  • Admin - Registered customers
  • Admin - Tools
  • Admin - Tools (GDPR)
  • Admin - Access Rights
  • Admin - Order Form
  • Admin - Sales Reports
  • Admin - Widget



  1. Download the plugin and upload the entire wppizza folder to the /wp-content/plugins/ directory.
    Alternatively you can download and install WPPizza using the built in WordPress plugin installer.
  2. Activate the plugin through the ‘Plugins’ menu in WordPress.
  3. You will find all configuration and menu options in your administration sidebar

Things to do on first install

for consistency this document has now moved to the following location :
** I strongly encourage you to read it **


Please note:
Although all options, menu items and menu categories get deleted from the database along with the table that holds any orders you may have received, you will manually have to delete any additional pages (such as the order page for example) that have been created as i have no way of knowing if you are using this page elsewhere or have changed the content/name of it.
The same goes for the 3 example icons that come with this plugin as they might be in use elsewhere.


General Faq’s

for consistency and manageability the faq’s have been moved to https://docs.wp-pizza.com/faqs/


please refer to https://docs.wp-pizza.com/shortcodes/

How can I submit a bug, ask for help or request a new feature?


February 28, 2019
Our requirements were an elegant and fully customizable room service ordering system for our 5-star boutique hotel... and WP-Pizza delivered! 😉 The interface is super clean and offers our guests a great user experience. Support is amazing. Do not be deceived by the name, WP-Pizza is a very powerful and versatile tool for anyone selling anything where a seamless and great user experience is key. This is not Woocommerce's strong suit.
December 26, 2017
Yesterday i deliver my first customer website with wppizza and several addons: wppizza (Basic) and payd addons: wppizza-add-ingredients, wppizza-delivery-by-postcode, wppizza-gateway-paypal, wppizza-google-cloudprint and wppizza-pickup-prices. All addons working like a charm! not one did not do as expected and none have problems! And most of all, there was always the developer Oliver who offered help with any questions. Thanks Oliver!
November 18, 2017
This simply allows you to add an ordering system to a site. It's straight forward and offers about anything you could need. Great product! Thanks!
November 3, 2017
This plugin does what I need it to do on my website, great features like opening times. The support is amazing!
Read all 50 reviews

Contributors & Developers

“WPPizza – A Restaurant Plugin” is open source software. The following people have contributed to this plugin.



* Fix: A user could potentially select a disabled gateway
* Fix: Broken link in WPPizza->Tools -> System Info : Session Tests
* Fix: Missing pagination css class in WPPizza->Customers
* Tweak: Make number of customers per page (WPPizza->Customers) filterable
* Tweak: Added ‘order_status’ info to sales data array
* Tweak: Doubly Ensure ‘Rejected’ orders are not included in sales/reports data (just in case)
* Tweak: Eliminate some potential sales/reports data and size/additives php notices for updates from pre wppizza 3.x installs
3rd January 2020

* Fix: Reports Sales data should include all orders that have order items, even if total is zero (due to discounts for example)
* Tweak: Some meore detailed error descriptions in some places
* Tweak: Added .pot files
* Tweak: made default quantity input for item(s) in cart smaller when waiting for spinner input to finish loading
* Tweak: made order dates/times follow format in wordpress settings (in most places)
* Tweak: Allow for help screen if required in “Customers” admin page
* Tweak: Some admin css tweaks for small screen devices
* Tweak: Minor tweaks in admin order history javascripts (some status changes were not immediately reflected on the page)
* Tweak: Added SizesID (i.e “blogid.postid.taxonomy(category)id.[added-sizesid].sizeid”) to item array key in cart and orders for more “uniqueness” if required
20th December 2019

* Fix: CSS Spinner/Loading gif not found if wordpress installed in a subdirectory
* Fix: Some more possible php(7) notices/warnings eliminated
* Tweak: Eliminated some false positive error messages in any ipn notifications
* Tweak: Added ‘total_discounts’ as additional parameter to ordervars values
* Tweak: added htaccess to css and js directories to enable deflate and expiry (if supported by server)
* Tweak: Some inconsequential typos
* Updated: Bundled edd plugin updater class
7th December 2019

* Fix: WPML compatibility – additives displaying sortnumber instead of additives name (update to 3.10.3 fix)
15th October 2019

* Fix: WPML compatibility – additives displaying sortnumber instead of additives name
* Tweak: Adding class to tr element of category (if displayed) in cart/order
* Tweak: Minor css tweaks for additives display
11th October 2019

* Fix: Reports Range dropdown (WPPizza -> Reports) not working when changing selection with mouse
* Fix: (Plugin Compatibility) Ensure orders table does not get written to until reaching order page (if any)
* Tweak: Moved minimum order value for pickup (WPPizza -> Order Settings) into pickup section
* Tweak: Minor admin css tweak (WPPizza->Reports / WPPizza->Menu Items : Additives)
* Tweak: Minor frontend css tweak (making cart delete elements ‘td’ fit the delete button)
* Tweak: setting SCRIPT_DEBUG constant will now load unminified scripts (in line with regular WP behaviour)
* Tweak: If order/discount/menu item settings allow for a 0 value order to be submitted, always force COD gateway if total order value is zero (as cc gateways will not process 0 value orders)
* Tweak: Added more userfriendly reason id/string for checkout error 20002 (Checkout Prohibited)
* Tweak: Apply set delivery charges in “Free delivery” setting if “order value reaches” set to ‘n/a’ (extensions only)
* Added [Dev]: global wppizzaUpdateCart() js function to allow cart update called by 3rd party plugins
* Added [Dev]: some global session data retrieval helper functions,
29th September 2019

* Fix: Error in plugin dev helper functions (v3.10)
* Fix: Making sure orders mta table also gets truncated if truncating main order table in WPPizza->tools
* Fix: Payment Due could been shown as 0 in vertain circumstances when using “Credit Card on Delivery” gateway
* Tweaks: minor tweaks (adding some mor parameters that get returned) in wppizza_completed_businessdays function
19th August 2019

* Fix: Wrong comparison argument for order_date_before query in wppizza_get_orders function
* Fix: “Tips” – if any – were shown as input field on thank you page
* Fix: Possible wrong colspan count when displaying category in cart
* Fix: Wppizza taxonomies were missing in post edit screen if gutenberg editor was enabled
* Fix: Loopback errors in WP health check admin page (WP5.2+)
* Added: Allow for “read more” links/tags in post content (enable in WPPizza->Layout->General)
* Added: wppizza_admin_pagination() helper function
* Added: wppizza_delete_order() helper function
* Update: Improve responsiveness of default style for small screen devices
* Update: Some minor css tweaks
* Update: Chosen js/css library updated
* Tweak: Allow for display of featured image in quickedit
* Tweak: Using chosen js library for selects in admin
* Tweak: Allow to discern between Errors and Notices in admin email Errors and Error logs
* Tweak: Removed some unused files
* Tweak: Added title to title element in email/print html templates (to generate appropriate titles when saving as pdf’s for example)
* Tweak: Eliminated some more possible php notices
* Tweak: Some minor admin text string updates to aid clarification
* Tweak: Added 3rd (order) parameter to ‘wppizza_filter_template_markup’ filter
* Tweak: Added css classes to select/multiselects in admin
* Internal: Added html markup to return of admin_pagination() helper
* Internal: Various updates to plugin dev functions
13th August 2019

* Added: Allow for small thumbnails to be displayed on order pages (Layout->Menu Item Images->Thumbnail on checkout)
* Fix: Category display (if enabled in WPPizza->Layout) not shown after updating item quantities on checkout page.
5th May 2019

* Fix: Categories displayed multiple times above items in the same category in Emails/Order History (if enabled in WPPizza->Layout).
* Fix: Bulk delete of orders (Order History) might have deleted more than selected
* Fix: possible php notices in non-multisite setup in some edge cases
* Tweak: made edit/preview etc icons in admin -> templates more easily fiterable adding ‘wppizza_filter_template_icons_emails’, ‘wppizza_filter_template_icons_print’ filters
* Tweak: passing on full order details (incl localization etc) as additional 4th parameter to order execute action hook
3rd May 2019

* Tweak: Minor admin css additions
* Fix: missing category id when using add_item_to_cart button shortcode
* Fix: Showing categories in cart (if enabled) not working correctly in cart used on users purchase history page
* Fix/Tweak: unnecessarily getting results of more than one order for email/print template previews
16th March 2019

* Fix: some helper functions passed on fixed instead of dynamic parameters
* Addedd: some globally available helper functions to retrieve selected email/print template markup
09th March 2019

* Fix: wrong column count in cart when displaying category headers
* Tweak: more reliable way of determining REQUEST_SCHEME for different servers
* Tweak: Minor spelling and information text highlight tweaks
* Added: Allow for ‘category’ element in elements attribute shortcode
* Added: added ‘wppizza_filter_pages_purchasehistory_after_orders’ and ‘wppizza_filter_pages_purchasehistory_before_orders’ filters to be used in users purchase history
* Added: ‘wppizza_skeleton_template_emails’ and ‘wppizza_skeleton_template_print’ to get selected templates including header/footer with replaceable content
* Dev-Change: Admin->WPPizza->Customers , change of filter parameters for consitancy and future ease of use and flexibility. If you are using any wppizza filters that alter the customer rows/columns on this page in any way, get in contact. (Also some minor html markup adjustments)
* Dev: Added globally available ‘wppizza_get_blog_dateformat’ function
* Dev: Some Tweaks (possible phpnotices, ensuring any plugin version numbers get updated in db) in plugin dev helper functions
27th February 2019

* Fix: Orderpage widget – if placed on pages that are not set to be the orderpage – did not fully work
* Tweak: set .wppizza-ignore, .ignore, :hidden, :disabled as validator ignore rules
* Tweak: set default template styles to be html on new installs
* Tweak: added report_range from/to to reports dataset array
21st February 2019

* Tested upto WP 5.1
* New: Detailed (per order) Report Export (filterable columns/data)
* New: Easier addition of custom export/report data (see documentation)
* Fix: Cart details were displayed out of view when minicart displayed at bottom of page
* Fix: Admin Dashboard Widget not always displaying accurate details for todays orders (depending on timezones set)
* Fix: Some more possible edge cases php notices/warning eliminated (checking for currentbusinessday, user_level)
* Fix: Some user metadata of the plugin might have remained on uninstall
* Fix: Not all 3rd Party, EDD enabled plugins, allowed activation of license
* Tweak: Note added in WPPizza->localization that some gateways might truncate the textstring passed on as order description
* Tweak: Minor output formatting adjustments for multi checkboxes in WPPiza->Gateways administration
* Tweak: Removed unused “class.wppizza.filter.orders.php”
* Dev/New: Added wppizza_filter_email_settings and wppizza_filter_mail_recipients filter hooks
* Dev/New: Added convenience function wppizza_get_active_gateways()
* Dev/New: added ‘wppizza_on_cart_update’ action hook when update cart was triggered (runs before calculating cart values)
* Dev/New: Added some more globally available helper/validation functions
* Dev/Tweak: Using whole URL when determining if admin shortcode exists on page using url_to_postid
* Dev: Allow globally available wppizza_is_orderpage/wppizza_is_checkout functions to determine result even before post object is available
* Dev: Some housekeeping (renaming of internally used filter functions (filter_send_emails)
* Dev: Removed superflous parameters passsed to email and template functions
* Dev: Removed all instances of fetch_order_details() function (deprecated since 3.5) in favour of get_orders() for more consistency throughout and eliminate a couple unneeded db queries
19th February 2019

* Tested upto WP 5.0.3
* Fix: eliminated some more possible php notices
* Added/Tweak: Allow reset of default templates (WPPizza->Tools)
* DEV – Tweak: Adding 2 more additional parameters to filters that return boxes in reports page
* DEV – Added: filterable (‘wppizza_filter_session_add_item_to_cart’) “custom_data” key for each order item when adding item to cart and saved to db when order is submitted.
09th January 2019

* Fix: eliminated some possible php notices
* Fix/Teeak: reduced a couple of varchars db columns from a somewhat needlessly excessive 255 to 190 chars to allow install even with very restrictive/old db setups (avoiding: “Index column size too large. The maximum column size is 767 bytes.” errors)
06th January 2019

* Fix: email was not always prefilled on orderpage (if prefill enabled and logged in )
* Fix: php notice if user was deleteed from table but order still exists
* Fix: removed double surrounding brackets when using [wppizza type=additives] shortcode
* Added: shortcode ‘notags’ attribute to strip menu item content of all tags
* Added: shortcode ‘price_id’ attribute added with type=’single’ to only display specific sizes
* Dev – Added: wppizza_get_orders() added more order_id query options/clauses (order_id_lt, order_id_lte, order_id_gt, order_id_gte, order_id_in)
* Dev – Added: wppizza_get_orders() added $args[‘sort’][‘sortorder’] attribute
* Dev – Added: wppizza_delete_order_meta_by_key and wppizza_get_order_id_by_meta_key functions
* Dev – Added: filter ‘wppizza_filter_shortcode_registered_styles’
* Dev – Tweak: style and post_id paramters to wppizza_filter_post_arcticle_class
* Dev – Tweak: added some dedicated filters on order page after each element for easier markup manipulation (‘wppizza_filter_orderpage_before_login_form’, ‘ …_before_orderform’, ‘…_after_order_details’, ‘…_after_personal_details’, ‘…_after_payment_details’, ‘…_after_orderform’)
21st December 2018

* Fix: sanity “class_exist” check added when determining if a gateway support refunds as it might cause fatal errors if an installed gateway was subsequently de-activated
2nd December 2018

* Tweak: added current page/post id to wppizza js localized parameters
* Tweak: allow for 0 in orders meta table order_id to store parameters unrelated to any specific order id
* Added: (WP 5+ only) Disable Gutenberg editor by default (for now) for WPPizza Menu Items (but can be enabled in WPPizza->Settings->General)
* Tweak: made WPPizza register_post_type ‘supports’ arguments an indexed array
* Fix: wppizza_menu-[termslug] and wppizza_menu-term-[termid] classes always had current term missing (if WP version < 5 only it seems)
* Tweak: Added minicart position (top/bottom) option
* Fix: some possible ‘illegal offset size’ warning eliminated in class.wppizza.sales_data.php
* Fix: using ‘WPPizza -> Tools -> Maintenance : Update order table’ to create possibly missing db tables did not create the correct table prefixes
* Fix: inclusion of order parameter to indicate if a selected gateway for an order supports refunds (introduced in 3.8) was wrong / did not work
27th November 2018

* Fix: using shortcode [wppizza type=’orderhistory’] on a page with any other shortcode before resulted in not loading validation functions
2nd November 2018

* Added: wppizza_menu-[termslug] and wppizza_menu-term-[termid] classes to article element for all terms an item belongs to
* Added: shortcode to display dashboard widget in frontend [wppizza_admin type=’admin_dashboard_widget’]
* Added: frontend templates for confirmed (page.confirmed.php), refunded (page.refunded.php), rejected (page.rejected.php) orders
* Tweak: sanitised grid.css parameters to (perhaps) eliminate false positives some security plugins might throw regarding xss vulnerability
* Fix: & not decoded in userdata in emails and subject lines
* Fix: typo in get_orders function in class.wppizza.db.php ($no_argumens_passed -> $no_arguments_passed)
* Fix: value of formatted orders ‘payment_method’ changed to cod | prepaid (instead of using changeable value_formatted)
* Fix: various bugs in (3rd Party) plugin helper functions (suboption checkboxes were not allowed to be all de-selected again for example)
* Dev – Added: wppizza_orders_meta table and associated function, query options and hooks to allow arbitrary data to be stored with and retrieved for an order (for 3rd party plugins)
* Dev – Added: formatted orders parameters now include if gateway used supports refunds
* Dev – Added: wppizza_execute_update_order_to_captured, wppizza_execute_update_order_to_unconfirmed, wppizza_execute_update_order_to_confirmed filter hooks to allow for interception of order execution
* Dev – Tweak: id in order table now “BIGINT(20) UNSIGNED” instead of “INT(10)”
* Dev – Tweak: dedicated class to return sales data (as array)
* Dev – Tweak: Allow for additional payment status ‘CONFIRMED’ to be queried when getting orders
* Dev – Deprecated: disabled (to be removed) class.wppizza.filter.orders.php as it’s not in use anywhere
24th October 2018

* Tweak: made default plaintext email linelength 70 characters (from 74) to try to acommodate some more small screen device email clients
* Fix: Missing Parameters when using “WPPizza -> Tools -> Maintenance -> Update order table”
* Fix: User registration emails (when registering account at checkout) to admin and user might contain order details instead of registration details if using plaintext wppizza email templates
* Fix: phpnotice of undefined AltBody removed
20th September 2018

* Fix: wppizza smtp settings – if enabled – were not always applied
* Fix: added missing “personal information” and “order details” localization strings in use on “thank you” page that erroneously used strings reserved for confirmation page
* Added: class “wppizza-totals-no-items” |”wppizza-totals-has-items” to minicart parent div if (no) item in cart
* Added: “count_only” attribute for [wppizza type=’totals’] shortcode
* Added: set of filters to enable customisation of default install sizes/categories/items/prices/additives (wppizza_filter_install_default_sizes, wppizza_filter_install_default_additives, wppizza_filter_install_default_categories, wppizza_filter_install_default_items)
* Tweak: on new installations default pickup toggle to be enabled on order page too (as opposed to just under cart)
* Tweak: added SERVER vars to some potential error messages to aid debugging
* Tweak: added formatted order parameter to ‘wppizza_filter_email_subject’ filter
* Tweak: display full path of all customised wppizza templates in wppizza->tools->system info (if any)
* Tweak: added wppizza custom header to emails send by wppizza for identificationa and debug purposes and to more reliably use smtp for wppizza mails only
* Tweak: allow gateway classnames to have underscores after ‘WPPIZZA_GATEWAY
‘ Prefix
* Dev/Tweak: added generic – empty – wppizza-submit-error div right before pay buttons to allow custom js to write errors into if required
* Dev/Tweak: added ‘PAYMENT_PENDING’ db payment_status column for payment methods that perhaps only pay hours or even days later
* Dev: removed superflous argument from static wppizza_selected_gateway function
* Dev: several action, filter hooks and helper functions added to allow for inline payment gateway development
28th August 2018

3.2 – 3.6.6
* changelogs for versions 3.2 to 3.6.6 moved to /wppizza/changelogs/

3.0 – 3.1.7
* changelogs for versions 3.0 to 3.1.7 moved to /wppizza/changelogs/

1.0 –
* changelogs for versions up to 3.0 can be found in /wppizza/changelogs/