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. Thanks for the tip. I’m sure this will prove handy when I have such a need. Loved the “you know who they are going to call for instruction” part, haha :D

  2. Bala

    Hi Chris,

    I was going through your article it is very useful and i have WordPress website with Tesseract theme. I have replaced the code as per your instruction but nothing is working.

    Could you please help me where i have to paste the code and why mine is not working.

    Regards,
    Bala

    • Bala

      Hi Chris,

      I am able to see the changes only in admin page but it is not reflecting in the website. In the website still it is showing recent posts and older post …newer post…

      How i change this fields.

      Thanks for your help.

      Regards,
      Bala

    • Chris Perryman

      Hi Bala,

      So the code updates the Admin labels, but what you’re seeing is coming from your theme template files. I’m not sure what theme you are using, or if it’s a child theme — but it’s not a good idea to edit a parent theme directly because if you update it your changes will be erased. If you ARE using a child theme, you can try looking for files called “index.php” and “single.php”…it’s most likely that the labels you want to change are in those. If it’s not a child theme you can set one up be following this tutorial: http://www.wpbeginner.com/wp-themes/how-to-create-a-wordpress-child-theme-video/ or this one: https://codex.wordpress.org/Child_Themes. If you’re not familiar with the purpose of a child theme, it let’s you override theme style/functionality, but secures your changes since they are now in a “new theme” that you have created.

    • Bala

      Hi Chris,

      Thank you for your time and response. Yes, you are correct the settings in the child theme and i managed to change the posts name.

      Regards,
      Bala.

  3. Worth noting that this will cause the post type to show up even if the current user can’t access it. You can avoid that by adding conditionals:

    if($menu[5][0]){$menu[5][0] = ‘News’;}
    if($submenu[‘edit.php’][5][0]){$submenu[‘edit.php’][5][0] = ‘News’;}
    if($submenu[‘edit.php’][10][0]){$submenu[‘edit.php’][10][0] = ‘Add News’;}

    • Chris Perryman

      Nice catch! I’d never personally run into a scenario where it should have been hidden…thanks for the update!

    • We were getting errors in the backend for certain user types when wordpress debug was turned on. Using isset() in the if statement fixed this for us:

      if ( isset( $menu[5][0] ) ){ $menu[5][0] = ‘News’; }
      if ( isset( $submenu[‘edit.php’][5][0] ) ){ $submenu[‘edit.php’][5][0] = ‘News’; }
      if ( isset( $submenu[‘edit.php’][10][0] ) ){ $submenu[‘edit.php’][10][0] = ‘Add News’; }

    • Chris Perryman

      Thanks for the fix!!

  4. Gerardo

    Very useful, Thanks!

{ Respond }

Leave a response