I’m building an inventory system where inventory items have their own page but where standard WordPress post post types can also be tagged with these inventory items. As far as I understand, this means I must implement both a custom post type (inventory) to provide each item’s page and a custom, non-hierarchical taxonomy (inventory_item) to represent the relationships between posts in the post post type and pages in the inventory post type. Each custom post type post would be associated with exactly one inventory_item term.
Assuming that the above is the best approach to accomplish this sort of relationship, then this implies that I must handle various edge cases to guarantee the custom-post-to-term relationship is maintained. For example:
- When an
inventorypost is edited or deleted, the correspondinginventory_itemterm must be updated/deleted too. - It should not be possible for users to create or edit
inventory_itemterms on their own, for example via thetermedit page or editor term metabox / Gutenberg widget. These should only be created when a correspondinginventorycustom post type post is created. - Should I create the term when the custom post type post is published, or merely drafted? What about when a post is trashed but not fully deleted – when should I delete the terms and associations?
- How do I get the
inventory_itemterms to take the user to the corresponding custom post when the link is clicked (for example in a tag cloud)?
Clearly, maintaining this strict one-to-one relationship will require many hooks to handle the various ways in which it can be disrupted. I’d like to hear thoughts about whether this approach seems like the best one to implement what I need, and whether anyone knows of a plugin that implements this already that I could take a look at.

