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 |
wp_termmeta
| 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 |