The add_term_relationship WordPress PHP action fires immediately before an object-term relationship is added.
Usage
add_action('add_term_relationship', 'my_custom_function', 10, 3);
function my_custom_function($object_id, $tt_id, $taxonomy) {
// your custom code here
return $object_id;
}
Parameters
$object_id(int) – Object ID.$tt_id(int) – Term taxonomy ID.$taxonomy(string) – Taxonomy slug.
More information
See WordPress Developer Resources: add_term_relationship
Examples
Log object-term relationship addition
Log when an object-term relationship is added.
add_action('add_term_relationship', 'log_term_relationship_addition', 10, 3);
function log_term_relationship_addition($object_id, $tt_id, $taxonomy) {
error_log("Adding a term relationship: Object ID - {$object_id}, Term taxonomy ID - {$tt_id}, Taxonomy - {$taxonomy}");
return $object_id;
}
Prevent specific term addition
Prevent addition of a specific term to a specific post type.
add_action('add_term_relationship', 'prevent_specific_term_addition', 10, 3);
function prevent_specific_term_addition($object_id, $tt_id, $taxonomy) {
$forbidden_term = 42;
$post_type = 'custom_post_type';
if ($tt_id == $forbidden_term && get_post_type($object_id) == $post_type) {
wp_remove_object_terms($object_id, $tt_id, $taxonomy);
}
return $object_id;
}
Limit maximum terms for a taxonomy
Limit the maximum number of terms for a specific taxonomy.
add_action('add_term_relationship', 'limit_max_terms_for_taxonomy', 10, 3);
function limit_max_terms_for_taxonomy($object_id, $tt_id, $taxonomy) {
$max_terms = 5;
$limited_taxonomy = 'custom_taxonomy';
if ($taxonomy == $limited_taxonomy) {
$terms = wp_get_object_terms($object_id, $taxonomy, array('fields' => 'ids'));
if (count($terms) > $max_terms) {
wp_remove_object_terms($object_id, $terms[0], $taxonomy);
}
}
return $object_id;
}
Send email notification when a term is added
Send an email notification to the admin when a term is added to a specific taxonomy.
add_action('add_term_relationship', 'send_email_on_term_addition', 10, 3);
function send_email_on_term_addition($object_id, $tt_id, $taxonomy) {
$target_taxonomy = 'custom_taxonomy';
if ($taxonomy == $target_taxonomy) {
$admin_email = get_option('admin_email');
$subject = 'Term Added';
$message = "A term with term taxonomy ID {$tt_id} was added to the taxonomy {$taxonomy}.";
wp_mail($admin_email, $subject, $message);
}
return $object_id;
}
Set default term for a custom taxonomy
Automatically set a default term for a custom taxonomy when a post is published.
add_action('add_term_relationship', 'set_default_term_for_taxonomy', 10, 3);
function set_default_term_for_taxonomy($object_id, $tt_id, $taxonomy) {
$default_term_slug = 'default_term';
$custom_taxonomy = 'custom_taxonomy';
if ($taxonomy == $custom_taxonomy) {
$terms = wp_get_object_terms($object_id, $taxonomy);
if (empty($terms)) {
$default_term = get_term_by('slug', $default_term_slug, $taxonomy);
wp_set_object_terms($object_id, $default_term->term_id, $taxonomy, true);
}
}
return $object_id;
}