Shop as Client for WooCommerce – Manual, Phone & Email Orders – PRO, by Naked Cat Plugins, lets Administrators and Shop Managers place phone, email, in-store, and B2B orders on behalf of a customer through the normal WooCommerce checkout, including secure “Request payment by email” and “Invoice or Purchase Order” gateways, and User Switching integration. This page covers setup, payments, third-party compatibility, licensing, and developer hooks. For pricing and installation, see the product page.
Table of Contents
Support
How to request technical support?
If the issue you need technical support with is not covered on this page, click the link next to the license key, on the plugin settings, and fill out the ticket with your request.
Where do I report security vulnerabilities found in this plugin?
You can report any security bugs found in the source code of this plugin through the Patchstack Vulnerability Disclosure Program.
The Patchstack team will assist you with verification, CVE assignment and take care of notifying us.
General operation
Getting started guide
Setting up
Install the free plugin, then the PRO add-on, and go to WooCommerce > Settings > Accounts & Privacy > Shop as Client. Insert the provided license code to activate it.
Choose if the checkout fields/options to “Shop as client” and “Create user” should be set to “Yes” or “No” by default, and if the search should be performed just on existing users (with accounts on your website), or also on orders (from registered and guest users). Searching in previous orders will make the search slower, as the query is much more resource-intensive.
Choose if the user for which the handler is shopping for should be updated with the (eventually changed) details from the checkout or not, and if you’re using the classic checkout if the checkout address fields should all be reset to no values upon reaching the checkout (so that the handler can insert the details from the customer without having to delete his own user details from the fields).
If you want to allow changing the price on the cart while shopping as a client, you need to activate the “Allow changing cart price” option under WooCommerce > Settings > Accounts & Privacy > Shop as Client. This will not validate if the price is below your cost. Administrators and Shop Managers will be able to offer custom special pricing to their customers. The feature is available on both the classic cart and the WooCommerce block cart.
In the case that, for your business, it is important to know who was the handler of each order, you can activate showing it on the orders list on the backend, as well as make it possible for Administrators to change the handler.
There’s also an option to rebuild the users’ index to speed up the autocomplete search on the checkout.
If you are accepting payments by credit card, PayPal, or any other payment method that requires sensitive information from the customer, or if you just want to let the customer choose the payment method on his own, you should activate our “Request payment by email” gateway under WooCommerce > Settings > Payments. It will be available only for logged-in users who can “shop as client”. An “Invoice or Purchase Order” gateway is also available there for B2B workflows where payment is collected separately.
Frontend usage
Administrators and Shop Managers can use the shop frontend to populate the customer’s cart, and when reaching the checkout page, they need to decide whether they’re buying for a client or for their own user. If they’re buying for a client, they can search for an existing customer; if not found, they can decide whether the entered details should be assigned to a new user or the order left as a guest user.
If the customer wants to pay with a credit card, PayPal, or any other payment method that requires sensitive information or credentials, we strongly recommend using the “Request payment by email” gateway. The customer will receive an email with a link to complete payment on your website.
If the “Allow changing cart price option” option is active, you can offer special pricing by changing product prices directly on the cart — on both the classic cart and the WooCommerce block cart.
Which roles can access the “Shop as client” functionality?
Administrators and Shop managers can use “Shop as client” on the checkout.
Add this to your (child) theme functions.php file if you want to allow other user roles to use this functionality:
I’m giving discounts user or user-role-based. Will this work?
Yes and no. Normally the logged-in user is the Administrator or Shop Manager. It’s not possible to integrate with the vast amount of user or user role-based discount plugins when the logged-in user is not the customer himself.
However, our PRO add-on integrates with the User Switching plugin and sets the Administrator or Shop Manager that switched to the customer account as the order handler upon checkout, thus allowing to benefit from the fact the customer is logged-in (discounts, wishlists, or any other functionality provided by 3rd party plugins based on the logged-in user) and still get our plugin functionalities.
So, if you use our PRO add-on and the User Switching plugin, instead of selecting the customer with our built-in search functionality, you switch to the customer account and process the order with its account. Your user ID is still set as the handler for that order and you can still request payment by email securely with our fake payment gateway.
Can I use a customer saved credit card to pay for the order?
Read the FAQ above regarding user-role-based discounts. It’s the exact same scenario.
For security reasons, WooCommerce will not allow even shop administrators to access user stored payment methods, but if you use our plugin and the User Switching plugin, you can switch to the customer account and use the saved credit card information to pay for the order.
You should make sure to get unequivocal authorization from your customer to access and use the account and credit card details.
How does the User Switching integration work end-to-end?
If the User Switching plugin is installed and active, the following flow becomes available on both the classic and block-based checkouts:
- The Administrator or Shop Manager searches for a customer using the built-in autocomplete and selects a result. An “Optionally, switch to [customer name]” link appears below the search field.
- Clicking the link switches the current user to the customer’s WordPress account, transfers the cart session to the customer, and redirects back to the checkout page.
- The order is placed as if the customer placed it themselves — so user-role-based discounts, saved addresses, loyalty points, and other customer-specific features all apply.
- After checkout, the order received page shows a “Switch back to [admin]” section with buttons to return to the admin account and navigate to the order, WP Admin, or the shop.
- On switching back, the handler’s cart is automatically emptied so they can start the next order immediately.
Throughout the entire flow, the original Administrator or Shop Manager remains recorded as the order handler, visible in the Shop as Client metabox on the order edit screen.
Why am I not seeing the “thank you” / “order received” page after checkout?
Since WooCommerce 7.8.1 you’ll get “Please log in to your account to view this order” after checkout because the order no longer belongs to your logged-in user and was assigned to the customer user. This is a security measure put in place that actually makes a lot of sense.
We implemented a fix on Shop as Client PRO add-on version 2.3 for the classic checkout, and the same fix was extended to the block-based checkout in version 8.0.
How can I search by “first name + last name” on the checkout autocomplete field?
Before version 6.0 of this plugin, we were searching on each WooCommerce name, company and address user meta fields, which means it was not easy to find a user by “first name + last name” because those two strings do not exist together on the same meta entry.
Since version 6.0 we are building a user index meta with all the relevant information combined, solving this issue, as well as improving the search performance.
Each user index is updated whenever his details are changed, but a complete index for all users can be triggered with the “Rebuild users index’” option on the plugin settings. However, if you have a large number of users, this may be slow and even cause a timeout not completing the task, in which case we recommend using the WP-CLI wp shop-as-client-pro rebuild-users-index command.
Since version 6.3 there’s a warning about the “Request payment by email” payment gateway, either it is enable or disable it. How to remove it?
This warning is there for a reason. You should not ask your customer for sensitive information, like Credit Card numbers or Pay Pal credentials, for example. You should only checkout with a payment method that doesn’t require gathering sensitive information, or use our built-in “Request payment by email” payment gateway to send an email with a payment link where he can choose the payment method.
If you still want to remove the warning, you can return true to the shop_as_client_pro_hide_checkout_request_payment_by_email_warning filter.
Payments
When using Stripe, the credit card details are saved on the admin account, not the customers’. Is it possible to save the cards to the customer account?
Unfortunately, it’s not possible to save cards to another user other than the one logged in. See the next question, about why you should use the “Request payment by email” feature.
Why should I use the “Request payment by email” feature instead of asking for the customer’s credit card details over the phone?
Sharing credit card details over the phone is not safe and can put both you and your customer at risk. It also creates compliance issues since handling payment data directly may violate PCI rules and increase your company’s liability if anything goes wrong.
With the “Request payment by email” feature, you don’t need to ask for sensitive information. Instead, the customer receives a secure payment link by email and can enter their details safely using their preferred method, such as credit card, PayPal, or another secure gateway.
This approach is easier for the customer, keeps the payment process secure, and protects your business from unnecessary risks.
How do I set up the “Request payment by email” gateway?
Enable it under WooCommerce > Settings > Payments > Shop as Client – Request payment by email. Available settings:
- Title – label shown at checkout
- Description – text shown below the payment option at checkout
- Request payment by email – whether to send the WooCommerce invoice email automatically after checkout (Yes/No)
- Order status after checkout – Pending (stock not reserved) or On hold (stock reserved but not reduced)
The gateway is only shown to logged-in Administrators and Shop Managers.
What is the “Invoice or Purchase Order” payment gateway?
The Invoice or Purchase Order gateway allows orders to be placed without collecting payment at checkout. It is intended for two typical B2B scenarios:
- Invoice: The customer will pay after receiving the order, typically via bank transfer alongside an invoice.
- Purchase Order: The customer has already authorised or paid via an internal PO number.
The gateway can be enabled under WooCommerce > Settings > Payments > Shop as Client – Invoice or Purchase Order and is available on both the classic and the block-based WooCommerce checkout.
Settings include:
- Title – displayed at checkout (default: “Invoice or Purchase Order”)
- Description – displayed at checkout
- Payment instructions – shown on the thank-you page and included in order emails
- Purchase Order number field – optional text field at checkout (Yes / Yes, required / No)
- Order status after checkout – any WC order status, or “Decided by paid status at checkout” (see below)
What is the “Decided by paid status at checkout” order status option?
When the Order status after checkout setting is set to “Decided by paid status at checkout”, a Payment already received checkbox appears at checkout. Two additional settings become available:
- Status – payment received – assigned when the checkbox is ticked (recommended: Processing or Completed)
- Status – awaiting payment – assigned when the checkbox is not ticked (recommended: Pending or On hold)
Can I change product prices in the cart for a specific order?
Yes. Enable the Allow changing cart price option under WooCommerce > Settings > Accounts & Privacy > Shop as Client. Once active, Administrators and Shop Managers can edit individual product prices directly on the cart page, both on the classic cart and the WooCommerce block cart.
Prices are stored in the WooCommerce session and applied at checkout. The feature is experimental and does not validate whether the new price is below cost.
If WooPayments Multi-Currency is active, prices are entered in the customer’s selected currency and automatically converted to the store’s default currency for storage.
Third-Party Compatibility
Custom fields included in the customer autocomplete
When a customer is selected from the autocomplete, the PRO add-on automatically populates not only the standard WooCommerce billing and shipping fields but also custom fields from the following integrations:
| Plugin | Classic checkout | Block checkout |
|---|---|---|
| Simple Checkout Fields Manager for WooCommerce | ❌ | ✅ All registered fields |
| Invoicing with InvoiceXpress for WooCommerce | ✅ | ✅ |
| WooCommerce EU VAT Number | ✅ | ✅ |
| NIF (Num. de Contribuinte Português) for WooCommerce | ✅ | ✅ |
| WooCommerce EU VAT Assistant by Aelia | ✅ | ❌ |
For custom fields from other plugins, see the Developer hooks section. For a new integration request, contact us.
InvoiceXpress integration
When the Invoicing with InvoiceXpress for WooCommerce plugin is active, the Purchase Order number entered at checkout via the Invoice or Purchase Order gateway is automatically copied to the InvoiceXpress hd_wc_ie_plus_po_reference field on the order. This means the PO number will appear on the generated invoice as the Purchase Order reference, with no additional configuration required.
To save the PO number to a different field or perform additional processing when a PO number is saved, use the shop_as_client_pro_po_number_saved action (see Other developer hooks).
Known incompatibilities
- FunnelKit: Our fields will not show up, rendering it unusable;
Licensing
How to transfer the license to another domain?
You should ask for the domain change in your customer area, next to the original order details.
After you get the reply from us stating that the license key is free, you should go to the plugin configurations on the new website and insert the key again.
If you cloned the website, the license key is on the database, and you need to remove it, or else this new domain will not be activated. Remove these records from the wp_options table on the fresh install:
shop_as_client_pro_license_keyshop_as_client_pro_activation_key
Then you should be able to insert the key again and activate it on the new domain.
How to replace the license key on the same website?
If you need to replace your license key on the same website, because you let the subscription expire and had to buy again, or you were using a temporary key for some reason, remove these records from the wp_options:
shop_as_client_pro_license_keyshop_as_client_pro_activation_key
Then you should be able to insert the new key and activate the plugin again.
What happens if I don’t renew my license?
If your license expires, the plugin will continue to work and most Pro features will remain active. However, you’ll lose access to:
- Feature updates, including improvements and new functionality
- Security updates, which are essential to keep your store and customer data safe
- Technical support, in case you need help or run into issues
- “Request payment by email” gateway will be disabled
- “Invoice or Purchase Order” gateway will be disabled
You’ll also see some warnings on the backend and while selecting a customer in the frontend/checkout.
Renewing your license helps us continue improving the plugin, respond to changes in WordPress and WooCommerce, and provide you with reliable support. We highly recommend keeping it active.
Developer hooks
As stated in our policy, the usage of developer hooks is not covered by technical support, yet we provide some usage examples below.
Getting custom fields on autocomplete – classic checkout
If you have checkout custom fields and need them to autocomplete, you can use the shop_as_client_pro_customer_data filter:
This filter is only available on the classic checkout. The block-based checkout fundamentally changed how things work and each custom field needs to be addressed individually by our plugin, not being possible to do it with hooks.
We have direct integration with our own Simple Checkout Fields Manager for WooCommerce plugin: all custom fields created with it are automatically included in the customer autocomplete on the block checkout, with no additional configuration required.
For compatibility with other plugins or custom fields on the block checkout, please contact us.
Other developer hooks
These hooks are available for developers who need to extend or customise the plugin beyond the examples above. Contact us via support if you need further details on any of them.
Filters:
shop_as_client_allow_checkout– Allow additional user roles to access Shop as Client functionalityshop_as_client_default_shop_as_client– Default value (“yes”/“no”) for the “Shop as client” toggleshop_as_client_default_create_user– Default value (“yes”/“no”) for the “Create user” toggleshop_as_client_update_customer_data– Whether the customer’s profile should be updated with checkout details after placing the ordershop_as_client_user_email_if_empty– Email address to use when no customer email is presentshop_as_client_email_password– Password included in the new customer account emailshop_as_client_blocks_data– Filter the data array passed to the block checkout Shop as Client component – block checkout onlyshop_as_client_field_class– CSS class for the “Shop as client” field wrapper – classic checkout onlyshop_as_client_field_priority– Position/priority of the Shop as Client fields – classic checkout onlyshop_as_client_field_input_class– CSS class for the “Shop as client” checkbox input – classic checkout onlyshop_as_client_field_label_class– CSS class for the “Shop as client” checkbox label – classic checkout onlyshop_as_client_search_email_field_class– CSS class for the customer search field wrapper – classic checkout onlyshop_as_client_search_email_field_label_class– CSS class for the customer search field label – classic checkout onlyshop_as_client_search_email_field_input_class– CSS class for the customer search input – classic checkout onlyshop_as_client_create_user_field_class– CSS class for the “Create user” field wrapper – classic checkout onlyshop_as_client_create_user_field_input_class– CSS class for the “Create user” checkbox input – classic checkout onlyshop_as_client_create_user_field_label_class– CSS class for the “Create user” checkbox label – classic checkout onlyshop_as_client_empty_checkout_field_exclusions– Fields to exclude from being cleared when the “Clear checkout fields” option is active – classic checkout onlyshop_as_client_pro_customer_search_delay– Debounce delay in milliseconds for the customer autocomplete search (default: 500) – block checkout onlyshop_as_client_pro_customer_data– Filter the customer field values retrieved from a user or order for the autocomplete – classic checkout onlyshop_as_client_pro_get_customer_custom_data– Filter custom field data retrieved from the customer for the autocomplete – block checkout onlyshop_as_client_pro_get_customer_session_data– Filter the session data stored for the currently selected customershop_as_client_autocomplete_limit– Number of users or orders to fetch from the database per autocomplete queryshop_as_client_autocomplete_results– Filter all autocomplete results before returning them to the client, example hereshop_as_client_autocomplete_results_users– Filter the user-based autocomplete resultsshop_as_client_autocomplete_results_orders– Filter the order-based autocomplete resultsshop_as_client_autocomplete_user_label– Customise the display label for a user result in the autocomplete dropdownshop_as_client_autocomplete_order_label– Customise the display label for an order result in the autocomplete dropdownshop_as_client_pro_user_from_user_response– Filter the full autocomplete result object built from a WP usershop_as_client_pro_user_from_order_response– Filter the full autocomplete result object built from an ordershop_as_client_pro_user_switched_allow_checkout– Allow a specific switched user (via User Switching) to retain Shop as Client checkout accessshop_as_client_pro_checkout_switch_user_link– Customise or extend the “Optionally, switch to [customer]” HTML link shown after customer selection – block checkout onlyshop_as_client_pro_hide_checkout_request_payment_by_email_warning– Suppress the “Request payment by email” notice shown at checkout
Actions:
shop_as_client_pro_po_number_saved– Fires after a Purchase Order number is saved to an Invoice/PO gateway order; receivesWC_Order $orderandstring $po_numbershop_as_client_after_order_handler– Fires after the handler information is rendered in the Shop as Client order metaboxshop_as_client_after_order_details– Fires at the end of the Shop as Client order metabox on the order edit screenshop_as_client_checkout_order_processed– Fires after an order is processed on the block checkout – block checkout onlyshop_as_client_pro_update_customer_session_data– Fires when the selected customer’s session data is updatedshop_as_client_pro_reset_session_data– Fires when the selected customer’s session data is reset
