Add a customer note to multiple WooCommerce orders at once: a plugin you can build today
· 5 min read
WooCommerce lets you add notes to individual orders without much friction, but there is no built-in way to select a group of orders and add the same message to all of them at once. If a courier has delayed a batch of parcels, or a product went out in a window with a small defect, or a pre-order batch is running three weeks late, you write the same update to each order by hand.
This becomes a real bottleneck at the worst time. The situations that require communicating with many customers at once are exactly the situations where you are also dealing with the underlying problem. Thirty orders means thirty note screens, each requiring the same text, the same save click.
The plugin described here adds an 'Add customer note' option to the WooCommerce order bulk actions dropdown. Filter the orders list to the affected batch, select them, pick the action, type your message once, choose whether to trigger the email notification, and submit. Every selected order gets the note in one step.
What one build gives you
- A bulk action in the WooCommerce orders list that adds a typed note to all selected orders in one step
- An optional customer email notification checkbox, checked by default, so you can notify customers or add the note silently
- Compatibility with both the classic WooCommerce order table and HPOS (High Performance Order Storage)
- A confirmation notice after submission showing how many orders received the note
- Works on any order status; use WooCommerce's built-in order filters to narrow the selection before applying the bulk action
What it does not do
- Private internal notes visible only to staff; the plugin adds customer-facing notes only
- Per-order variable text; the note is identical for every selected order
- Scheduling; notes are applied immediately when you submit the form
- Saved note templates for reusing common messages across sessions
- Bulk removal or editing of notes that have already been added to orders
The prompt
Loads into the composer so you can edit it first. Nothing is built, and nothing is charged, until you send it.
Build a WordPress plugin that adds a 'Add customer note' bulk action to the WooCommerce orders list. Register the action on both bulk_actions-edit-shop_order and bulk_actions-woocommerce_page_wc-orders filters with the key add_customer_note and label 'Add customer note'. Handle the action on handle_bulk_actions-edit-shop_order and handle_bulk_actions-woocommerce_page_wc-orders: generate a transient key using 'wc_bulk_note_' . wp_generate_password(12, false), store the array of order IDs under that key with set_transient for 300 seconds, then return the redirect URL with the query parameter wc_bulk_note set to the transient key. On admin_notices, when the wc_bulk_note query parameter is present and the current user has the edit_shop_orders capability, retrieve the order IDs from the transient; if valid, render a div.notice.notice-info containing a form with method POST with: a wp_nonce_field for action wc_bulk_note_submit, a hidden input named wc_bulk_note_key with the transient key, a paragraph showing 'Adding a note to X order(s):', a label and textarea named note_text with the required attribute and placeholder 'Enter the note to add to all selected orders', a label with a checkbox input named notify_customer value 1 checked by default with text 'Notify customers by email', and a submit button named wc_bulk_note_submit labelled 'Add note to orders'. On admin_init, when $_POST['wc_bulk_note_submit'] is set and the current user has edit_shop_orders capability, verify the nonce with wp_verify_nonce using action wc_bulk_note_submit, retrieve and delete the transient using the posted wc_bulk_note_key value, sanitize the note_text with sanitize_textarea_field, determine the is_customer_note flag from whether notify_customer is in $_POST, iterate over the order IDs calling wc_get_order on each and calling add_order_note on valid orders with the sanitized text and the is_customer_note flag, then redirect to the WooCommerce orders admin page with query parameter wc_bulk_note_count set to the count of updated orders. On admin_notices, when wc_bulk_note_count is set, display a success notice 'Customer note added to X order(s)'. Register all hooks inside a function attached to plugins_loaded.
What the plugin does
The plugin registers a new bulk action called 'Add customer note' in the WooCommerce orders list. It works on both the classic order table and the HPOS (High Performance Order Storage) table that newer WooCommerce installs use by default.
When you select orders and apply the action, an admin form appears above the orders list showing how many orders you have selected, a textarea for the note text, and a checkbox labelled 'Notify customers by email' that is checked by default. You type the message and submit.
After submission, every selected order receives the note via WooCommerce's standard order note system, and a confirmation notice tells you how many orders were updated. The notes appear in each order's history exactly as a manually added note would.
The customer notification email
WooCommerce has a built-in 'New Order Note' email that fires automatically when a customer-facing note is added to an order. By default the plugin's form has the notification checkbox checked, so submitting the form sends that email to every customer whose order you selected.
If you want to add the note to the order history without emailing anyone, uncheck the box before submitting. The note still appears in the order, and staff can see it, but no email goes out. This is useful when you are adding the note for your own records rather than communicating directly with customers.
The email itself uses whatever order note template your store has configured. Any branding, footer text, or customisation you have applied to WooCommerce transactional emails applies here too.
Who this is for
WooCommerce stores with any kind of batch fulfillment: subscription boxes, pre-orders, print-on-demand, wholesale dispatches, or any model where a group of orders moves through the same production step at the same time. When something affects the batch, this is how you tell everyone in one action.
Store managers who need to communicate a delay, a courier issue, or a product change to customers who ordered in a specific window. Filter by date range or status in the WooCommerce orders list first, select the relevant orders, and apply the note.
Developers building or maintaining WooCommerce stores who want to offer this capability to clients without adding a paid plugin. The build is small and the behaviour is predictable: it uses WooCommerce's own order note API throughout.
Who should take a different approach
If the message needs to reach customers who are not already identified by a specific set of orders, use your email marketing tool instead. This plugin acts on orders you select from the WooCommerce orders list. It cannot query 'everyone who bought product X' without you first filtering those orders manually.
If the note text needs to vary per order, for example including the individual order number or a per-order estimated dispatch date, this plugin will not do that. The same text goes to every selected order. A more capable tool would require a template system with order-level variables, which is a different build.
If your store is on a managed WooCommerce hosting plan that includes a support SLA, check whether the provider already includes an orders management tool. Some do. If there is already a supported solution in your stack, use it rather than introducing a custom plugin.
How to build it
Paste the prompt below into Steem. Once the plugin is active, go to WooCommerce > Orders, filter or search for the orders you want to update, select them using the checkboxes, choose 'Add customer note' from the bulk actions dropdown, and click Apply. A form will appear above the orders list. Type your note, decide whether to notify customers, and click 'Add note to orders'.
If you also need to add private internal notes visible only to staff rather than customers, that is a short follow-up: 'Add a second bulk action to the same plugin called Add private note with key add_private_note. It should work identically to the customer note action but call add_order_note with is_customer_note set to 0 and no notification checkbox.'
Questions
- Will every customer I select receive an email?
Only if you leave the 'Notify customers by email' checkbox checked when you submit the form. Uncheck it to add the note to the order history silently, without triggering the WooCommerce order note email.
- Does this work with WooCommerce HPOS?
Yes. The plugin registers its bulk action on both the classic edit-shop_order table and the HPOS woocommerce_page_wc-orders table, so it works regardless of which order storage mode your site uses.
- Can I filter to a specific order status before applying the note?
Yes, and that is the intended workflow. Use WooCommerce's built-in order status filters or the search bar to narrow the orders list before selecting the ones you want to update. The plugin applies the note to whatever orders you have selected.
- Can I include the order number or customer name in the note?
No. The text you type is added to every selected order without modification. If you need per-order variable data in the note, that requires a different build with a template system.
- Can I add a private internal note to multiple orders at once?
Not with this plugin as described. Customer-facing notes and private internal notes are different types in WooCommerce. The follow-up prompt in the How to build it section extends the plugin to add a second bulk action for private notes.
The prompt
Loads into the composer so you can edit it first. Nothing is built, and nothing is charged, until you send it.
Build a WordPress plugin that adds a 'Add customer note' bulk action to the WooCommerce orders list. Register the action on both bulk_actions-edit-shop_order and bulk_actions-woocommerce_page_wc-orders filters with the key add_customer_note and label 'Add customer note'. Handle the action on handle_bulk_actions-edit-shop_order and handle_bulk_actions-woocommerce_page_wc-orders: generate a transient key using 'wc_bulk_note_' . wp_generate_password(12, false), store the array of order IDs under that key with set_transient for 300 seconds, then return the redirect URL with the query parameter wc_bulk_note set to the transient key. On admin_notices, when the wc_bulk_note query parameter is present and the current user has the edit_shop_orders capability, retrieve the order IDs from the transient; if valid, render a div.notice.notice-info containing a form with method POST with: a wp_nonce_field for action wc_bulk_note_submit, a hidden input named wc_bulk_note_key with the transient key, a paragraph showing 'Adding a note to X order(s):', a label and textarea named note_text with the required attribute and placeholder 'Enter the note to add to all selected orders', a label with a checkbox input named notify_customer value 1 checked by default with text 'Notify customers by email', and a submit button named wc_bulk_note_submit labelled 'Add note to orders'. On admin_init, when $_POST['wc_bulk_note_submit'] is set and the current user has edit_shop_orders capability, verify the nonce with wp_verify_nonce using action wc_bulk_note_submit, retrieve and delete the transient using the posted wc_bulk_note_key value, sanitize the note_text with sanitize_textarea_field, determine the is_customer_note flag from whether notify_customer is in $_POST, iterate over the order IDs calling wc_get_order on each and calling add_order_note on valid orders with the sanitized text and the is_customer_note flag, then redirect to the WooCommerce orders admin page with query parameter wc_bulk_note_count set to the count of updated orders. On admin_notices, when wc_bulk_note_count is set, display a success notice 'Customer note added to X order(s)'. Register all hooks inside a function attached to plugins_loaded.
Steem