A tick box and a message field on the cart and the checkout. The wrapping is charged as a fee, the message lands on the order, and both appear where the person packing the parcel will actually see them.
Three things this plugin gets right
* The wrapping is a fee, not a product. A shop that puts a "Gift wrap" product in the cart has just broken its own stock report, its product feed and its sales-by-product figures — and the wrap turns up in "customers also bought". A fee is tax-aware, is displayed natively by the classic cart, the Blocks cart and every email, and lands on the order where an accountant expects it. * The charge is worked out again on every recalculation. Nothing carries an amount forward, so it cannot double when a quantity changes over AJAX, and it disappears the instant the box is unticked. * The gift is shown to whoever packs the box. On the order screen and in the admin email, as well as on the customer's own confirmation. A message shown only to the customer is a message nobody in the warehouse reads, and the parcel goes out with no card in it.
What you get
* A tick box and a message field on the cart page and the checkout * A charge once for the order, or for each thing in the cart — with the price named on the tick box, so nothing is silently added to a total * Free wrapping if you want it: the box and the message still work, and no charge is shown * Your own wording for the heading, the tick box, the charge and the message field * Whether the charge is taxable, and in which tax class — because gift wrapping is taxed in some places and not others, and that is your decision * A message length you set, and that is actually enforced
Careful about the details
* The form is ordinary form fields on WooCommerce's own cart and checkout, so it works before a script has run — there is no JavaScript at all. * A message is stripped to plain text on the way in and again on the way out, so nothing typed into it can reach a packing slip as markup. The line breaks are kept, because a card is written in lines. * Plain-text emails get plain text, not markup arriving as angle brackets. * The choice is forgotten once the order is placed, so a shopper's next, ordinary order does not arrive wrapped with somebody else's message on it.
Every license includes
- One year of updates and priority support, delivered straight to your WordPress dashboard.
- Use on 1, 5 or 25 sites depending on your license — local, staging and development sites are always free.
- 30-day money-back guarantee — full refund, no questions asked.
- Keeps working after expiry — if you choose not to renew, the plugin keeps running exactly as installed; it simply stops receiving updates and support until you do.
Requires WordPress 6.4+ · PHP 7.4+ · tested up to WordPress 6.8. Works with the classic and block checkout alike.

Thomas H. (verified owner) –
Read the docs, changed two settings, finished. Gift Wrap hasn’t cost me a single support email from a customer. Renewed without hesitating.
Laurent (verified owner) –
A remplacé une extension bien plus lourde qui en faisait la moitié. Single Site suffit largement pour ce que je gère.
Andrés (verified owner) –
Suficiente para lo que necesitaba. La documentación de Gift Wrap podría ser más clara. Se lo comentaría a un compañero.
Joanne M. (verified owner) –
It’s opinionated in the right places. Nothing about Gift Wrap feels bolted on. This is what a paid plugin should feel like.
Ian R. (verified owner) –
Genuinely impressed. The Cart & Checkout options are a crowded field and this is the one I settled on. Full marks.