Taxonomy API

Framework for classifying and organizing WordPress content through hierarchical and non-hierarchical term groupings.

Since: 2.3.0
Source: wp-includes/taxonomy.php, wp-includes/class-wp-taxonomy.php, wp-includes/class-wp-term.php, wp-includes/class-wp-term-query.php

Components

ComponentDescription
functions.mdCore registration, retrieval, and manipulation functions
class-wp-taxonomy.mdTaxonomy definition and configuration
class-wp-term.mdIndividual term instance
class-wp-term-query.mdTerm querying and retrieval
hooks.mdActions and filters

Built-in Taxonomies

TaxonomyHierarchicalObject TypesDescription
categoryYespostPost categories
post_tagNopostPost tags
nav_menuNonav_menu_itemNavigation menus
link_categoryNolinkLink categories
post_formatNopostPost formats
wp_themeNowp_template, wp_template_part, wp_global_stylesTheme association
wp_template_part_areaNowp_template_partTemplate part areas
wp_pattern_categoryNowp_blockBlock pattern categories

Registration Flow

php
init hook
    └── register_taxonomy()
            └── new WP_Taxonomy()
                    ├── set_props()
                    │       ├── apply_filters('register_taxonomy_args')
                    │       ├── apply_filters('register_{$taxonomy}_taxonomy_args')
                    │       └── get_taxonomy_labels()
                    ├── add_rewrite_rules()
                    └── add_hooks()
            └── do_action('registered_taxonomy')
            └── do_action('registered_taxonomy_{$taxonomy}')

Term Retrieval Flow

get_terms() / WP_Term_Query::query()
    ├── parse_query()
    │       ├── apply_filters('get_terms_defaults')
    │       └── do_action('parse_term_query')
    ├── do_action_ref_array('pre_get_terms')
    ├── apply_filters('get_terms_args')
    ├── apply_filters('list_terms_exclusions')
    ├── apply_filters('get_terms_fields')
    ├── apply_filters('terms_clauses')
    ├── apply_filters_ref_array('terms_pre_query')
    ├── Database query
    ├── _prime_term_caches()
    └── apply_filters('get_terms')

Term Modification Flow

wp_insert_term()
    ├── apply_filters('pre_insert_term')
    ├── sanitize_term()
    ├── apply_filters('wp_insert_term_data')
    ├── Database insert
    ├── do_action('create_term')
    ├── do_action('create_{$taxonomy}')
    ├── apply_filters('term_id_filter')
    ├── clean_term_cache()
    ├── do_action('created_term')
    ├── do_action('created_{$taxonomy}')
    ├── do_action('saved_term')
    └── do_action('saved_{$taxonomy}')

wp_update_term()
    ├── get_term()
    ├── sanitize_term()
    ├── apply_filters('wp_update_term_parent')
    ├── apply_filters('wp_update_term_data')
    ├── do_action('edit_terms')
    ├── Database update
    ├── do_action('edited_terms')
    ├── do_action('edit_term_taxonomy')
    ├── do_action('edited_term_taxonomy')
    ├── do_action('edit_term')
    ├── do_action('edit_{$taxonomy}')
    ├── clean_term_cache()
    ├── do_action('edited_term')
    ├── do_action('edited_{$taxonomy}')
    ├── do_action('saved_term')
    └── do_action('saved_{$taxonomy}')

Database Schema

wp_terms

ColumnTypeDescription
term_idbigint(20)Term ID (primary key)
namevarchar(200)Term name
slugvarchar(200)URL-friendly name
term_groupbigint(10)Group for term aliases

wp_term_taxonomy

ColumnTypeDescription
term_taxonomy_idbigint(20)Term taxonomy ID (primary key)
term_idbigint(20)Foreign key to wp_terms
taxonomyvarchar(32)Taxonomy name
descriptionlongtextTerm description
parentbigint(20)Parent term ID
countbigint(20)Object count

wp_term_relationships

ColumnTypeDescription
object_idbigint(20)Post/object ID
term_taxonomy_idbigint(20)Foreign key to wp_term_taxonomy
term_orderint(11)Sort order

wp_termmeta

ColumnTypeDescription
meta_idbigint(20)Meta ID (primary key)
term_idbigint(20)Foreign key to wp_terms
meta_keyvarchar(255)Meta key
meta_valuelongtextMeta value