Using WordPress ‘create_{$taxonomy}’ PHP action

The create_{$taxonomy} WordPress PHP action fires after a new term is created for a specific taxonomy. The dynamic portion of the hook name, $taxonomy, refers to the slug of the taxonomy the term was created for. Possible hook names include create_category and create_post_tag.


add_action('create_{$taxonomy}', 'your_custom_function', 10, 3);

function your_custom_function($term_id, $tt_id, $args) {
  // your custom code here

  return $term_id;


  • $term_id (int): Term ID.
  • $tt_id (int): Term taxonomy ID.
  • $args (array): Arguments passed to wp_insert_term().

More information

See WordPress Developer Resources: create_{$taxonomy}


Log new term creation

Log the creation of a new term in a custom log file.

add_action('create_category', 'log_new_term_creation', 10, 3);

function log_new_term_creation($term_id, $tt_id, $args) {
  error_log("New term (ID: {$term_id}, Taxonomy ID: {$tt_id}) created with arguments: " . print_r($args, true));

Notify admin of new term

Send an email to the admin when a new term is created.

add_action('create_post_tag', 'notify_admin_new_term', 10, 3);

function notify_admin_new_term($term_id, $tt_id, $args) {
  $admin_email = get_option('admin_email');
  $term = get_term($term_id);
  $subject = "New term '{$term->name}' created";
  $message = "A new term '{$term->name}' (ID: {$term_id}, Taxonomy ID: {$tt_id}) has been created.";
  wp_mail($admin_email, $subject, $message);

Assign a new term to a custom post type

Automatically assign the new term to a custom post type when created.

add_action('create_category', 'assign_new_term_to_custom_post_type', 10, 3);

function assign_new_term_to_custom_post_type($term_id, $tt_id, $args) {
  $custom_post_type = 'your_custom_post_type';
  $term = get_term($term_id);
  wp_set_object_terms($term_id, $term->slug, $custom_post_type, true);

Set a default parent term for a custom taxonomy

Automatically set a default parent term for a new term in a custom taxonomy.

add_action('create_your_custom_taxonomy', 'set_default_parent_term', 10, 3);

function set_default_parent_term($term_id, $tt_id, $args) {
  $default_parent_term_id = 123; // Replace with your default parent term ID
  wp_update_term($term_id, 'your_custom_taxonomy', array('parent' => $default_parent_term_id));

Create a custom field for a new term

Automatically create a custom field for the new term when it’s created.

add_action('create_post_tag', 'create_custom_field_for_new_term', 10, 3);

function create_custom_field_for_new_term($term_id, $tt_id, $args) {
  $custom_field_key = 'your_custom_field_key';
  $custom_field_value = 'your_custom_field_value';
  add_term_meta($term_id, $custom_field_key, $custom_field_value, true);