7

I've created a custom taxonomy. It's working just as expected, aside from it is not showing in the get_taxonomies array. get_terms function returns an invalid taxonomy error.

I want to use get_terms to loop through the Double India Pale Ales and print each name for a select box.

Here is the code used to register it.

add_action( 'init', 'double_ipa_init' );

function double_ipa_init()  {
    register_taxonomy(
        'double-ipa',
        array (
            0 => 'post',
            1 => 'page',
        ),
        array(
            'hierarchical' => true,
            'label' => 'Double IPAs',
            'show_ui' => true,
            'query_var' => true,
            'rewrite' => array(
                'slug' => 'double-ipa'
            ),
        'singular_label' => 'Double IPA'
        )
    );
}

This code is in a plugin, and is on Multisite.

Thanks in advance for your help.

1
  • post your code for get_taxonomies and get_terms. Also try setting public argument to true. Commented Sep 22, 2011 at 7:17

3 Answers 3

14

The Invalid Taxonomy error will be raised by the function get_terms(). You're registring your taxonomy on the init action hook. Therefore you have to call your get_terms() function on the same or a later hook.

Try this snippet. It should display all term names of your taxonomy, regardless if the term is empty.

add_action('init', 'wpse29164_registerTaxonomy');
function wpse29164_registerTaxonomy() {
    $args = array(
        'hierarchical' => true,
        'label' => 'Double IPAs',
        'show_ui' => true,
        'query_var' => true,
        'rewrite' => array(
            'slug' => 'double-ipa'
        ),
        'singular_label' => 'Double IPA'
    );

    register_taxonomy('double-ipa', array('post', 'page'), $args);

    $terms = get_terms('double-ipa', array('hide_empty' => false));
    foreach ($terms as $term) {
        echo $term->name;
    }
}
5
  • If understand correctly you are suggesting that I ditch the function wrapper run it directly from the plugin. I'll try this. Commented Sep 22, 2011 at 15:44
  • Removing the wrapper results in this error - Fatal error: Call to a member function add_rewrite_tag() on a non-object Commented Sep 22, 2011 at 16:27
  • The problem I'm having is with the order in which I'm running the code that builds the pages vs the taxonomies. The solution will be in finding a creative way to move memory around to my functions. Commented Sep 22, 2011 at 17:14
  • @Jeff The above code should also be wrapped inside a function and called on the init action hook. Sorry for the confusion.
    – Roman
    Commented Sep 22, 2011 at 17:15
  • Yea, I had actually never tried to register from plugins_loaded. The problem was with where I was running my options page code. Thanks for your help. Commented Sep 23, 2011 at 16:38
7

You're looking to use get_terms() before 'Init' action hook.

Here's the order of the hooks run in a typical request:

muplugins_loaded
registered_taxonomy
registered_post_type
plugins_loaded
sanitize_comment_cookies
setup_theme
load_textdomain
after_setup_theme
auth_cookie_malformed
auth_cookie_valid
set_current_user
**init**
widgets_init
register_sidebar
wp_register_sidebar_widget
wp_default_scripts
wp_default_stypes
admin_bar_init
add_admin_bar_menus
wp_loaded
parse_request
send_headers
parse_query
pre_get_posts
posts_selection
wp
template_redirect
get_header
wp_head
wp_enqueue_scripts
wp_print_styles
wp_print_scripts
0

I got the same issue before, but using WP_Term_Query helped me retrieve what i needed give it a try it should work. More details here : https://developer.wordpress.org/reference/classes/WP_Term_Query/__construct/

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.