Beginner's Guide for WordPress / Start your WordPress Blog in minutes

How to Add Custom Meta Fields to Custom Taxonomies in WordPress

By default WordPress taxonomies (categories, tags, etc) have the fields name, slug, parent, and description. Recently while working on a client’s project, we found a need to add custom meta fields to custom taxonomies. We needed a way to add custom text on each taxonomy archive page. One way would be to hard code the text using the conditional statements in our taxonomy-{name}.php file. That would be a very inefficient way of doing so, and it would give our client no way to modify the text in the future. So we decided to future proof the situation by adding custom meta fields to custom taxonomies. In this article, we will show you how to add additional custom meta fields to custom taxonomies.

Note: This tutorial is for designers and developers.

While searching for an efficient method, we came across Pippin’s tutorial that shows you how to do this. While his tutorial was great, it required us to write a lot of code. We decided to search a little bit further to see if someone has created an easier way to do this. Perhaps a plugin or a class. Thankfully, we found a solution by Ohad Raz on Github. After going through the same issue, he decided to write a class to make it easy for everyone else (got to love the WordPress community). Thanks Ohad.

In our case, we decided to add this functionality as a plugin rather than in a theme. You can choose the method you like. For the sake of this tutorial, we will go the plugin route.

First thing you need to do is download the Tax-Meta-Class from Github. Create a new folder and call it “taxonomy-fields”. Save the “Tax-meta-class” folder inside that folder.

The zip comes with a file called class-usage-demo.php. Just rename that file, and call it taxonomy-fields.php

Ohad did a great job in documenting the file, so it is pretty self-explanatory. He has examples of all type of fields you can add (text field, textarea, checkbox, select, radio, date, time, color picker, file upload, etc). You don’t have to use all the fields. Simply get rid of the ones you don’t want.

Once you are done adding the fields, upload the taxonomy-fields folder in your plugins folder. Activate the plugin, and add data in your fields.

Now, you are ready to display these additional fields in your taxonomy template. Open your taxonomy template. This would be something like taxonomy-{taxonomy-name}.php file. In there, you can simply add the following:

<?php 

//Get the correct taxonomy ID by slug
$term = get_term_by( 'slug', get_query_var( 'term' ), get_query_var( 'taxonomy' ) );

//Get Taxonomy Meta
$saved_data = get_tax_meta($term->term_id,'text_field_id');
echo $saved_data; 

?>

That’s it. These classes make it really easy and improve your workflow. We hope that this tutorial has helped you in adding custom meta fields to custom taxonomies.

Disclosure: Our content is reader-supported. This means if you click on some of our links, then we may earn a commission. See how WPBeginner is funded, why it matters, and how you can support us.

The Ultimate WordPress Toolkit

Get FREE access to our toolkit – a collection of WordPress related products and resources that every professional should have!

Reader Interactions

