WooCommerce Phone Orders & Manual Orders WooCommerce Phone Orders & Manual Orders

Need to way to more easily create phone orders, or manually add new orders?

WooCommerce Phone Orders & Manual Orders lets you do that, quick and easy. Use the smart search box to search for products by name or SKU, click to add them to the order, select an customer or add a new customer, choose the shipping method if shipping is required, select a payment method, enter the payment details, and place the order. You’re done.

For selecting customers, you can add new orders for a “Guest” shopper ( shoppers that don’t already have, or don’t need, a user account on your site ), or optionally add a new customer and register a user account at the time the order is placed.

For selecting products to add to the cart, the plugin works for simple, variable, grouped products, composite products, bundled products, subscription products, and many others. And for product pricing, WooCommerce Phone Orders & Manual Orders works with our Dynamic Discounts, Wholesale Pricing, Tiered Pricing, Checkout Fields Editor Pro, Donations Pro, Gift Certificates Pro, and many more. ( Many of our other plugins are also supported, feel free to contact us to ask about support specific features ).

For highly specialized products that require extra data input or selections when ordering, the plugin lets you do that too. So it works great for products that require custom input from forms created by our Product Add-on Forms plugin, or other third party plugins such as Gravity Forms, and many others.

You can place orders on hold and resume processing the order at a later time. And you can load any existing order and use it as a starting point for a new order, which is great if you have customers that routinely place orders for the same items.

You can also apply coupons, if you want to, when placing orders for your customers.

You can optionally manually adjust product prices for most normal types of products on the fly when you want to ( note that this is not shown in the video demo ).

You can optionally add arbitrary products to an order even when those products don’t exist in your store catalog.

And, you can optionally set a custom shipping price for the order ( note that this is not shown in the video demo ).

Add cart fees using any label and fee amount that you need.

Works with most payment gateways, such as Check Payments, Bank Transfers, PayPal, Stripe, Authorize.net, FirstData, Simplify Commerce, and more than a hundred others.

Works with all your shipping gateways, including USPS, Fedex, UPS, Canada Post, Australia Post, our Table Rate Shipping Pro, and many more!

Need to ship orders to multiple address? Use our Ship to Multiple Addresses extension.

See the Screenshot tab above to view images of the simple settings and an example of what the manual order entry page looks like.


Compatibility: WooCommerce 4.0 or newer

Latest version: 3.4

Comes with great support via email and phone!



Woocommerce Phone Orders & Manual Orders pageWoocommerce Phone Orders & Manual Orders - Add arbitrary productWoocommerce Phone Orders & Manual Orders - Settings

We keep all of our software up to date with the latest versions of WooCommerce and WordPress.

If you don't see any recent changes below it's because none have become necessary!

Version 3.4 - March 25, 2024

	Added new filter "phone_manual_order_product_search" to allow 3rd party code to perform the product search
	Added new action hook that runs before a product search
	Added CSS to one_page_checkout.css to prevent the Elementor side cart popup from displaying on the manual/phone order page
	Add tweak to avoid processing the shortcode in the WP admin area when editing a page that contains the shortcode

Version 3.3.3 - October 2, 2023

	Restructed the workaround added in v3.3.2 to operate in a different way

Version 3.3.2 - August 15, 2023

	Added workaround to load the thank you page template file after placing an order, avoids thank you page conflict starting with WC 7.8.1

Version 3.3.1 - July 11, 2023

	Adjust hook for declaring HPOS compatibility

Version 3.3 - June 14, 2023

	WooCommerce 7.8 compatibility
	PHP 8.1 compatibility
	High Performance Order Storage (HPOS) compatibility
Version 3.2.6 - February 16, 2023

	Save order after updating meta data with clerk user ID

Version 3.2.5 - January 4, 2022

	Remove 'schema' arg from API rest route registration, it's not necessary.

Version 3.2.4 - October 22, 2022

	Unset "is_vat_exempt" in session after saving the order so that the next order is not automatically set to exempt

	Use wp_localize_script() to inject opc-script JS vars into the ordering page.
	In the items table template change $the_price = $_product->get_price( 'edit' ) to $the_price = $_product->get_price() to get role based prices for display in the table
	Reverted changes in v3.2.3 related to Avatax
	Update function calls to use CRUD methods for order data
	Ensure Booster "Order Renumeration" is enable before adding related args to order queries when searching for orders to load
	WooCommerce 7.0 compatibility
