Is there a way to have always the the_title() tag also includes a custom field called subtitle?

I want to have a title like this: "subtitle-custom-field: Post Title". For example, "Cool: The new TV show from Werner Herzog."

In this case, cool would be the custom field value, and the new TV... would be the_title().

I am getting this at the moment with the following code:

<h1><?php $values = get_post_custom_values("myCustomField"); echo $values[0]; ?>: <?php the_title(); ?>"><?php $values = get_post_custom_values("myCustomField"); echo $values[0]; ?>

<p><?php the_title(); ?></p></h1>

The Problem is, that Google indexes the posts sometimes with the custom field in title, sometimes without it - which in some cases makes no sense. I also gave all possible "title tags" the complete title the same way in the title= attribute.

Is there any way to tell WordPress if there's a custom field subtext, print it always in front of the post_title?

  • 1
    What theme are you using? Link it please (if custom: show your header.php code). And please also edit your post and format code properly. Thanks. – kaiser Sep 5 '12 at 15:51
function add_subtitle($title, $id) {
    $subtitle = get_post_meta($id, 'myCustomField', true);
    $new_title = $title;
        $new_title = $subtitle . ': ' . $new_title;
    return $new_title;
add_filter('the_title', 'add_subtitle', 10, 2);

Basically, this uses the the_title filter to add the subtitle to your title. It only adds it if that custom field is available, otherwise, it leaves the title alone.

| improve this answer | |
  • +1, I was writing similar answer, but you beat me, so added an alternative method. – amit Sep 5 '12 at 16:46
  • Using filter is recommended unless you don't want the change globally ( ie - Other plugin/function using the_title() or get_the_title() gets the new formatted title if filter is used ) – amit Sep 5 '12 at 16:49
  • @amit which is why I did a check for that custom field he is using as the subtitle. If the post doesn't have it, the title isn't effected. – Manny Fleurmond Sep 5 '12 at 16:54

the_title() Accept parameters, we can use them to pass the custom field value to show either before or after the title.

Example -

<?php the_title( get_post_meta($post->ID, 'myCustomField', TRUE) ); ?>

Note - Make sure you set the 3rd parameter as TRUE, which will return a single STRING,

Edit #1-

 *  The OneLiner ( Note the DOT between two strings ) 
 *  OutPut - Foo: the post title
the_title( get_post_meta($post->ID, 'myCustomField', TRUE) . ': ');

Reference Codex - Function Reference - the title()

| improve this answer | |
  • Didn't realize it took arguments like that. Pretty sweet. – Manny Fleurmond Sep 5 '12 at 16:14
  • Nice - and how can I set that the custom field shows up before the title? And how could I do a ':' betwenn them? – ad2003 Sep 6 '12 at 14:12

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.