Take the 2-minute tour ×
WordPress Development Stack Exchange is a question and answer site for WordPress developers and administrators. It's 100% free, no registration required.

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.

share|improve this question
    
post your code for get_taxonomies and get_terms. Also try setting public argument to true. –  booota Sep 22 '11 at 7:17

2 Answers 2

up vote 1 down vote accepted

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;
    }
}
share|improve this answer
    
If understand correctly you are suggesting that I ditch the function wrapper run it directly from the plugin. I'll try this. –  Jeff Sebring Sep 22 '11 at 15:44
    
Removing the wrapper results in this error - Fatal error: Call to a member function add_rewrite_tag() on a non-object –  Jeff Sebring Sep 22 '11 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. –  Jeff Sebring Sep 22 '11 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. –  rofflox Sep 22 '11 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. –  Jeff Sebring Sep 23 '11 at 16:38

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
share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

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