45 CommentsLeave a Reply

  1. If you can’t your data to display and you’re using a recent version of WordPress, use get_term_meta() instead of get_tax_meta().

  2. here’s my code:
    $config = array(
    ‘id’ => ‘tax_meta_box’, // meta box id, unique per meta box
    ‘title’ => ‘Tax Meta Box’, // meta box title
    ‘pages’ => array(‘category’), // taxonomy name, accept categories, post_tag and custom taxonomies
    ‘context’ => ‘normal’, // where the meta box appear: normal (default), advanced, side; optional
    ‘fields’ => array(), // list of meta fields (can be added by field arrays)
    ‘local_images’ => false, // Use local or hosted images (meta box images for add/remove)
    ‘use_with_theme’ => get_template_directory_uri() . ‘/Tax-Meta-Class/Tax-meta-class’
    );
    /*
    * Initiate your meta box
    */
    $my_meta = new Tax_Meta_Class($config);
    //Image field
    $my_meta->addImage(‘image_field’,array(‘name’=> __(‘My Image ‘,’tax-meta’)));

    $my_meta->Finish();
    ———————————————————————————————————————–
    term_id;
    $saved_data = get_tax_meta($term_id,’image_field’,true);
    echo ”;
    echo $term_id; // Echoes ‘1’ which is the category ID
    echo $saved_data; // Doesn’t show anything . Wonder Why!!
    exit;

    ?>

  3. I’m also having issues getting the path for an uploaded image. It just echos:

    Array

    …text fields are fine.

    I’m using:

    $prefix = ‘ttp_’;

    $my_meta->addImage($prefix.’logo_id’,array(‘name’=> __(‘Logo’,’tax-meta’)));

    And on the taxonomy.php page:

    $logo = get_tax_meta($term->term_id, ttp_logo_id);

    Can anyone help please? I’ve been at this for HOURS!

  4. For all those struggling to get this to read out, I found a stray apostrophe in there, this works for me:

    $data = get_tax_meta($term->term_id, ba_text_field_id);
    echo $data;

  5. Hi,

    I am activate plugin. but i don’t show where i can add custom taxonomy filed in admin side. please replay me.

    Thanks,
    Ketan.

  6. Thanks a lot this has been very useful!!!! :D

    I displayer correclty a text field using this code:
    //Get the correct taxonomy ID by slug
    $term = get_term_by( ‘slug’, get_query_var( ‘term’ ), get_query_var( ‘taxonomy’ ) );

    //Get Taxonomy Meta
    $saved_data = get_tax_meta($term->term_id,’ba_text_field_id’);
    echo $saved_data;

    BUT I need to display an image too, I’m using this php code in my template:

    //Get the correct taxonomy ID by slug
    $term = get_term_by( ‘slug’, get_query_var( ‘term’ ), get_query_var( ‘taxonomy’ ) );

    //Get Taxonomy Meta
    $saved_data = get_tax_meta($term->term_id,’ba_image_field_id’);
    echo $saved_data;

    But it doesn’t display anything! :(

    It just shows a single word “array”

    What could be wrong?

  7. I’m stuck.

    I can see meta data option in wordpress category and not in my custom taxonomy. Where can I add this option to add custom meta in my custom taxonomy ? Where that is defined ?

  8. thanks a lot.I can see there are bunch of fields showed at the post category. However, I just want to know how to make the code to be used for woocommerce product category only.

    Can anyone give a tip?

  9. Thanks for this tutorial! How do I get the meta to show on a custom post page I have created as opposed to just the taxonomy page?

  10. Hi Guys,

    For those who are having issues with displaying the content that is saved. Use the prefix in front of the key.

    //Get Taxonomy Meta
    $saved_data = get_tax_meta($term->term_id,’text_field_id’);
    echo $saved_data;

    That should be ba_text_field_id (Given that the prefix is ba_) .

    Hope this helps cheers.

    • I wanted to second this comment, as it can be quite puzzling to figure out why the example doesn’t work. If you look in the “Tax meta class” file you will see at the top that Ohad defines a $prefix variable that is appended to each save function.

      So in order to get the result to echo out, you need to include the prefix. You can set the prefix to anything you want, including “”. I have no idea what “ba_” stands for, but that is what is in there by default.

      The example should read:
      $saved_data = get_tax_meta($term->term_id,’ba_text_field_id’);

  11. Ok, I’m stuck.

    //Get the correct taxonomy ID by slug
    $term = get_term_by( ‘slug’, get_query_var( ‘term’ ), get_query_var( ‘taxonomy’ ) );

    //Get Taxonomy Meta
    $saved_data = get_tax_meta($term->term_id,’text_field_id’);
    echo $saved_data;

    So ‘taxonomy’ is my custom taxonomy, let’s say ‘project_clients’
    ‘text_field_id’ is the id of input field, it’s $prefix.’text_area’…

    What’s ‘term’ ?????

    • Ante,
      Have you had any progress with this??

      I’m wondering the same question – poured over so many comments and pages talking about this, but cannot find a resolution. Any help would be appreciated if you have found the answer.

      Simply adding the following to my taxonomy.php file is not working:

      //Get the correct taxonomy ID by slug
      $term = get_term_by( ‘slug’, get_query_var( ‘term’ ), get_query_var( ‘taxonomy’ ) );

      //Get Taxonomy Meta
      $saved_data = get_tax_meta($term->term_id,’text_field_id’);
      echo $saved_data;

  12. I am trying to add whatever I put in the WYSIWYG to the front end of the website. I honestly have no clue what I’m doing but this is my code so far:

    term_id,’wysiwyg_field_id’);

    ?>

    <a href="”>

  13. Hi,

    I used the plugin but I can get the code on my Taxonomy.php.

    I Use this code to display the field

    term_id,’text_field_id’);
    echo $saved_data;

    ?>
    Do I have to do something else?

    Thanks

  14. Hello, Specially Thanks for this Idea. This plugin is working superb. I have added three extra fields in Perticular Term add, edit option. but when i create category in it at that term at that time I can’t store value for that extra three fields. So any suggestion for that?

  15. But how do I get the data out of the archive page? you should add this also as this is a common request.

  16. Brilliant! You have no ideea how much time I spent looking for a way to add “quantities” to “products”. This not being a commerce site, it was cumbersome to have a food post tied to an Ingredients taxonomy and not to be able to modify the number of cucumbers for each post.
    Thank You!

  17. Hi – I’m having trouble getting this to work. I have the data fields visible in my custom taxonomy but I cannot call the data in my brand-description.php using the php code you pasted at the bottom of your article. It doesn’t show an error, it just doesn’t work.

    I’d really appreciate some further explanation with this if you have the time.

    Thanks

  18. This is quite a find! Been trying to solve this for a few weeks. Any idea how to add the new fields to the columns?

    • I’m also having trouble outputting anything on the page. I have this code applied and data in the fields but nothing showing on the site

      term_id,’textarea_field_id’);
      echo $saved_data;

      ?>

      • This code works on taxonomy archive page. If it is not displaying then chances are that the code is not able to get the taxonomy ID. At least that would be my guess.

        -Syed

        Admin

  19. Well, this sounds nice and did the trick on the categories but for any reason, it didn’t on a custom taxonomy of mine. Did I miss something ? Is there a hook somewhere I didn’t look at ?
    Anyway thanks a lot for those enlightening on Ohad’s work. I hanged around it wondering how on earth I could use it properly. I’m just the do-it-yourself type, not a real developper, I’m sure you’ll have understood already.
    Thanks again.

      • To clarify – Line 24 of taxonomy-fields.php

        ‘pages’ => array(‘category’), // taxonomy name, accept categories, post_tag and custom taxonomies

        CHANGE the XXX to whatever your custom taxonomy is called
        ‘pages’ => array(‘xxxxx’), // taxonomy name, accept categories, post_tag and custom taxonomies

      • Thanks editor i really appreciate for the reply, This is how class-usage-demo.php – http://pastebin.com/ctZPeS0w

        This is what i’m doing but not displaying/outputting anything what am i doing wrong..? and is it possible to display the code (if possible) anywhere in my theme…Thanks

        • The code you have is simply setting up the admin side of things. To display the code, look at the PHP code that we have shared in the article. You have to use that in your taxonomy archive file.

  20. Oh thanks you so much, I’ve been wondering how to identify tags as being English or Spanish for my bilingual site – this helps enormously :-)

  21. I actually just finished coding up custom fields for a custom taxonomy for a project I’m working on. I love the flexibility – will certainly check out the plugin for future projects!

Leave A Reply

Thanks for choosing to leave a comment. Please keep in mind that all comments are moderated according to our comment policy, and your email address will NOT be published. Please Do NOT use keywords in the name field. Let's have a personal and meaningful conversation.