WordPress has no native way to duplicate a product
You sell 5 variations of the same chair. Creating the fifth means re-entering 40 product attributes, uploading the same gallery, re-selecting the same categories. WooCommerce has a built-in duplicate link in the product list, but it's buried and doesn't work from shortcuts, schedules, or macros.
What most people do instead
A better way: one command, complete clone
Run tp duplicate product -id=247. The command clones title, content, excerpt, featured image, categories, tags, and every custom meta field. The clone arrives as a draft named "Copy of [original title]", edit it, publish when ready.
Shown in advanced mode, where commands start with tp. In easy mode you type the same command without the tp prefix.
Not just the content, every field. Featured image, custom fields, taxonomies, SEO overrides (Yoast / Rank Math), WooCommerce attributes, ACF fields. The clone is identical to the original except its slug (unique-suffixed) and status (draft).
How it works
The command uses WordPress\'s wp_insert_post with a deep copy of the original product\'s content, then replays every postmeta row under the new post ID. Taxonomy terms are re-assigned by term ID. The result is a byte-identical clone under a new draft ID.
| Parameter | Value |
|---|---|
-id (required) | ID of the product to duplicate |
| What\'s cloned | Title, content, excerpt, featured image, categories, tags, ALL custom meta fields |
| What\'s unique on the clone | ID, slug (with -copy-N suffix), status (draft), dates (current timestamp) |
| Can be used in |
Real example
Your store adds a new color for an existing best-seller. The product has 12 images, 6 attributes, custom meta fields, and pricing rules. Instead of rebuilding from scratch, run tp duplicate product -id=512. The clone arrives as a draft with every field intact, you just update the color name, swap the featured image, and publish.
Goes further with TrueCommander
Frequently asked questions
tp duplicate product -id=123 does it from the navigator, creating a full draft copy you can run as a macro step too.