15

Is it possible to change the page title with code?

For example, let's say the page's name is "Book your Order", but I want to change it to "Book Order #123".

I Google'd a bit and looked here and didn't see anything. Anyone know of a plugin or hack?

wp_title returns the page title but doesn't allow setting the page title: http://codex.wordpress.org/Function_Reference/wp_title

  • Where would the value come from? what has in that page the value of #123 ? – Sagive SEO Nov 7 '11 at 18:51
21

There is no documentation on it but you could always apply a filter to the_title like this:

add_filter('the_title','some_callback');
function some_callback($data){
    global $post;
    // where $data would be string(#) "current title"
    // Example:
    // (you would want to change $post->ID to however you are getting the book order #,
    // but you can see how it works this way with global $post;)
    return 'Book Order #' . $post->ID;
}

See these:

http://codex.wordpress.org/Function_Reference/the_title

http://codex.wordpress.org/Function_Reference/add_filter

  • This seems to override all titles. How do I override only the current title? – Petrus Theron Mar 29 '17 at 16:47
  • You would need to add a condition to the callback, e.g if ($post->ID == 45) { ... } – Nick Barrett Jul 9 '18 at 3:55
  • 3
    the_title filter no longer works in the latest versions of Wordpress, use document_title_parts or pre_get_document_title filters as detailed in other answers. – Brendan Nee Nov 15 '18 at 2:48
6

As of Wordpress 4.4, you can use the Wordpress filter document_title_parts to change the title.

Add the following to functions.php:

add_filter('document_title_parts', 'my_custom_title');
function my_custom_title( $title ) {
  // $title is an array of title parts, including one called `title`

  $title['title'] = 'My new title';

  if (is_singular('post')) {
    $title['title'] = 'Fresh Post: ' . $title['title'];
  }

  return $title;
}
  • but where do you pass in the parameter to a filter? – Tintinabulator Zea Dec 22 '18 at 5:38
  • The above function modifies the way the_title() and get_the_title() functions work - so no need to pass any parameters. – Brendan Nee Dec 25 '18 at 19:51
4

For those wishing to change the document's title attribute, I found that using the wp_title filter no longer works. Instead, use the pre_get_document_title filter:

add_filter("pre_get_document_title", "my_callback");
function my_callback($old_title){
    return "My Modified Title";
}

Source

  • 1
    thanks for coming back years later to post this update. I had been using wp_title in a plugin of mine for years and hadn't realized it was no longer working until now and your answer saved me a lot of effort. So Thank you! – MatthewLee Jan 11 at 16:35
  • @MatthewLee Glad to hear it helped you :) – Nathan Arthur Jan 11 at 18:52
2

Really depends if you're looking to display a custom title for the current page (i.e. the contents of the <title></title> tag in the header) or filter the title of pages in the page body or in listings.

In the former case (the title of the current page), try adding a filter for wp_title() like so: http://codex.wordpress.org/Plugin_API/Filter_Reference/wp_title

If you want to modify page titles across the board, filtering the_title() will do the trick: http://codex.wordpress.org/Plugin_API/Filter_Reference/the_title

  • Actually in my experience you need to filter both wp_title and the_title to cover both. – Geoffrey Mar 26 '15 at 8:59
  • I am not sure if its because of the deprecation but tis doesnt work for me. I have tried combinations and inline filters and the new apply_filters( 'pre_get_document_title', string $title ) – landed Jan 18 '17 at 18:00
  • sadly neither worked for me either. – Debbie Kurth Jun 8 at 5:46
  • This answer is nearly 6 years old; as the poster (and someone who doesn't actively work with WP anymore), I would suggest looking at the latest documentation instead. – nickb Jun 9 at 19:33
0

When having Yoast enabled you need to override the title like so:

add_filter('wpseo_title', 'custom_titles', 10, 1);
function custom_titles() {

  global $wp;
  $current_slug = $wp->request;

  if ($current_slug == 'foobar') {

    return 'Foobar';
  }
}
-1

So you want to change the title on a per page basis? Firstly setup a custom post met a box. Smashing Magazine covered this recently: http://wp.smashingmagazine.com/2011/10/04/create-custom-post-meta-boxes-wordpress/. You can then create a simple function to replace the title if the custom meta box has a value.

There are several SEO plugins that also provide this functionality. Try Yoast SEO for examples: http://wordpress.org/extend/plugins/wordpress-seo/

Hope this helps.

  • 1
    These solutions wont change the title "dynamically" but "manually". – Gustavo Aug 29 '15 at 23:31
  • 1
    worst solution ever – Vishal Kumar Sahu Oct 10 '17 at 4:54

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.