• 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

Current premium extensions available:

Additional gateways to process credit card payments instead of just cash on delivery are available at www.wp-pizza.com

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 example
  • administration - widget
  • administration - categories
  • administration - menu item
  • administration - order settings (one of many option screens)



  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 you might have used them elsewhere.


General Faq’s

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


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

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



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!


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!

Oliver and Wp-Pizza Rocks

Normally when you asked for tech support from someone just selling a plug-in, maybe you will and maybe you won’t get support. Sometimes as you well know support can take days or weeks for the support technician to get back to even. And sometimes I’ll get back to you at all. I have to say that Oliver went above and beyond in my case. My site got hacked and I must’ve emailed back and forth with all over probably over a dozen times.
He got back to me, in a timely manner, was extremely helpful, and now everything is working properly again. I am super impressed by his professionalism and giving back to me. I would highly recommend anyone looking for a word press plug-in for a restaurant where you want to order online WP-Pizza and Oly Rocks!!

Read all 49 reviews

Contributors & Developers

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


Translate “WPPizza” into your language.

Interested in development?

Browse the code, check out the SVN repository, or subscribe to the development log by RSS.


* 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

* fix: Admin -> Customer “Avg. / Order” was wrongly calculated using number of items instead of number of orders as divider
* tweak: added postid parameter to ‘wppizza_filter_post_content_markup’ filter
* tweak: added ‘wppizza_filter_post_content’ filter
* tweak: removed some wppizza constants from being displayed in wppizza-> tools -> system info
25th July 2018

* fix: set categories in “WPPizza->Order Settings” Discount/Delivery exclusions (if any) were still lost on plugin updates
4th July 2018

* fix: making sure custom_css (wppizzza->layout) file gets (re)created if it does not (yet) exist – especially on plugin update.
4th July 2018

* fix: any set menu items and categories in “WPPizza->Order Settings” Discount/Delivery exclusions were lost on plugin updates
* fix: any custom css entered in WPPizza -> layout-> custom css got lost on plugin updates
* fix: privacy checkbox was always enabled on checkout even if privacy settings were not enabled
3rd July 2018

* Tweak: also use order of categories displayed in cart according to the category hierarchy set if category display is enabled in layout settings
* Tweak: INEXPLICABLY (as far as I am concerned) – WPML (v4+ but might apply to older WPML versions too) requires “Language filtering for AJAX operations” to be explicitly enabled/set for ajax calls to know what the current language is. 3.6.2 Adds a workaround to not to have to rely on this setting/option (appplicable to WPPizza only).
25th June 2018

* Fix: [wppizza single=x] shortcode did not allow for items to be added to cart
* Tweak: force an “Uncategorised” category if categories are supposed to be displayed (cart/orders) but an item was not assigned to any category
* DEV – Added: wppizza_gateways_inline_payment_details filter to allow gateways to add payment information directly into the order page
* DEV – Added: in conjunction with that above filter, added payment_details.php template and parameters into page.order.php and page.confirm-order.php
20th June 2018

* Fix: additional recipients set in email templates might have got lost on any plugin update
* Fix: possible error when WPML installed but without string translation activated
* Fix: not all shortcode attributes were used when re-polling orders using [wppizza_admin type=admin_orderhistory] shortcode
* Fix: not able to print orders that had been rejected (blank page)
* Fix: removed some – inconsequential – deprecated warnings when getting system info (wppizza->tools)
* Added (Internal/Dev): “anonymised” column (date) to orders table
* Added: allow to also remove item in minicart order details (if enabled)
* Added: privacy erase options (anonymise/delete/no_action) (requires wordpress 4.9.6)
* Added: privacy suggestion text (requires wordpress 4.9.6)
* Tweak: moved privacy functions to its own tab in WPPizza->Tools (requires wordpress 4.9.6 to do anything)
* Tweak: removed (and updated) old and unused payment_status ENUM values COD, OTHER, NOTAPPLICABLE, PENDING in favour of their applicable equivalents
* Tweak: bypass polling if not logged in or not having access when using [wppizza_admin type=admin_orderhistory] shortcode
* Tweak: added new order audio notifications (if enabled) when using [wppizza_admin type=admin_orderhistory] shortcode
* Tweak: made html template markup available in wppizza_on_orderstatus_change filter
* DEV – update/note: constant WPPIZZA_ENCRYPTION_KEY (introduced as a temporary solution for privacy integrations in ) can be removed again (if it was added to wp-config.php at all) as it has been superseeded by a more sensible way of doing things (keeping it won’t break things though)
15th June 2018
* fix: possible fatal error with php <=5.4
21st May 2018
* Dev – Tweak: Added uoKey (unique order key) made up of blog id and order id to output of wppizza_get_orders()
* Dev – Tweak: Removed under development and not yet for production license tools tab
17th May 2018