Version 3.2.3 - August 16, 2022

	When creating the order during checkout do not calculate totals if Avatax has already validated the customer's address, the totals are already correct
	Updated deprecated call to get_product_from_item in the arbitrary products class file
	Use $order->get_items( 'line_item' ) instead of $order->get_items() in the arbitrary products class file
	Do not switch users to a customer account when applying a coupon (wc-ajax="apply_coupon") if not customer is set
Version 3.2.2 - July 18, 2022

	Revert change to billing template made in v3.2.1

Version 3.2.1 - July 8, 2022

	Added support for Learndash LMS "course" products so they can be directly added to an order
	Updated process for creating a user account when placing an order related to sites that do not allow guest checkout
	Updated billing template to only show "Create account" checkbox if guest checkout is enabled in WooCommerce
	For arbitrary product deletion time tracking change current_time( 'timestamp', true ) to time() which might be more reliable and accurate
	Refactored the arbitrary product deletion code to use wc_get_products()

Version 3.2 - March 29, 2022

	Update JS processing for the "tax exempt" checkbox to handle conditions where prices are displayed "including tax" in the shop or cart
	Added filter "ign_opc_maybe_set_user_at_shutdown" to allow overriding user switch at PHP shutdown

Version 3.1.41 - February 28, 2022

	Do not automatically populate price input, only set a value for the field's HTML if someone entered an amount into the field
	Add help text to clarify that pricing edits should be entered without tax 
	Format altered price or sale price display using WooCommerce decimal settings

