WordPress Custom Post Types And Taxonomies The Right Way
An Important Update: WordPress 3.0 Post Types And Taxonomies

I remember posting about this important update that was made to the way custom post types and custom taxonomies could and should be created in order to properly set them up for full customization. I wrote about it the day after the update was pushed to the WordPress SVN in one of the beta versions.
I don't think this change got enough exposure. At the very least I didn't expect to be the only one to explain it as I did here as the only other article explaining it besides what the Codex says on it. Because of this and Antonio mentioning to me yesterday after he noticed that out of all his bookmarks for post types, no one has explained this, I decided to post a complete how-to, in setting up custom post types and taxonomies the RIGHT way. If I had known this would've been so highly overlooked down the line, I would've written a post like this instead of the less in-depth explanation I did when the change was first made.
Quick Jump Menu:
Use the links listed above to jump down to the part of this post you're interested in.
Using Labels For Post Types
The use of labels for custom post types and taxonomies is important for the fact that it helps differentiate your custom stuff from the other things in WordPress that already exist. When you go to add a new post, page, category or tag, at the top of the page it says Add New _Thing_, depending on what it is your adding. If you don't use labels to change this to read whatever the custom thing you create is, then it will default to Post for post types, and Category or Tags for taxonomies that are either hierarchical or not, respectively.
Here's what you see without using labels:


This is collage of different places post type labels are used in the dashboard, like when you add new, search or edit posts, tags categories, etc. It's also what you will see if you create custom post types or taxonomies the way everyone else has said to create them besides me, without the use of labels.
Setting up labels to show the custom post type
As I mentioned in my first post on labels, the WordPress Codex has documented this as well, if you hadn't noticed. Here's a quick review using the example they provide.
// The register_post_type() function is not to be used before the 'init'.
add_action( 'init', 'my_custom_init' );
/* Here's how to create your customized labels */
function my_custom_init() {
$labels = array(
'name' => _x( 'Books', 'post type general name' ), // Tip: _x('') is used for localization
'singular_name' => _x( 'Book', 'post type singular name' ),
'add_new' => _x( 'Add New', 'book' ),
'add_new_item' => __( 'Add New Book' ),
'edit_item' => __( 'Edit Book' ),
'new_item' => __( 'New Book' ),
'view_item' => __( 'View Book' ),
'search_items' => __( 'Search Books' ),
'not_found' => __( 'No books found' ),
'not_found_in_trash' => __( 'No books found in Trash' ),
'parent_item_colon' => ''
);
// Create an array for the $args
$args = array( 'labels' => $labels, /* NOTICE: the $labels variable is used here... */
'public' => true,
'publicly_queryable' => true,
'show_ui' => true,
'query_var' => true,
'rewrite' => true,
'capability_type' => 'post',
'hierarchical' => false,
'menu_position' => null,
'supports' => array( 'title', 'editor', 'author', 'thumbnail', 'excerpt', 'comments' )
);
register_post_type( 'book', $args ); /* Register it and move on */
}
It is obviously more coding this way compared to every other article you've probably read on this, but it is how you can make your post types more custom, since they are custom post types after all. It only takes 2 seconds more to do this anyways.
Now you will see the correct post type as shown here.

