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
Built-in Taxonomies
| Taxonomy | Hierarchical | Object Types | Description |
|---|
category | Yes | post | Post categories |
post_tag | No | post | Post tags |
nav_menu | No | nav_menu_item | Navigation menus |
link_category | No | link | Link categories |
post_format | No | post | Post formats |
wp_theme | No | wp_template, wp_template_part, wp_global_styles | Theme association |
wp_template_part_area | No | wp_template_part | Template part areas |
wp_pattern_category | No | wp_block | Block pattern categories |
Registration Flow
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
| Column | Type | Description |
|---|
term_id | bigint(20) | Term ID (primary key) |
name | varchar(200) | Term name |
slug | varchar(200) | URL-friendly name |
term_group | bigint(10) | Group for term aliases |
wp_term_taxonomy
| Column | Type | Description |
|---|
term_taxonomy_id | bigint(20) | Term taxonomy ID (primary key) |
term_id | bigint(20) | Foreign key to wp_terms |
taxonomy | varchar(32) | Taxonomy name |
description | longtext | Term description |
parent | bigint(20) | Parent term ID |
count | bigint(20) | Object count |
wp_term_relationships
| Column | Type | Description |
|---|
object_id | bigint(20) | Post/object ID |
term_taxonomy_id | bigint(20) | Foreign key to wp_term_taxonomy |
term_order | int(11) | Sort order |
| Column | Type | Description |
|---|
meta_id | bigint(20) | Meta ID (primary key) |
term_id | bigint(20) | Foreign key to wp_terms |
meta_key | varchar(255) | Meta key |
meta_value | longtext | Meta value |