Version 3.1.40 - January 19, 2022

	Updated items table template to get wholesale price if the user is a wholesale buyer (via IgniteWoo's Wholesale Pro Suite)
	Show product prices without tax in the list of items in the order, this helps avoid double tax in the order review totals
	Updated invoice payment gateway to display purchase order number when viewing an order in the admin area
	Switch to logged in user on the order entry page before calling do_action on "woocommerce_checkout_update_order_review" then switch back to customer, fixes 403 error on various sites
	Move cron action that deletes arbitrary products into the main class file so the "register_activation_hook" runs as expected.
	Replace deprecated is_ajax() function with wp_doing_ajax()
	Added semi colon to inline Javascript to prevent parse errors on some browsers
	Do not set customer's tax exempt flag to false if the order form checkbox is unchecked because exemption is false by default, this allows other plugins to handle exemption 

Version 3.1.39 - November 16, 2021

	Added a new API to allow loading the order form page from an authorized remote system. See the documentation for information.	
	Added new filters "ignitewoo_manual_phone_orders_fields" and "ignitewoo_manual_phone_orders_fields" to insert additional billing/shipping/other fields - works the same as the WC filter "woocommerce_checkout_fields", except that it only triggers on the phone/manual order page
	Added billing company name to customer search results
Version 3.1.38 - June 18, 2021

	Do not suppress filters when searching products, this allows WPML to narrow the search to the language in use
	Disable action for "woocommerce_create_order" that called "maybe_alter_order_status" function, inteferes with order status in edge cases when a card payment fails

Version 3.1.37 - May 11, 2021

	Added support for Super Coupons' "auto add coupon" feature

Version 3.1.36 - April 27, 2021

	Do not run additional order search query if no sequential order number plugins are active on the site

Version 3.1.35 - March 29, 2021

	Corrected the order search query where billing first and last name parameters were inadvertantly removed in v3.1.34
Version 3.1.34 - March 16, 2021

	Restructured the order query for loading an order to improve speed
	Adjusted items template to properly detect min/max/increment settings from IgniteWoo's holesale Pro Suite when adding multiple products to an order at the same time

Version 3.1.33 - March 3, 2021

	Ensure removing items from the order does not result in a 400 error

Version 3.1.32 - March 2, 2021

	Change deprecated JS code .size() to .length() 
	Changed the order in which various sequential order number plugins are looked for, avoids conflict with Booster for WC
	Avoid resetting the 'meta_query' array when querying for orders when Sequential Order Numbers is in use on the site
	Updated JS code to take control of the "apply coupon" form so that user context can be switched when necessary
	WooCommerce 5.0 compatibility 
Version 3.1.31 - December 8, 2020

	When searching to load an existing order use the order_id when populating a list of found orders
	Get original order ID when loading an order with a custom ID or sequential ID

Version 3.1.30 - September 18, 2020

	Ensure payment gateways load early enough. Helps with enqueuing requires gateway Javascript (Stripe, etc)

Version 3.1.29 - September 16, 2020

	New feature: Purchase order payment gateway for manual/phone orders
	Remove HTML from price display in search results, removal required due to changes in SelectWoo

Version 3.1.28 - September 15, 2020

	Revert switch to Selectize to avoid payment gateway credit card form problems with fields not displaying

	Enqueue WC credit cart script along with jQuery payment script

Version 3.1.27 - September 9, 2020

	Do not dequeue Select2 or SelectWoo, they might be needed by other checkout related plugins

Version 3.1.26 - September 9, 2020

	Replace the use of Select2.js with Selectize.js
	Switch user when WC checks coupon validatity, helps with coupons assigned to specific users.
	Switch user before WC calculates totals, helps with 3rd party pricing tools

Version 3.1.25 - August 19, 2020

	Ensure "load and overwrite" works correctly
	WC 4.4.x compatibility testing

Version 3.1.24 - August 14, 2020

	Adjusted checkout code to so the order page to always allows a different shipping address even if WC is set to force shipping addresses to be the billing address
	Adjusted billing/shipping field verification to ensure all fields are validated if a field is required

Version 3.1.23 - August 7, 2020

	Ensure that searching for a user by ID number works properly
	Ensure that searching by company name works properly

Version 3.1.22 - July 17, 2020

	Correct the empty price checking in the order items table template
	Adjust compatibility for 3rd party sequential order number plugins

Version 3.1.21 - July 15, 2020

	Allow custom price to be set to zero
	Ensure custom price field contains the product's current cart price

Version 3.1.20 - July 10, 2020

	Ensure payment gateways are loaded during startup so that script load properly

Version 3.1.19 - July 1, 2020

	Convert JS ign_opc_do_ajax() function into Promise for chaining ajax
	Ensure that the items list table refreshes after changing quantities or prices
	Remove deprecated property access and deprecate customer billing address function calls
	Added filter for woocommerce_get_cart_item_from_session to set altered price, helps with Wholesale Pro Suite to override wholesale prices

Version 3.1.18 - June 18, 2020

	Added cart item key to the table rows in the items table template file
	Send cart item key when updating the line items in the order to ensure the correct product is detected

Version 3.1.17 - May 1, 2020

	Don't manually init payment gateways if navigating pages in the admin area
	Remove Javascript Ajax for loading an existing order, use form submit POST method instead, help load address info in guest orders

Version 3.1.16 - April 22, 2020

	Updated price processing for wholesale customers when using Wholesale Pro Suite
	Updated processing of overriding a product price

Version 3.1.15 - March 17, 2020

	Ensure user context is checked properly, helps with Ajax requests to search for products

Version 3.1.14 - March 11, 2020

	Updated to support WC 4.0

Version 3.1.13 - March 3, 2020

	When loading an order allow option to load coupons associated with the order

Version 3.1.12 - December 20, 2019

	Added fields for tax class and tax status to the "add arbitrary product" form 
Version 3.1.11 - July 10, 2019

	Better support for bundled products in relation to changing quantities and prices - all items are now references by cart item ID
	Add filter to prevent WC Google Analytics Pro plugin from injecting JS code into the phone/manual order page. 
	Updated "search company names" feature

	Adjusted order search for sites using Sequential Orrder Numbers
	Remove variation if parent variable product is not published
Version 3.1.10 - June 24, 2019

	Allow zero price for arbitrary products
	Ensure payment instructions (for the check payment gateway, etc) do not appear twice. Only initialize WC payment gateways if they are not set yet.
	Ensure tax exempt checkbox settings carries over when checked, after a customer is selected and added to the order 
	Make customer search work based on 2 character minimum instead of 3
	Updated order items template to show price change box (if enabled) when the price is zero (0).
	Added CSS styles into the billing field template (inline styles) to ensure the state field boxes for billing/shipping remain at 100% width
	Fixed default country setting so that if the country has no states/provinces/counties then default to "*"
	Do not default to "US" / "TX" if no default country set yet
	Added new column to the list of orders in the admin area that shows if the order was placed with via phone/manual order and if so which user placed it (column is labeled "Via" by default, changeable by a filter)
	Added new setting to enable searching by company name. This is optional, on sites with a huge number of customers the search might be very slow.
	Added new setting to enable showing the order date and/or the order total in the results when searching for an existing order
	Always enqueue WP dashicons for help tip display
	Prevent the page from scrolling to the top after Ajax for quantity or price change
	Ensure product price in the items table is not crossed out unless the price is discounted or changed

Version 3.1.9 - May 3, 2019

	Remove the previously added "company" search capability, causes significant performance problems on some sites. To be re-implemented in a future version.

Version 3.1.8 - April 25, 2019

	Ensure payment gateways are always intialized when the order page loads
	Improved existing order search speed by ~300%
Version 3.1.7 - April 23, 2019

	Search company name when searching for a customer - WC 3.x and newer
	Added setting to configure the ordering of categories
	in the product category dropdown list (by name, term order, or ID)
	Changed product category dropdown list to be hierarchical
	Set customer ID before saving the customer account (even though the account exists already) to avoid a rare edge case where WC may get confused as to the actual customer ID number in the customer object.
	Run a hook for "template_redirect" early to see if the order page is being loaded and if so remove all other actions for that hook to prevent 3rd party plugins from intercepting and redirecting away from the page
	Changed items table template to call wc_get_price_including_tax() or wc_get_price_excluding_tax() directly instead of running it through a WC filter

Version 3.1.6 - March 11, 2019

	When loading an order store the order ID in the user session so that the order notes can be loaded if any exist

Version 3.1.5 - February 5, 2019

	Add the customer's note to the order form when loading existing orders, if a note exists in the order
	Adjusted the CSS for the product search to allow it to expand when more than one product is selected from the results list
	Ensure that any products in the order have have a price of zero do not display "Product has no price, cannot be purchased"
	Added new setting for sites that use an extentions to enforce min/max/step/increment rules for quantity input fields, when this new setting is enabled the rules are enforced, otherwise they are not.
	Adjust the items table template to better handle decimal and thousands separators for the hidden price fields

Version 3.1.4 - January 8, 2019

	Updated the do_action() call to "woocommerce_after_checkout_validation" to pass a second parameter for errors
	Correct the new user creation to ensure that it always writes the new user's address info into the account when necessary

Version 3.1.3 - January 4, 2019

	For WC 3.5.x - ensure billing address becomes the shipping address if the cart needs shipping and "Ship to a different address" is not selected at checkout
	Removed the hooked "wc_ajax_checkout" and replace with the correct action in this plugin, helps on some sites that use the "wc-ajax" endpoint
	Return from process_customer() without processing if the order is being placed as a guest order and Create Account is not selected for the order.

Version 3.1.2 - January 3, 2019

	Adjusted the insertion for the "configure" product window so that it isn't removed after its first use 
	Adjusted the code so that when an item is updated (qty or price change) and it's already in the cart then leave it and update the properties
	Adjust the items table template show show the price if it is altered

Version 3.1.1 - December 31, 2018

	Switch user context when checking if the custom payment gateways should be loaded

Version 3.1 - December 7, 2018

	Restructured class files and directories, removed deprecated code
	Changed the way user switching is handled to provide better support for 3rd party plugins
	Changed the start up timing for user switching to provide better support for payment gateways that use stored cards for customers
	Removed prettyPhoto JS script in favor of the "Simple Popup" already included in the plugin JS code
	Added new filter "ignitewoo_opc_json_search_found_customers" to filter search for customers
	Added new filter "ignitewoo_opc_search_post_types" to filter search for products by post type (default = product, product_variation)
	Added new filter "ignitewoo_opc_search_post_statuses" to filter search for products by post status (default = publish, private)
	Updated all references to the deprecated "posted" property in the checkout routines
	Minor CSS adjustments for button sizes and alignments, box styling, and price input field
	Adjusted account creation to avoid overwritting logged-in user details
	Ensure shipping fields are empty if no customer is assigned to the order when the page page loads
	Fixed Javascript conflict with Shipping Zones in the admin area that causes zones to not display

Version 3.0.39 - December 10, 2018

	Temporarily re-added prettyPhoto for use the Configure Product popup box

Version 3.0.38 - December 5, 2018

	Refined SQL query for finding the manual order page URL for the admin menu
	Removed unnecessary prettyPhoto and Chosen scripts
	Removed the cart.js script and added the coupon functions to ignitewoo-opc.js, helps avoid shipping selection not staying selected
	Removed the "ign_compat" functions file, no longer necessary

Version 3.0.37 - November 12, 2018

	Added span wrapper around the text "Load and Overwrite" in the template file so that it can be hidden with custom CSS

	Pass the quantity when applying the filter for add_cart_item_data

Version 3.0.36 - October 25, 2018

	Adjusted JS code so that all functions are contained within a single "document ready" function
	Unhook the update_shipping_method binding in the WC cart script since it causes timing issues when used in conjunction with this plugin

Version 3.0.35 - October 14, 2018

	Ensure "validate_fields" method is called if the chosen payment gateway has that method available

Version 3.0.34 - September 28, 2018

	Ensure cart script is enqueued, necessary to remove items from the order

Version 3.0.33 - September 25, 2018

	Ensure checkout script is enqueued.
Version 3.0.32 - September 24, 2018

	Added filter to allow 3rd party software to intercept order searches
	Pass the order object to the woocommerce_checkout_order_processed filter call

Version 3.0.31 - September 13, 2018

	Do not enqueue the cart script for WC 3.2 and newer, no longer necessary. This corrects and issue where sometimes the selected shipping method didn't always stay selected.

Version 3.0.30 - September 4, 2018

	Ensure allowed users (based on role or user account) that are not admins or shop managers can search for customers to add to an order

Version 3.0.29 - September 3, 2018

	Declare a global variable in a class method to prevent a fatal error 
	Ensure proper user context during the "update_order_review" process to avoid an ajax security error.

Version 3.0.28 - August 24, 2018

	Rename the "quantity" parameter to "qty" to avoid conflicts with sites that use "Quantity" as a variable product attribute
	Ensure altered prices are only returned when viewing the phone/manual order page
	Ensure correct user context when writing the clerk's name into the order

Version 3.0.27 - August 17, 2018

	Ensure the code is running the OPC user's context when localizing scripts to ensure the nonce is correct for the user

Version 3.0.26 - June 19, 2018

	Added experimental full page view (see the new setting)
	Corrected an issue where an invoice isn't sent if that option is checked for the Invoice Payment gateway at checkout

Version 3.0.25 - June 16, 2018

	Remove thousands separator in add_item_to_cart() to avoid number truncation problems in some versions of PHP that occure when a comma is present in a floating point number

Version 3.0.24 - May 31, 2018

	Change WC version check from 3.1 to 3.2 and lower when creating an order for WC 3.x, this stops 500 errors when creating a new order on WC 3.0.x through 3.1.x

Version 3.0.23 - May 30, 2018

	Attempt to allow payment gateways to retrieve cards stored for a customer by setting the proper customer ID during the retrieval of gateways by WC.

Version 3.0.22 - May 24, 2018

	Tweaked user context switching to always show correct prices in the order review and to correct invalid checkout nonce due to wrong user context introduced with WC 3.4.

Version 3.0.21 - May 22, 2018

	Updated to support the new checkout nonce field in WC 3.4

Version 3.0.20 - May 17, 2018

	Backward compatibility tweak for sites running PHP 5.3.x

Version 3.0.19 - May 4, 2018

	Added backward compatibility when saving orders for WooCommerce version 3.0.x but less than 3.1
	Ensure customer info is populated from the order data if the customer is a guest (no user account exists)

Version 3.0.18 - April 25, 2018

	Attempt to cause is_checkout() to return true during order review Ajax requests
	Ensure user context is set to the logged in user when the custom shipping cost gateway is loaded

Version 3.0.17 - April 23, 2018

	Adjusted JS to find specfic table scrope for setting the opc_price value, prevents incorrect pricing calculations

Version 3.0.16 - April 3, 2018

	Convert attribute value to array if it is an object

Version 3.0.15 - April 2, 2018

	Modified the JS tied to the "Update cart totals" button to get price changes from the newer price edit field

Version 3.0.14 - March 29, 2018

	In the items table template ensure that "get_attributes" returns an array otherwise set the var to an empty array. 

Version 3.0.13 - March 29, 2018

	Ensure variation ID is sent in Ajax when removing a cart item
	Send cart item key with requests to change quantities and prices, help find the exact item in the cart in the event other software (Product Bundles, etc) have the same item in the cart in a package or bundle etc.

Version 3.0.12 - March 19, 2018

	Updated the items template to address deprecated functions in WC 3.3.x

	Added a time parameter to the plugin's JS file enqueuing to ensure the latest version is always loaded

Version 3.0.11 - March 6, 2018

	Corrected issue with variation attributes not being detected if the attribute is part of the attribute taxonomy

Version 3.0.10 - February 15, 2018

	Corrected user context when getting the selected shipping method, inadvertantly flipped to wrong user in v3.0.9

Version 3.0.9 - February 14, 2018

	Correct condition where custom shipping not carried over into order after placed 
	Correct Javascript where customer selection not replaced after loading an existing order
	Adjust for taxonomy-based attributes for variations that were populated after loading an existing order
	Modified cart items table to show regular price and adjusted price if plugins modify the price
	NOTE: If you're using a customized phone/manual order template you may need to update it!

Version 3.0.8 - February 6, 2018

	Moved the changeable price field in the one_page_searchable items_table.php template to be its own field independent of the product's regular price. So now it's no longer used for calculations unless it has a value in it. NOTE: If you're using a customized phone/manual order template you may need to update it!
	Added CSS for the modified changeable price field
	Clear the shipping rate calculation cache for WC 3.3.x when using the custom shipping rate module

Version 3.0.7 - January 24, 2018

	Added new setting to define the default country / state for new orders
	Fixed issue where reloading and overwriting an existing order didn't overwrite the order but instead created a new order
	Added subscriptions support to the payments gateway for Invoice, Hold Order, and Paid in Person
	Updated tax exempt processing to work with IgniteWoo's WooCommerce Wholesale Pro Suite

Version 3.0.6 - November 12, 2017

	WooCommerce 2.4.6 or newer is now required 
	New Feature: Display automatic cart totals update when changing quantities and prices. This helps on slower sites, or with orders that have a very large number of items 
	New Template Feature: Added button to the items table to update the cart totals on click if the "Display automatic cart totals update" is enabled
	Adjusted variation attribute display to ensure attributes display 
	Adjusted code for setting custom prices for variable products 

Version 3.0.5 - November 6, 2017			

	When using the invoice or paid in person gateways call payment_complete() if the order status is Processing or Completed so that other plugins get triggered if they're designed to interact with paid orders. 

Version 3.0.4 - October 28, 2017			

	Adjusted the invoice payment gateway to return a redirect even if the option is on to automatically send the customer an invoice

Version 3.0.3 - October 28, 2017

	Critical update to avoid problems with removing arbitrary products from the store 

Version 3.0.2 - October 27, 2017

	Ensure that the "Clear entire cart" button is rehooked after the order items list updates
	Ensure fee is taxable if that option is selected
	Adjusted CSS code for better default styling
	Fixed double object declaration when checking for arbitrary products in an order
Version 3.0.1 - October 26, 2017

	Ensure that the "Address 2" billing and shipping field is loaded from the selected customer's account if a customer is selected.
	Ensure that if a an arbitrary product is removed from the cart then only that product is deleted

Version 3.0 - October 15, 2017

	Use selectWoo Javascript if the site uses WooCommerce 3.2 or newer
	Added category selector to help narrow product search, helpful when a site has a long list of items with similar names
	Added ability to add arbitrary products (products that don't exist yet) to the cart
	Added new option to the Invoice Payment gateway to allow automatically sending the customer an invoice is the order status is not Processing or Completed (WooCommerce sends the invoice itself when the order has those statuses)
	Load the product "Configure" popup content via HTTPS if the Ajax request was sent via HTTPS, this prevents browser security refusing to load the frame. 
	Switched to symantec version numbering for the plugin

Ask a Question:


From: 129.00 / year

Easily take orders in person or over the phone, including shipping calculations and credit card processing.

All of our plugins come with great support via email and phone.

Subscription options

A subscription entitles you to 1 year of updates and support. Each individual web site requires a license key, so choose the right license for your needs.