{"id":375502,"date":"2026-09-25T05:03:48","date_gmt":"2026-09-25T05:03:48","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/taxonomy-tidy\/"},"modified":"2026-09-25T05:03:35","modified_gmt":"2026-09-25T05:03:35","slug":"taxonomy-tidy","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/taxonomy-tidy\/","author":14232506,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.1.0","stable_tag":"1.1.0","tested":"7.1.2","requires":"6.4","requires_php":"7.4","requires_plugins":null,"header_name":"Taxonomy Tidy","header_author":"shahidirfan100","header_description":"Preview and bulk merge duplicate taxonomy terms with an audit trail, rollback, optional redirects, and safe empty-term removal.","assets_banners_color":"eaf1ec","last_updated":"2026-09-25 05:03:35","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/profiles.wordpress.org\/shahidirfan100\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":29,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.1.0":{"tag":"1.1.0","author":"shahidirfan100","date":"2026-09-25 05:03:35","revision":3712391}},"upgrade_notice":{"1.1.0":"<p>Bulk changes now use one reviewed, confirmed, and reversible batch. Merge redirects and removed-term 410 responses are recorded with the batch.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3712391,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3712391,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256},"icon.svg":{"filename":"icon.svg","revision":3712391,"resolution":false,"location":"assets","locale":false}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3712391,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3712391,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.1.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3712391,"resolution":"1","location":"assets","locale":"","width":1200,"height":900},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3712391,"resolution":"2","location":"assets","locale":"","width":1200,"height":1200},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3712391,"resolution":"3","location":"assets","locale":"","width":1200,"height":900},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3712391,"resolution":"4","location":"assets","locale":"","width":1200,"height":900}},"screenshots":{"1":"A live scan of registered taxonomies with duplicate groups and empty terms.","2":"An impact review showing affected objects, hierarchy, and term archive URLs.","3":"The local activity log with batch status and rollback controls.","4":"Settings for taxonomy visibility, merge redirects, and uninstall data handling."}},"plugin_section":[],"plugin_tags":[610,3786,609,91,1901],"plugin_category":[57],"plugin_contributors":[276921],"plugin_business_model":[],"class_list":["post-375502","plugin","type-plugin","status-publish","hentry","plugin_tags-categories","plugin_tags-cleanup","plugin_tags-tags","plugin_tags-taxonomy","plugin_tags-terms","plugin_category-taxonomy","plugin_contributors-shahidirfan100","plugin_committers-shahidirfan100"],"banners":{"banner":"https:\/\/ps.w.org\/taxonomy-tidy\/assets\/banner-772x250.png?rev=3712391","banner_2x":"https:\/\/ps.w.org\/taxonomy-tidy\/assets\/banner-1544x500.png?rev=3712391","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":"https:\/\/ps.w.org\/taxonomy-tidy\/assets\/icon.svg?rev=3712391","icon":"https:\/\/ps.w.org\/taxonomy-tidy\/assets\/icon.svg?rev=3712391","icon_2x":false,"generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/taxonomy-tidy\/assets\/screenshot-1.png?rev=3712391","caption":"A live scan of registered taxonomies with duplicate groups and empty terms."},{"src":"https:\/\/ps.w.org\/taxonomy-tidy\/assets\/screenshot-2.png?rev=3712391","caption":"An impact review showing affected objects, hierarchy, and term archive URLs."},{"src":"https:\/\/ps.w.org\/taxonomy-tidy\/assets\/screenshot-3.png?rev=3712391","caption":"The local activity log with batch status and rollback controls."},{"src":"https:\/\/ps.w.org\/taxonomy-tidy\/assets\/screenshot-4.png?rev=3712391","caption":"Settings for taxonomy visibility, merge redirects, and uninstall data handling."}],"raw_content":"<!--section=description-->\n<p>Taxonomy Tidy helps site owners and agencies review categories, tags, WooCommerce terms, and other registered taxonomies before cleaning them up.<\/p>\n\n<p>The scan is read-only. It reports:<\/p>\n\n<ul>\n<li>Repeated term labels within the same taxonomy.<\/li>\n<li>Labels that differ only by case, spacing, punctuation, or accents.<\/li>\n<li>Terms with no assigned objects.<\/li>\n<\/ul>\n\n<p>Select several duplicate groups, choose one canonical term for each group, and review all affected assignments, hierarchy changes, and archive URLs together before applying one batch. You can also select multiple empty terms for one reviewed removal batch. Each operation is written to a site-local audit log before WordPress updates term assignments. Activity can roll back the complete batch and restore the original term and taxonomy IDs, saved term metadata, relationships, and hierarchy. Rollback checks for conflicting later changes and stops rather than overwriting them. Activity also lets you resume recovery after an interrupted request; review any reported conflict before retrying.<\/p>\n\n<p>The plugin works only with taxonomies available to the current user on the current site. It does not send term data to a remote service or add front-end assets. Merges can optionally create a permanent same-site redirect from each removed term archive to its canonical archive. Removing an empty term records an HTTP 410 Gone response for its former public archive. Both behaviors are saved with the audit operation and are removed when that operation is rolled back.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>taxonomy-tidy<\/code> folder to <code>\/wp-content\/plugins\/<\/code> or install the ZIP from the Plugins screen.<\/li>\n<li>Activate Taxonomy Tidy.<\/li>\n<li>Open Taxonomy Tidy in the dashboard and select a taxonomy to scan.<\/li>\n<li>Select duplicate groups, choose the canonical term to keep in each group, and review the complete batch.<\/li>\n<li>Select empty terms and review the removal batch before applying it.<\/li>\n<li>Use Activity to export the audit report or roll back an applied batch.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20scanning%20change%20my%20terms%3F\"><h3>Does scanning change my terms?<\/h3><\/dt>\n<dd><p>No. A scan reads registered terms and their assignment counts. It does not rename, merge, or remove anything.<\/p><\/dd>\n<dt id=\"how%20are%20similar%20labels%20found%3F\"><h3>How are similar labels found?<\/h3><\/dt>\n<dd><p>The conservative comparison ignores case, accents, spaces, and punctuation. It does not guess spelling mistakes or use fuzzy matching.<\/p><\/dd>\n<dt id=\"what%20happens%20when%20i%20merge%20terms%3F\"><h3>What happens when I merge terms?<\/h3><\/dt>\n<dd><p>You choose the term to keep. Taxonomy Tidy first adds that term to each affected object, then removes the source term. The operation is scoped to the selected taxonomy. The audit record is saved before the change.<\/p><\/dd>\n<dt id=\"can%20i%20undo%20a%20merge%3F\"><h3>Can I undo a merge?<\/h3><\/dt>\n<dd><p>Yes. Activity offers a rollback action for an applied batch. It restores the source term with its original IDs, metadata, object assignments, and hierarchy. If those IDs or terms have since been reused, rollback stops and reports the conflict.<\/p><\/dd>\n<dt id=\"can%20i%20redirect%20a%20merged%20term%20archive%3F\"><h3>Can I redirect a merged term archive?<\/h3><\/dt>\n<dd><p>Yes. Turn on the 301 redirect option in the batch review or make it the default in Settings. Each redirect stays on the current site, follows later term merges, and is removed when its audit operation is rolled back.<\/p><\/dd>\n<dt id=\"what%20happens%20to%20an%20empty%20term%27s%20archive%20when%20i%20remove%20it%3F\"><h3>What happens to an empty term's archive when I remove it?<\/h3><\/dt>\n<dd><p>Taxonomy Tidy records a 410 Gone response for its former public archive URL. The site's normal not-found template still renders. Rolling back the removal removes the 410 rule and restores the term.<\/p><\/dd>\n<dt id=\"does%20this%20work%20with%20woocommerce%20and%20custom%20taxonomies%3F\"><h3>Does this work with WooCommerce and custom taxonomies?<\/h3><\/dt>\n<dd><p>It works with registered, admin-visible taxonomies that the current user can manage, including WooCommerce product taxonomies and public custom taxonomies. Each operation stays within one taxonomy.<\/p><\/dd>\n<dt id=\"where%20is%20the%20audit%20history%20stored%3F\"><h3>Where is the audit history stored?<\/h3><\/dt>\n<dd><p>It is stored in local database tables for the current site. It remains available when the plugin is deactivated. By default, uninstall preserves it; an administrator can opt into deleting the local settings and history on uninstall.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Select and review multiple duplicate groups in one preview; merge all non-canonical terms into the selected canonical term.<\/li>\n<li>Remove multiple empty terms in one reviewed, reversible batch.<\/li>\n<li>Add batch-level rollback, per-operation audit snapshots, and recovery for partially applied batches.<\/li>\n<li>Add optional same-site 301 redirects for merged archives and 410 Gone responses for removed empty-term archives.<\/li>\n<li>Add a Settings preference for the default merge redirect choice.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release with read-only scans, impact previews, merge, rename, empty-term removal, audit exports, and guarded rollback.<\/li>\n<\/ul>","raw_excerpt":"Review duplicate and empty terms, preview bulk changes, and restore batches. Optionally redirect merged archives or return 410 for removed terms.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/375502","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=375502"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/shahidirfan100"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=375502"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=375502"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=375502"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=375502"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=375502"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=375502"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}