Do these 3 things before closing this tab:
1Scan for outdated or missing drivers - takes under a minute2Repair Windows errors before they cause bigger problems3Fix the driver behind crashes, sound loss and screen glitchesConverting WordPress categories requires two separate jobs: register the destination taxonomy, then migrate terms and each post–term relationship. Registering a taxonomy alone does not move existing category assignments. Do the work on a staging copy, verify editor behavior, archives, URLs and integrations, and only then repeat it on production.
What changes when you convert categories?
A taxonomy is a classification system; a term is an individual value inside it. Categories are hierarchical, while tags are normally flat. A custom taxonomy lets you create an independent system—for example, “Courses” or “Ingredients”—without making those concepts depend on the built-in Categories or Tags.
WordPress stores terms and the relationships between terms and posts as taxonomy-specific data. Your conversion therefore has three parts:
- Define and register the new taxonomy.
- Create or map destination terms, including slugs and parent terms.
- Assign every relevant post to the destination terms and decide what happens to the old categories.
Keep the old categories temporarily if you need a rollback or redirects. Do not delete them until the migrated data and every dependent feature has been checked.
What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.
#1 Best Overall
Plan the destination taxonomy before touching data
Choose a taxonomy key and labels
The internal key must be unique and follow WordPress’s key restrictions. Use a stable, lowercase key that describes the classification rather than a temporary project name. Define singular and plural labels that editors will understand.
Choose hierarchy deliberately
| Configuration | Editor behavior | Use it when |
|---|---|---|
| Hierarchical | Parent and child terms with category-like selection controls | Your existing categories have meaningful parent–child structure |
| Non-hierarchical | A flat, tag-like list of terms | Each value is independent and nesting would confuse editors |
Decide where it is available
Associate the taxonomy only with the post types that should use it. Decide whether it should appear in the editing screen, administrative columns and the REST API, and whether it needs public archive pages or a query variable. These settings affect themes, blocks, JavaScript, external clients and plugins.
Design the URL structure
Set the rewrite base and decide whether term URLs should reflect hierarchy. A taxonomy using a /course/ base, for example, will not automatically keep the old category URL. Compare current category paths with the proposed term paths before launch.
Rank #2
Register the custom taxonomy
Register the taxonomy on the init action. Put content-related registration in a plugin when it must survive a theme change; keeping it only in a theme can make the taxonomy disappear from the editing and query environment when the theme is replaced.
<?php
add_action( 'init', function () {
register_taxonomy(
'course_topic',
array( 'post' ),
array(
'labels' => array(
'name' => 'Course topics',
'singular_name' => 'Course topic',
),
'hierarchical' => true,
'show_ui' => true,
'show_admin_column' => true,
'show_in_rest' => true,
'public' => true,
'rewrite' => array( 'slug' => 'course-topic', 'hierarchical' => true ),
)
);
} );
This is a pattern, not a universal configuration. Change the key, post types, labels, visibility, capabilities and rewrite settings to match your site. Registering the taxonomy makes it available; it does not copy categories or assign posts.
Inventory the current categories
Before migration, record the data and code that depend on categories:
Rank #3
- Every used category, its slug, term ID and parent.
- The posts assigned to each category, including posts with multiple categories.
- Category archive URLs and any custom permalink rules.
- Theme templates, queries, widgets, blocks, menus and shortcodes that call category functions or query category taxonomies.
- Plugins, REST clients, feeds and editorial workflows that expect the built-in category taxonomy.
This inventory is your verification list. A category tree that looks correct in the dashboard can still produce missing assignments or broken front-end queries.
Migrate terms and post assignments
Resolve names, slugs and parents first
Make an explicit mapping from each source category to a destination term. Decide what to do when two categories share a name or slug, when a parent is not being migrated, or when destination terms already exist. Preserve parent–child relationships only where they still make editorial sense; a custom taxonomy does not have to reproduce the old tree.
Outdated Drivers Are Slowing You Down
One free scan finds every outdated or missing driver and matches the right update for your exact hardware.Free scan · exact hardware matchPC Slower Than It Used to Be?
A free scan shows the junk files, broken settings and background clutter dragging Windows down - then fixes them in one click.Free scan · Windows 10 & 11Use WP-CLI only after testing the exact operation
WP-CLI’s term command supports creating, listing, deleting, recounting and managing term metadata, and its command index includes a wp term migrate subcommand for migrating a term from one taxonomy to another. The command reference does not define a complete site-wide category conversion plan or guarantee handling for collisions, parent structures, metadata, duplicate destination terms or every post assignment.
Rank #4
On a staging copy, inspect the installed command’s syntax with:
wp help term migrate
Then test one low-risk category and compare its destination term, parent, assignments and metadata with your inventory. Use the documented syntax for your installed WP-CLI version, log the IDs processed and stop if the result differs from the mapping. For complex mappings, a purpose-built migration script may be safer than a blind bulk command, but it must be tested against a database copy and reviewed for duplicate terms, pagination and partial failures.
Handle old categories intentionally
You can leave source categories in place during verification, remove their assignments after the destination is confirmed, or retain them as a temporary compatibility layer. Deleting a category without a plan can remove the old classification while templates or integrations still depend on it. If a post must retain both systems for a transition period, document which taxonomy is authoritative to avoid conflicting editorial updates.
Best Value
Verify the editor, queries and integrations
- Open an affected post type and confirm the new taxonomy appears in the editor with the intended hierarchical or flat control.
- Assign destination terms to representative posts, including posts with multiple terms and posts whose source category had a parent.
- Check term counts and confirm that no post was skipped or assigned to the wrong destination term.
- Inspect templates, navigation, widgets, blocks and custom queries that previously used categories; update them to query the new taxonomy where required.
- If the taxonomy is exposed through the REST API or consumed by an editor integration, verify term endpoints, permissions and returned post relationships.
- Test feeds, search filters, import/export tools and third-party plugins that relied on category IDs or slugs.
Behavior depends on your theme, plugins and custom code, so a successful dashboard migration is not proof that the public site is complete.
Check archives and permalinks
A custom taxonomy can have a different archive base and term path from the old category URLs. Test both the archive index and individual term pages, including hierarchical paths, trailing-slash behavior and links generated in menus or feeds.
After changing rewrite settings, flush rewrite rules once by visiting Settings → Permalinks and selecting Save Changes, or by using the appropriate deployment command. Do not flush rewrite rules on every page load; that adds unnecessary work and can create avoidable routing problems.
If public URLs change, map each important old category URL to its new destination and install redirects before removing the old routes. Recheck internal links, XML sitemaps and canonical URLs after the redirects are active.
Production checklist and recovery plan
- Take a tested backup and perform the migration on a staging or cloned site first.
- Export the category-to-term mapping and the post assignments before changing data.
- Deploy taxonomy registration before running migration code.
- Run a small pilot, review the results, then process the remaining mappings in logged batches.
- Compare counts, parents, slugs and assignments with the inventory.
- Test editor screens, archives, URLs, templates, REST consumers and plugins.
- Keep the old data or a database backup until the acceptance checks pass.
There is no universal one-click conversion or universal rollback guarantee. Recovery depends on your backup, migration logs and whether source terms were deleted, so define the restore or reverse-mapping procedure before production.
Configuration choices at a glance
| Decision | Options | Question to answer |
|---|---|---|
| Hierarchy | Parent/child or flat | Does nesting convey real editorial meaning? |
| Association | Posts only or selected custom post types | Which content should be assignable? |
| Editor and API | Admin UI, editor controls, REST API, columns | Which people and systems need access? |
| Public behavior | Public archives or private classification | Should visitors and search engines reach term pages? |
| URLs | Rewrite base, hierarchy and front prefix | How will existing links be preserved or redirected? |
| Portability | Plugin or theme registration | Must the taxonomy survive a design change? |
The Bottom Line
Register the taxonomy first, migrate terms and relationships with an explicit mapping, then verify every editor, query, integration and URL before retiring the old categories.
Quick Recap
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

