How to change just wordpress post title but not menu items.
add_filter('the_title', 'wordpress_title');
function wordpress_title(){
return 'New title';
}
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.
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.
<?php add_filter('the_title', function($title) { return '<b>'. $title. '</b>';}) ?>
You need the right set of contditions:
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'];
}
in_the_loop()
conditional check.