Develop

WordPress: Rename the default “Posts” to “News” or something else

A little lesson in Client love

I’m a huge advocate for “Client Centric UX”. What I mean by that is focusing as much on the client’s user experience as we do on their target market’s user experience. Having a simple to use WordPress admin goes right along with this concept. Not everyone is familiar with WordPress…shocking, I know. Furthermore, there are a lot of people who are fairly tech-savvy but have no concept of what a “blog” does or what a “post” is.

Rename Post

[fig 1.0 post]

For this reason, I almost always rename the default “post” post type to something else. Why would I leave my client a menu item that says “Posts” when they are adding news updates, or portfolio items? When labels are not intuitive, they cause confusion…which in turn can lead to a slower learning curve for your poor, poor clients. Really, for your poor, poor self…because you know who they are going to call for instruction.

Note: I’m a huge fan of custom post types, but sometimes those aren’t even necessary. If you are only needing one type of post, just rename what you already have setup with this simple code.

Solution

Changing the “Posts” menu label involves changing the menu item itself, as well as the post object labels. In the example below we are changing “Posts” to “News”. You can, of course, change “Posts” to anything you want…just replace every instance of “News” in the code below with your desired label. All you need to do is paste this into your theme’s functions.php file.

function revcon_change_post_label() {
	global $menu;
	global $submenu;
	$menu[5][0] = 'News';
	$submenu['edit.php'][5][0] = 'News';
	$submenu['edit.php'][10][0] = 'Add News';
	$submenu['edit.php'][16][0] = 'News Tags';
}
function revcon_change_post_object() {
	global $wp_post_types;
	$labels = &$wp_post_types['post']->labels;
	$labels->name = 'News';
	$labels->singular_name = 'News';
	$labels->add_new = 'Add News';
	$labels->add_new_item = 'Add News';
	$labels->edit_item = 'Edit News';
	$labels->new_item = 'News';
	$labels->view_item = 'View News';
	$labels->search_items = 'Search News';
	$labels->not_found = 'No News found';
	$labels->not_found_in_trash = 'No News found in Trash';
    $labels->all_items = 'All News';
    $labels->menu_name = 'News';
    $labels->name_admin_bar = 'News';
}

add_action( 'admin_menu', 'revcon_change_post_label' );
add_action( 'init', 'revcon_change_post_object' );

Note:

Best practice would be to paste the above code into a functionality plugin so this travels with you no matter what theme you are using (this of course depends on the situation and the client/user). To learn more about functionality plugins, there is a good article by Justin Tadlock and also another over at WPCandy.

{ 65 Comments }

  1. Great tip. Just what I needed. It worked the first time through. Thanks!

  2. Thanks for this snippet! – really useful the example ‘News’ is a little confusing to know which is singular and which is plural.

  3. Adrian Bengtson

    Why the echo ”; on line 8?

    • Chris Perryman

      Good catch! That shouldn’t be there. I’ve used this code over and over so many times (keep in in CodeBox for Mac) that I’ve never even noticed it! I think it must have carried over from wherever I originally saw an example, or maybe I added it to test that the code was firing and had a value in there at one point. It’s been a long time! I’m going to remove it from the example ;)

  4. Ben

    How do I also rewrite the slug of the post using this method, without changing the permalink settings?

  5. Hello,
    Thanks for your code but you should write it “multilingual ready”.

    For example this line : $labels->name = ‘News’;

    should be : $labels->name = __(‘News’, ‘YOUR-TEXTDOMAIN’);

    …etc…

    Have a nice day

    • Chris Perryman

      Thanks for the suggestion ;) I work mostly on custom solutions and rarely are our clients wanting multilang support…but you are correct! Especially if you are doing commercial theme/plugin development!

{ Respond }

Leave a response