* Added – Privacy: options added to WPPizza->Settings->Privacy/GDPR. Please refer to the “help” screen on that page for more details (requires WP 4.9.6+)
* Added – Privacy: ’email’ column added to orders table to aid exporting data
* Added – Shortcode: [wppizza_admin type=”admin_orderhistory”] added to display compact order history in frontend (see https://docs.wp-pizza.com/shortcodes/?section=admin-orderhistory for attributes/details)
* Fix: some more possible phpnotices eliminated
* Fix: stop throwing/mailing false errors when the same ipn notifications of gateways get sent multiple times and an order cannot be found as it was already completed
* Fix: some custom statuses (if set) might not have been saved when updated for an order
* Fix: globally available function wppizza_is_current_businesday() was not working
* Fix: trying to include jquery ui spinner css stylesheet even if not set
* Fix: forcefully closing of shop (in WPPizza -> Opening Times) did not get applied in ajax requests
* Fix: (Multisite) if querying for all orders from all blogs in parent site’s “WPPizza -> Order History” might have resulted in error if different number of columns existed in order tables of the different blogs
* Tweak: added “ellipsis” css for massively long gaateway transaction ids with mouseover title in admin history
* Tweak: made the prettyphoto url a bit more generic and adding post tile
* Tweak: more seamless jquery toggle between transaction and order details when using user purchase history shortcode ( [wppizza type=’orderhistory’] )
* Tweak: added more orders info (no of orders . orders per page ) under pagination links when using user purchase history shortcode
* Tweak: make actual ID/Key for each order form input in “WPPizza -> Order Form” visible when hovering over “enabled” button
* Tweak: made admin labels filterable
* Tweak: removed “wppizza” post type from wordpress export option (as imports would only partially work) but could be reenabled with “wppizza_filter_cpt_args” filter (though cloning the entire site is currently the only sensible option.)
* Tweak: additional sanity check for admin subpage links to avoid namespace clashes with other plugins that do not prefix their admin page(s) variables
* Tweak: added some more filters per section to email / print templates that could be used if necessary
* Tweak: added ‘wppizza_filter_force_pickup_toggle_display filter’ to alwasy show pickup toggle, even if shop is closed (also bypasses js isOpen check alerts)
* Tweak: increased varchar in orders table that captures IP addresses to 50 for IPv4-mapped IPv6 (45 should be enough but let’s be conservative. it’s not used anywhere anyway)
* Dev – IMPORTANT: internal function ‘get_orders_orderhistory()’ HAS BEEN REMOVED due to too many inconsistencies. Use ‘wppizza_get_orders()’ instead. See https://docs.wp-pizza.com/developers/?section=function-wppizza_get_orders (you might need to tweak a few things)
* Dev – consistency: all dimensions of returned order result queries will now also always be arrays themselves (no more mix and match between array and objects)
* Dev – DEPRACATION NOTICE: fetch_order_details(), results_formatted() as well as simplyfy_orders() will also be removed soon in favour of using wppizza_get_orders() above
* Dev – IMPORTANT: do not use internal functions of the plugin unless they are documented as they may change or get removed at any time without notice.
* Under Development (no ETA yet): Allow any License Keys that might exist for different premium plugins to be entered in one dedicated page/tab instead a different tab per plugin
16th May 2018

* intentionally skipped

* fix: any newly entered or amended customer data on order page was not kept when changing quantities (if enabled)
* fix: ajax request to update cart ran 2 times when updating item quantity via input fields in cart/orderpage
13th March 2018

* tweak: minor admin js tweaks/simplifications
* tweak: update to plugin development helper functions
* tweak/update: making sure any GET variables send to gateways are trimmed of leading/trailing whitespaces
12th March 2018

* fix: wppizza_on_order_execute action hook only had customer details available with some gateways
* development: tweaked some of the (future use) plugin development functions
08th March 2018

* tweak: allow label of order formfield (“WPPizza->Order Form Settings”) to include html if type is set to “checkbox”
* added: “viewonly” shortcode attribute for menu item display, removing cart icon and add to cart functionality
* added: option to exclude delivery charges (if any) to see if minimum order value was reached
06th March 2018

* fix for php versions <=5.4: fatal error thrown Cant use function return value in write context
04th March 2018

* added: bulk delete of orders in admin history (provided user has that capabiity)
* tweak: some minor code tidy ups and improvements in plugin development helper functions
03rd March 2018

* added: action hook wppizza_on_email_sent to perhaps do something more when an email was sent
21st February 2018

* tweak: moved capture of any transaction details in db before sending any emails (to make those details available there when using mail filters)
* tweak: added formatted and raw order data as parameters to wppizza_filter_mail_headers and wppizza_filter_mail_attachments hooks
21st February 2018

* added: wppizza_order_reject function and payment_status “rejected” to orders table (might be useful in some cases/gateways)
* tweak: wrapped wppizza_on_order_execute hook into has_action call to truly restrict to completed orders only and to eliminate some overheads if not used
* tweak: minor tweak to admin css applied to contextual help screen
* tweak: allow min/max arguments to be passed on to wppizza_validate_int_only helper validation function
* added: a somewhat more versatile “wppizza_get_order_by_columns” helper function that can be used elsewhere (not used in plugin itself)
* fix: make sure gateway/transaction responses/details also get passed to wppizza_on_order_execute hook
* changed: convenience function “wppizza_telephone_country_codes” (added in 3.2.4) removed in favour of more versatile “wppizza_country_info”
20th February 2018

* added: globally available convenience functions “added wppizza_get_cart()” “wppizza_cart_summary()”
* added: a couple of css classes to order history screen elements
* added/fix: added missing filter wppizza_filter_db_column_data when submitting order
16th February 2018

* tweak: allow for shortcodes (and any other the_content filters for that matter) in menu item descriptions (enable in wppizza->layout->general)
6th February 2018

* fix: any custom opening times set in wppizza->openingtimes were duplicated on plugin update (simply delete the duplicates if you have any, though leaving them will not cause any problems either)
* fix: “Wppizza->Order Settings->Delivery->Exclude menu items from calculation” was broken in previous v3.x version. If you have any item added there, please simply save this page (“WPPizza->Order Settings”)once.
* fix: the wrong menu items were potentially displayed when using install option 2 (using templates to display mnu items) and menu items were in more than one category
* tweak: using more sensical “vertical-align: super” instead of -12px positioning for additives display to aid more consistency throughout different themes
* tweak: removed some legacy(v2.x) and now unused in v3.x localization strings
* tweak: added some more available info to error/admin email if email to shop fails
* added: wppizza_filter_gateways_payment_options introduced (see https://docs.wp-pizza.com/developers/?section=gateway-filter-frontend )
* in progress: several plugin development functions added – more to come. A skeleton plugin will be added to add-ons directory in due course.
31th January 2018

* added: convenience function “wppizza_telephone_country_codes” to get country phonenumbers prefixes
* tweak/fix: made guest/regsiter checkout radio inputs have distinct ids
* tweak: made sure fieldsets on order page are position:relative (as some themes might to globaly funny things)
* fix: delivery type (pickup/delivery) was not shown consistently in order history
16th January 2018

* fix: some more possible php notices eliminated
* removed: some old – and now wrong – v2 help documentation regarding print/email templates
* added: option to make javascript alerts stylable modal windows instead of browser native popups (wppizza->layout->miscellaneous)
3rd January 2018

* fix: typo fixed in 3.2.1 appeared 3 times actually so fixed the other 2 as well
19th December 2017

* fix: typo in wppizza_breadcrumbs() function introduced in 3.2 causing syntax error (with older versions of php)
19th December 2017

* fix: any closing times or custom opening times set in wppizza->opening times got lost on plugin update
* fix: “wppizza_filter_email_items_markup” filter was applied 2x so removed one of them
* fix: some more possible php notices eliminated
* tweak: orderhistory split action buttons array for more granulaity when using wppizza_filter_orderhistory_order_actions filters
* tweak: to account for display limitations of small screen devices, quantities of items in cart/orderpage were only shown for screensizes >420, this has now changed to be >300 as there still should be enough space available. Note: Instead of removing quantities below 300, the remove button is now being hidden instead however, as quantities can still be set to 0 – i.e removed – if required (always provided the theme accounts for responsiveness in the first place)
* tweak: made admin localization input fields a little bit bigger
* tweak: added js/ajax error identifiers to aid debugging in admin order history js
* tweak: access rights – allow admins to also delete menu items of other users
* tweak: access rights – only allow “admins” and “editors” to edit menu items created by other user roles – in line with standard wordpress behaviour. (Re-save “Wppizza-> Access rights -> Menu Items” for this to be applied for non-admin roles [1 time: off->save, on->save])
* tweak: more meaningful ajax error console.log entries (if any)
* tweak: stop and restart polling during changing order status in order history to decrease server load
* added: some more gateway helper functions
* added: make gateway objects filterable using wppizza_filter_gateway_object_{gw_ident} (to – for example – enable discounts instead of surcharges for a prepay gateway )
* added: dashboard widget, breakdown by gateways (if more than one)
* added: make admin dashboard widget filterable to only display selective parts of data if necessary
* added: wppizza_breadcrumbs() template function added to display breadcrumbs somewhere if required (for example in theme-wrapper.php if used – see there for arguments/usage)
17th December 2017

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/