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.4
Comes with great support via email and phone!
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.5 - October 8, 2024
Added sleep statements in the cart class to pause execution for 1 second to help on sites that update their objects too slowly, which caused problems with adding, removing, and increasing quantities of items for the order
Adjusted shipping fields template to not populate anything into the field is the assigned customer has an empty first name or last name in their shipping address
Declare class variables in class header for PHP 9 compatibility
Version 3.4.3 - May 13, 2024
Additional code to ensure shortcode is not processed when editing a page in the admin area that contains the shortcode
Version 3.4.2 - May 9, 2024
Switch to authorized user context when loading JS scripts, prevents nonce check failure on a rare few sites when applying a coupon to the order.
Version 3.4.1 - 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.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
IMPORTANT: AUTOMATIC DELETION OF ARBITRARY PRODUCTS HAS BEEN RE-ENABLED
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
-- PREVIOUS VERSION INFORMATION OMITTED --