WordPress Development Stack Exchange is a question and answer site for WordPress developers and administrators. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I have several sites with Custom Post Types and Taxonomies registered by different plugins. Is there a way to add or change a parameter like this

"'rewrite' => array( 'hierarchical' => true )"

by adding something to functions.php—without completely re-registering the type/taxonomy? I want to continue to use certain plugins to manage types and taxonomies, but not all parameters are provided.

share|improve this question
A custom post type and taxonomy is registered on every page call, so it should be no problem to, for example, remove it from the plugin and do the registration completely from your own code. It is also possible just copy the rewrite rules that the hierarchical parameter will generate and add them yourself. Finally, maybe the plugin has some hooks that allow to change the output? What plugins do you use? (Use @Jan when you reply in a comment and I get a notification) – Jan Fabry May 17 '11 at 15:45
@Jan I have used at least ten different CPT/taxonomy plugins in search of one that does not have bugs or unsupported parameters... I really liked More Types and More Taxonomies, but they had some problems so I'm now using Custom Press. How would I add the rewrite rules? Would that be easier or preferable to somehow hooking into/filtering the custom taxonomy registration? – supertrue May 17 '11 at 21:02
up vote 2 down vote accepted

you could modify the global variable $wp_post_types or in the case of taxonomies, $wp_taxonomies

for example, this will change the menu name and all the labels for the default Posts to Bacon:

function change_post_menu_label() {
    global $menu;
    global $submenu;
    $menu[5][0] = 'Bacon';
    $submenu['edit.php'][5][0] = 'Bacon';
    $submenu['edit.php'][10][0] = 'Add Bacon';
    $submenu['edit.php'][16][0] = 'Bacon Tags';
    echo '';
function change_post_object_label() {
    global $wp_post_types;
    $labels = &$wp_post_types['post']->labels;
    $labels->name = 'Bacon';
    $labels->singular_name = 'Bacon';
    $labels->add_new = 'Add Bacon';
    $labels->add_new_item = 'Add Bacon';
    $labels->edit_item = 'Edit Bacon';
    $labels->new_item = 'Bacon';
    $labels->view_item = 'View Bacon';
    $labels->search_items = 'Search Bacon';
    $labels->not_found = 'No Bacon found';
    $labels->not_found_in_trash = 'No Bacon found in Trash';
add_action( 'init', 'change_post_object_label' );
add_action( 'admin_menu', 'change_post_menu_label' );

source: http://new2wp.com/snippet/change-wordpress-posts-post-type-news/

share|improve this answer

WordPress has multiple functions that allow for the type of thing you're trying to do.

Check out:

  • add_post_type_support()
  • remove_post_type_support()
  • register_taxonomy_for_object_type()

If you want to remove a taxonomy, you have to reregister it—using register_taxonomy()—and then omit the post type(s) you don't want from the $object_type argument's array. Then, make sure you're hooking to function to a hook that runs after it's first registered (or on the same hook but at a lower priority).

p.s. Sorry I couldn't link to all these (not enough reputation points). All those functions have entries in the codex; just google them.

share|improve this answer

Your Answer


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.