You get the idea I hope now, right? See how much better that looks, to you, your clients, or any other users of the site who will see the complete customization of your post types. They will think you are some kind of god, or something....
Additional Post Type Functions You Should Know About
The following are functions you can use for various things related to post types. The function name is linked to the line in /wp-includes/post.php where it is created for those that would like to check out the source code which makes them work. I've also added a short description for each that is used in the source to describe them.
Post Type Functions:
- post_type_exists() - Checks if a post type is registered.
- is_post_type_hierarchical( $post_type ) - Whether the post type is hierarchical. A false return value might also mean that the post type does not exist.
- get_post_type( $post ) - Retrieve the post type of the current post or of a given post.
- get_post_type_object( $post_type ) - Retrieve a post type object by name.
- get_post_types( $post ) - Get a list of all registered post type objects.
- $args - An array of key => value arguments to match against the post type objects.
- $output - The type of output to return, either post type 'names' or 'objects'. 'names' is the default.
- $operator - The logical operation to perform. 'or' means only one element from the array needs to match; 'and' means all elements must match. The default is 'and'.
- Returns an array listing post type names or objects.
- register_post_type() - Register a post type. Do not use before init.
- A simple function for creating or modifying a post type based on the parameters given.
- The function will accept an array (second optional parameter), along with a string for the post type name.
- get_post_type_capabilities() - Builds an object with all post type capabilities out of a post type object.
- Accepted keys of the capabilities array in the post type object:
- edit_post - The meta capability that controls editing a particular object of this post type. Defaults to "edit_ . $capability_type" (edit_post).
- edit_posts - The capability that controls editing objects of this post type as a class. Defaults to "edit_ . $capability_type . s" (edit_posts).
- edit_others_posts - The capability that controls editing objects of this post type that are owned by other users. Defaults to "edit_others_ . $capability_type . s" (edit_others_posts).
- publish_posts - The capability that controls publishing objects of this post type. Defaults to "publish_ . $capability_type . s" (publish_posts).
- read_post - The meta capability that controls reading a particular object of this post type. Defaults to "read_ . $capability_type" (read_post).
- read_private_posts - The capability that controls reading private posts. Defaults to "read_private . $capability_type . s" (read_private_posts).
- delete_post - The meta capability that controls deleting a particular object of this post type. Defaults to "delete_ . $capability_type" (delete_post).
- get_post_type_labels( $post_type_object ) - Builds an object with all post type labels out of a post type object.
- Accepted keys of the label array in the post type object:
- name - general name for the post type, usually plural. The same and overriden by $post_type_object->label. Default is Posts/Pages
- singular_name - name for one object of this post type. Default is Post/Page
- add_new - Default is Add New for both hierarchical and non-hierarchical types.
- add_new_item - Default is Add New Post/Add New Page
- edit_item - Default is Edit Post/Edit Page
- new_item - Default is New Post/New Page
- view_item - Default is View Post/View Page
- search_items - Default is Search Posts/Search Pages
- not_found - Default is No posts found/No pages found
- not_found_in_trash - Default is No posts found in Trash/No pages found in Trash
- parent_item_colon - This string isn't used on non-hierarchical types. (In hierarchical ones the default is Parent Page)
- _get_custom_object_labels() - Builds an object with custom-something object (post type, taxonomy) labels out of a custom-something object
- add_post_type_support( $post_type, $feature ) - Register support of certain features for a post type.
- All features are directly associated with a functional area of the edit screen, such as the editor or a meta box:
- 'title',
- 'editor',
- 'comments',
- 'revisions',
- 'trackbacks'
- 'author',
- 'excerpt',
- 'page-attributes',
- 'thumbnail',
- 'custom-fields'
Additionally, the 'revisions' feature dictates whether the post type will store revisions, and the 'comments' feature dicates whether the comments count will show on the edit screen.
- remove_post_type_support( $post_type ) - Remove support for a feature from a post type.
- post_type_supports( $post_type, $feature ) - Checks a post type's support for a given feature.
- set_post_type( $post_id = 0, $post_type = 'post' ) - Updates the post type for the post ID.
- $post_id Post ID to change post type. Not actually optional.
- $post_type Optional, default is post. Supported values are 'post' or 'page' to name a few.
- Return int Amount of rows changed. Should be 1 for success and 0 for failure.
- get_posts() - Retrieve list of latest posts or posts matching criteria.
- The defaults are:
- 'numberposts' - Default is 5. Total number of posts to retrieve.
- 'offset' - Default is 0. See { WP_Query::query() } for more.
- 'category' - What category to pull the posts from.
- 'orderby' - Default is 'post_date'. How to order the posts.
- 'order' - Default is 'DESC'. The order to retrieve the posts.
- 'include' - See { WP_Query::query() } for more.
- 'exclude' - See { WP_Query::query() } for more.
- 'meta_key' - See { WP_Query::query() } for more.
- 'meta_value' - See { WP_Query::query() } for more.
- 'post_type' - Default is 'post'. Can be 'page', or 'attachment' to name a few.
- 'post_parent' - The parent of the post or post type.
- 'post_status' - Default is 'published'. Post status to retrieve.
Alternatively to using get_posts(), you should also learn about the difference between WP_Query() and query_posts() for retrieving post information.
I plan to cover get_posts() more in a future post.
Using Labels For Taxonomies
Also mentioned in my previous post was using labels when creating custom taxonomies. This is also documented in the WordPress Codex just so you know. I will cover it a little more in-depth though.
Here's the example used in the Codex:
First snippet is hierarchical. The same thing as WordPress 'category' taxonomy.
// hook into the init action and call create_book_taxonomies() when it fires
add_action( 'init', 'create_book_taxonomies', 0 );
// create two taxonomies, genres and writers for the post type "book"
function create_book_taxonomies() {
// Add new taxonomy, make it hierarchical (like categories)
$labels = array(
'name' => _x( 'Genres', 'taxonomy general name' ),
'singular_name' => _x( 'Genre', 'taxonomy singular name' ),
'search_items' => __( 'Search Genres' ),
'all_items' => __( 'All Genres' ),
'parent_item' => __( 'Parent Genre' ),
'parent_item_colon' => __( 'Parent Genre:' ),
'edit_item' => __( 'Edit Genre' ),
'update_item' => __( 'Update Genre' ),
'add_new_item' => __( 'Add New Genre' ),
'new_item_name' => __( 'New Genre Name' ),
);
register_taxonomy( 'genre', array( 'book' ), array(
'hierarchical' => true,
'labels' => $labels, /* NOTICE: Here is where the $labels variable is used */
'show_ui' => true,
'query_var' => true,
'rewrite' => array( 'slug' => 'genre' ),
));
The next snippet is for creating non-hierarchical taxonomies such as Tags in WordPress
// Add new taxonomy, NOT hierarchical (like tags) $labels = array( 'name' => _x( 'Writers', 'taxonomy general name' ), 'singular_name' => _x( 'Writer', 'taxonomy singular name' ), 'search_items' => __( 'Search Writers' ), 'popular_items' => __( 'Popular Writers' ), 'all_items' => __( 'All Writers' ), 'parent_item' => null, 'parent_item_colon' => null, 'edit_item' => __( 'Edit Writer' ), 'update_item' => __( 'Update Writer' ), 'add_new_item' => __( 'Add New Writer' ), 'new_item_name' => __( 'New Writer Name' ), 'separate_items_with_commas' => __( 'Separate writers with commas' ), 'add_or_remove_items' => __( 'Add or remove writers' ), 'choose_from_most_used' => __( 'Choose from the most used writers' ) ); register_taxonomy( 'writer', 'book', array( 'hierarchical' => false, 'labels' => $labels, /* NOTICE: the $labels variable here */ 'show_ui' => true, 'query_var' => true, 'rewrite' => array( 'slug' => 'writer' ), )); } // End of create_book_taxonomies() function.
You may have noticed that this is very similar to how labels are used for creating post types. That's because they are almost identical! You can choose to do either method, using the $args variable to set up the arguments as shown in the post types snippet, or you can just do it as shown above in the taxonomies snippets. It's up to you, however you want to organize your code.
Here's how taxonomies with labels now looks.

I'm going to assume you get the point and I don't need to take screenshots of how the non-hierarchical taxonomy will look. It's the same deal different word.
Functions For Taxonomies You Should Know About
The following are functions which you can use when working with taxonomies. I'm not going to link to the line of each function or include descriptions of each since the file which contains them is way smaller than posts.php where the post type functions are, so if you're interested in viewing the source of these you should've have a hard time finding the line they are on.
The functions which make up taxonomies are located in /wp-includes/taxonomy.php of the WordPress source.
- get_taxonomies() - Get a list of registered taxonomy objects.
- get_object_taxonomies() - Return all of the taxonomy names that are of $object_type.
- get_taxonomy() - Retrieves the taxonomy object of $taxonomy.
- taxonomy_exists() - Checks that the taxonomy name exists.
- is_taxonomy_hierarchical() - Whether the taxonomy object is hierarchical.
- register_taxonomy - Create or modify a taxonomy object. Do not use before init.
- get_taxonomy_labels() - Builds an object with all taxonomy labels out of a taxonomy object
- register_taxonomy_for_object_type() - Add an already registered taxonomy to an object type.
- get_objects_in_term() - Retrieve object_ids of valid taxonomy and term.
- &get_term() - Get all Term data from database by Term ID.
- get_term_by() - Get all Term data from database by Term field and data.
- get_terms() - Retrieve the terms in a given taxonomy or list of taxonomies.
- is_term() - Returns the index of a defined term, or 0 (false) if the term doesn't exist.
- sanitize_term() - Sanitize Term all fields.
- wp_count_terms() - Count how many terms are in Taxonomy.
- Default $args is 'hide_empty' which can be 'hide_empty=true' or array( 'hide_empty' => true ).
- wp_insert_term() - Adds a new term to the database. Optionally marks it as an alias of an existing term.
- wp_set_object_terms() - Create Term and Taxonomy Relationships.
- &_get_term_children() - Get the subset of $terms that are descendants of $term_id.
- get_term_link() - Generates a permalink for a taxonomy term archive.
- the_taxonomies() - Display the taxonomies of a post with available options.
- get_the_taxonomies() - Retrieve all taxonomies associated with a post.
- get_post_taxonomies() - Retrieve all taxonomies of a post with just the names.
I don't think I can squeeze anymore about custom post types or taxonomies into this post without copying and pasting the complete source code from the taxonomy.php and post.php files in WordPress. That's just not going to happen, you got enough of the source already I'm sure.
Let me know what you think, and if you have comments...









User Comments
( ADD YOURS )Devin June 27
is_post_type() was changed to post_type_exists() right before WordPress 3.0 release. http://core.trac.wordpress.org/ticket/13747
Mike Schinkel June 27
@Jared: You imply that developers always need to set all the labels in the label array which is not true unless they want something special they don't get simply by setting 'label' and 'singular_label.' This post may well scare some of the neophytes away by overwhelming them when it need not be so, which is not a good thing. Also, it'd be nice if you could update the post to use post_type_exists() instead of is_post_type() as @Devin mentioned.
Jared June 28
Using labels isn't necessary, but it does make your post types more custom. It's not entirely needed though. It all depends on how complete you want your custom post types to be.
I have updated this post with the post_type_exists() function. Also, taxonomy_exists() in replacement of is_taxonomy().
The post_type_exists() function links to the line in the source where it is declared.
Mike Schinkel June 28
@Jared: Correct, you don't need to mess with the label array in order to get "Add Book", "Edit Books", etc. You only need to mess with them when something out of the ordinary is needed with wording, which I doubt happens more than 10% of the time. Your post implies that people need to do it all the time. For the other 90%, "label" and "singular_label" work fine.
Good job in updating to post_type_exists(). As westi said on the ticket[1], is_post_type() was not just deprecated but should be removed so no good using it moving forward.
[1] http://core.trac.wordpress.org/ticket/13747#comment:7
Jared June 28
singular_label was deprecated and only kept for backwards compatibility, http://core.trac.wordpress.org/changeset/14619
Unless I am reading that wrong...
Here is the thread on wp devel explaining more too. http://wpdevel.wordpress.com/2010/05/13/earlier-this-week-nikolay-committed-a-c/
It is still possible to set them up without labels, yes. Because the update was made backwards compatible. It is not required you use labels.
Mike Schinkel June 28
I'm going to have to do an about-face on that, sorry; you are correct. Seems I my knowledge on labels was a bit dated.
Bummer, what a PITA to have to specify the labels array when they could have inferred it in most cases.
µndead June 29
this post it's interest for me thnx for this
Travis July 1
So, corect me if I'm wrong...
This example creates a "Book" post type, in which "Genre" and "Writers" custom taxonomies are created and belong.
So, If I were to create a regular blog post, "Genre" and "Writers" custom taxonomies would NOT show up in the create/edit post screen?
Is this correct?
Thanks :-)
Jared July 1
No, not unless you associate them to the 'post' post type.
This line:
register_taxonomy( 'genre', array( 'book' ), array(
The taxonomy 'genre' has the callback array('book'). This is what associates it to the Book post type.
You could add other post types to the array if you wanted to add the 'genre' tax to other post types.
For example:
register_taxonomy( 'genre', array( 'post', 'book', 'movies' ), array(
This would add the genre taxonomy to posts (regular blog posts) as well as, a post type called book and another called movies.
If you wanted to use your custom taxonomies for posts and custom types alike, this is how you could do it.
Hope that helps :)
Andy Bailey July 4
This is very useful!
I've spent the past week looking at everything I can about custom post types and taxonomies, I'm even dreaming about it!!
having all the functions here in one place certainly helps too. thanks
Jared July 4
Haha, I remember when I started having dreams about it too after spending hours learning and writing code for post types. It was scary lol.
This week I've learned about a bug that can completely break the menu system. Hope I don't have bad dreams about it... :)
You might have noticed the new Snippets postings on the front page, or http://new2wp.com/snippets.
This is set up with a custom post type, that uses a custom taxonomy for Syntax to categorize the codes. :)
Sisi July 20
I have been searching the web for two days! Can someone help me on how to show Latest Post based on a taxonomy category?
Jared July 21
@Sisi Are you using a custom post type, or just a custom taxonomy for posts?
ChrisPlaneta August 14
I'm impressed. Very usefull collection of functions that will land in my cheetsheet for custom post types and taxonomies. Keep up the good work!
pixelnate August 24
Thank you, Jared. I have been working with custom post types and custom taxonomies for the last two weeks and just found this post. If I had found it when I started I wouldn't have spent two weeks banging my head against the wall. This is exactly the info I needed.
Jared August 24
Oh the fun has yet to begin for you trust me. I've been working with custom post types since february, and I still bang my head against the wall.
This is only the beginning for you, but here a good place to begin. :)
Happy to help, its not easy finding how to do some things with this stuff still.
pixelnate August 24
I just wanted to share that you can also add the default category taxonomy to a custom post with this function:
register_taxonomy_for_object_type($taxonomy, $object_type);
In case this post is found by somebody with the same issues I had (creating a custom page type with the default category taxonomy), maybe this will help them.
Here is a link for it in the codex:
http://codex.wordpress.org/Function_Reference/register_taxonomy_for_object_type
Jared August 24
Hahaha, I was about to crack up cuz I thought when first reading what you said, THAT was the function I couldn't remember for the past month now that makes posts viewed by category, of a custom post type, work as they should. **When incorporating the use of wp nav menu with post types links for the top level and their categories as subs.
I may have lost you there, it's not even half as easy as just that too. Trying to explain what I just finally figured out how to do yesterday, somehow, is like explaining why the sky is blue. I couldn't comprehend it, nevermind understand how I managed to make it work properly.
But, that register tax for object type function is not what I had thought. Actually all it does is make adding an existing tax to a registered type, from where ever you want. However, you can just do this in your register_post_type() labels array by adding this:
'taxonomies' => array( 'category', 'post_tag' ), // Add tags and categories taxonomies
The same result, thought I'm sure there may be a time and place to use the reg_tax_for_obj_type but it's not how I would add cats and tags to your post types if you can avoid it.
Jared August 24
Just wait until you come to learn about the world of displaying posts of custom post types by category and tag, and 'post' post types by a custom taxonomy.
Those are two opposite things that are un-chartered territory since it's not been possible until 3.0.
I've learned how to do both, and showing 'posts' by custom tax is much simpler, but was not simple (for me anyways).
I do plan to share how to do both these things, once I launch a custom WP site I've made.
Coming soon, like next week i hope :)
pixelnate August 25
...
'taxonomies' => array( 'category', 'post_tag' ), // Add tags and categories taxonomies
...
That is exactly what I was looking for. Thanks again.
...
Just wait until you come to learn about the world of displaying posts of custom post types by category and tag, and 'post' post types by a custom taxonomy.
...
Already soaking in it. I really like what they have done with v3. It is open for all kinds of customization, almost any kind of site is possible, as long as you know the proper php magic spells.
On a side note, hat comment system is this? Where can I find info on how to add links and quotes?
Jared August 25
Comment system? you mean the one we are talking in right here?
Um, mine? idk. It's what I made when I built this site, it's shitty I know, I need to fix a bunch of things wrong with it. It was very difficult to make this layout for it since I did not know comments.php well at the time. And once I got it working I stopped touching it cuz it's fragile, and very easy to break haha. Need to recode it now that I know how to better.
Links and quotes? If you mean the Trackbacks, that's something thats built into WP, usually they are mixed together with comments, I just separated them. Here's some stuff for doing that: http://ow.ly/2uEpG
The "Like This" up and down arrows is just the Ratings feature of the PollDaddy plugin too.
Jon Case August 26
Thanks for this. I don't claim to understand it all but I am using a theme that has custome posts and there are a few tweaks that I'd like to make. I need a strong cup of coffee and a print out of your post so I can study it before tackling my theme!
Thanks
StevieG August 28
@Jared Thank you so much for sharing this. I'm currently building a directory site using custom taxonomy within a custom post type. All is well until I want to search the custom posts by the custom tax. I just can't find any info on how to do this. Ideally, I'd like my new tax to behave just like the standard categorie and have a dropdown from which the user can select. I was hoping to be able to develop a widget liike the base Category one. Can you point me in the right direction?
Jared August 29
Here's what I wrote to make a custom tax drop-down select box for the 'syntax' taxonomy for the 'snippets' post type I made here on New2WP.
<p><?php $syntax = get_object_taxonomies('snip'); $syntaxterms=get_terms($syntax, 'orderby=count&offset=1&hide_empty=0&fields=all'); // var_dump($syntaxterms); die; ?> <select name='syntax' id='syntax' tabindex="4"> <option value='' <?php if (!count( $names )) echo "selected";?>>Select syntax</option> <?php foreach ( $syntaxterms as $code ) { echo '<option value="' . $code->slug . '" selected>' . $code->name . '</option>',"\n"; } ?> </select></p>That is probably the only chunk of code you'll be able to find for doing that. I haven't searched lately, but I'm sure it's not any easier to find any kind of info on how to do this. I had to figure it out on my own. You could just pass your search query the taxonomy and post type as the query_var to search based on the post type or tax.
Tomáš Kapler September 15
I wonder if it is possible to setup different post type for parent and child page in hierarchical post types.
Otherwise if it is some easy way to add custom meta to taxonomies for such scenario where some type of information is "under" other type of information and description/name is not enough for the parent
Karl November 2
@Jared, Thanks for the dropdown search code... I seen you were going to do a post on displaying by taxonomies and tags, how did you go with this? I'm looking to do something very similar and i'm not sure where to start.. Except it needs to be display by multiple taxonomies...
Jared November 2
@Karl I'm not sure what you mean about displaying taxonomies as tags. I can only think that this is what I might have meant, or otherwise, I never did it lol
http://new2wp.com/snippet/list-posts-for-terms-of-a-custom-taxonomy-for-any-post-type/
Karl November 3
thanks heaps Jared... first time i've seen your site, you've got some good stuff here! Also one more question: You don't have any more information on implementing your drop down search?
Brij November 23
Nice Post!!!
I have created a project collection theme based on this custom post type feature.
See following to download:
http://www.techbrij.com/342/create-project-collection-theme-wordpress-3-custom-post-type
redlex November 23
After following this tutorial, I couldn't get a couple of things to work. The permalinks will not work with the register_post_type() and arrays outlined in a function; I simply removed this and permalinks worked fine
david bill January 18
Jared, Thanks for the dropdown search code... I seen you were going to do a post on displaying by taxonomies and tags, how did you go with this
pass4sure 70-667
Byron Brown February 14
I could use some of the codes here to incorporate them on my site. Thanks for sharing!
Xav February 28
How would you do a post count for custom post type? I tried recently:
'projects',
'post_status' => 'publish',
'progress' => 'in-progress'
);
$num = count( get_posts( $args ) ); ?>
('progress' is a custom taxonomy) But it appears to be throwing randomly inflated numbers. Maybe including revisions?
Jose March 1
I´m from Spain. I read your post and copy/paste the 3 codes.
Run WP ok but when a I add new category or a new label for books I have this error message:
Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\nocanizo\wp-content\themes\FreeBizz\functions.php:1) in C:\xampp\htdocs\nocanizo\wp-includes\classes.php on line 1601
The taxonomy is saved OK but always appear this waning message.
Thanks.
Jared March 7
@Jose you most likely have a syntax error somewhere in your code. Check for missing closing parenthesis curly braces, brackets, semi-colons, etc... The error is not necessarily with the code I posted here, it could be where you paste this code into your theme, or simply some code some place else in your theme, functions.php most likely, or any files you've included into functions.php.
Try turning debugging on to see if you can find errors in your theme, in your wp-config.php find the WP_DEBUG constant, and add or change it to read:
define( 'WP_DEBUG', true );
you could/should also install the plugin Log Deprecated Notices which tells you
some other good stuff about any deprecated things in WP which could cause bugs in the newest versions
schiphol March 26
Men..keep this posts comming... I want to say that i have learned so much from this blog!
Xytras March 26
Nice article! One question:
I’m localizing a theme i’m working on. The localization works fine except for the taxonomies and the custom post types. Both keep displaying in the default language.
Anyone who can tell me what could be the reason for that? Or is not possible to localize custom post types and taxonmies?
nichive April 29
so you're telling me, by using this, I can turn my wordpress-powered blog into a real estate listing CMS?
Jared April 29
oh yeah. it's been done.
much more than that has been done too even. that's a somewhat common type of thing among WP users.
Trackbacks