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

How to change just wordpress post title but not menu items.

add_filter('the_title', 'wordpress_title');
function wordpress_title(){
  return 'New title';

enter image description here

share|improve this question
Use in_the_loop() conditional check. – amit Sep 7 '12 at 8:00
add_filter('the_title', 'wordpress_title');
function wordpress_title($title){

    //Return new title if called inside loop
    if ( in_the_loop() )
        return 'New title';

    //Else return regular   
    return $title;


Have you tried the in_the_loop() conditional check to return new title only if called inside loop. That means nav menu's will not get affected.

share|improve this answer

If you're using custom nav menus, you can do this entirely without code. Go to Appearance -> Menus and change the "Navigation Label" of each menu item you want to be different.

share|improve this answer
<?php add_filter('the_title', function($title) { return '<b>'. $title. '</b>';}) ?> 
share|improve this answer
Menu items ant post name now bold. I need change just post title (<h2>) and not menu items. – qq3 Oct 8 '11 at 13:49
Modify the theme, and not the filter. – keatch May 10 '12 at 7:25

You need the right set of contditions:

  • Inside the loop
  • The ID of the post matches the id from the URL (a bit complex)
  • ...Other optional conditions

Place this in your plugin or theme:

add_filter( 'the_title', 'change_my_title');
function change_my_title ($title) {
    if ( in_the_loop() && get_the_ID() === url_to_postid(full_url($_SERVER))) {
        $title = $title . " added by plugin";
    return $title;

// Function found here: http://stackoverflow.com/a/8891890/358906
function full_url($s) {
    $ssl = (!empty($s['HTTPS']) && $s['HTTPS'] == 'on') ? true:false;
    $sp = strtolower($s['SERVER_PROTOCOL']);
    $protocol = substr($sp, 0, strpos($sp, '/')) . (($ssl) ? 's' : '');
    $port = $s['SERVER_PORT'];
    $port = ((!$ssl && $port=='80') || ($ssl && $port=='443')) ? '' : ':'.$port;
    $host = isset($s['HTTP_X_FORWARDED_HOST']) ? $s['HTTP_X_FORWARDED_HOST'] : isset($s['HTTP_HOST']) ? $s['HTTP_HOST'] : $s['SERVER_NAME'];
    return $protocol . '://' . $host . $port . $s['REQUEST_URI'];
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.