Take the 2-minute tour ×
WordPress Development Stack Exchange is a question and answer site for WordPress developers and administrators. It's 100% free, no registration required.

The WordPress SEO plugin by Yoast allows users to add SEO titles and meta descriptions to taxonomy term archive pages. These are then used in the head of the document.

I´m trying to display the SEO title of taxonomy terms as an H1 in my taxonomy archive template.

To do this in a post, post type or page is easy:

echo get_post_meta($post->ID, '_yoast_wpseo_title', true); 

On archive templates this doesn´t work.

Does anyone know how to get this to work?

Screenshot example

This is the title of a specific tag term. I´m trying to display this title - but then for a custom taxonomy term - in my archive templates.

The tag archive edit screen

Final code

This is what I ended up using in my archive.php template. It works if you´re using a custom taxonomy. For tags or categories have a look at Mike Madern´s answer below.

<h1 class="archive-title">
<?php
if ( is_tax() ) :                                                                   
    $taxonomy = get_queried_object()->taxonomy;
    $term_id = get_queried_object()->term_id;
    $meta   = get_option( 'wpseo_taxonomy_meta' );
    $title  = $meta[$taxonomy][$term_id]['wpseo_title'];
    //printf( '<pre>%s</pre>', print_r( get_option( 'wpseo_taxonomy_meta' ), 1 ) );
    if ( isset($meta) && !empty($title) ) :         
        echo apply_filters( 'the_title', $title );
    else :
        single_term_title();    
    endif;
endif;                              
?>
</h1>  
share|improve this question

2 Answers 2

up vote 4 down vote accepted

Get Archive SEO titles

If you defined a Custom Post Type archive title you can get that by:

$titles = get_option( 'wpseo_titles' );
$title  = $titles['title-ptarchive-POST_TYPE'];

echo apply_filters( 'the_title', $title );

Remember to replace POST_TYPE by your own Custom Post Type.

To display all the wpseo_title variables, you can use:

printf( '<pre>%s</pre>', print_r( get_option( 'wpseo_titles' ), 1 ) );

So you can easily pick the one you need.

Get Term SEO titles

Categories

By using this code you can get the SEO title you defined:

$cat_id = get_query_var( 'cat' );
$meta   = get_option( 'wpseo_taxonomy_meta' );

$title  = $meta['category'][$cat_id]['wpseo_title'];

echo apply_filters( 'the_title', $title );

Tags

By using this code you can get the SEO title you defined:

$tag_id = get_query_var( 'tag' );
$meta   = get_option( 'wpseo_taxonomy_meta' );

$title  = $meta['post_tag'][$tag_id]['wpseo_title'];

echo apply_filters( 'the_title', $title );

To display all wpseo_taxonomy_meta variables, you can use:

printf( '<pre>%s</pre>', print_r( get_option( 'wpseo_taxonomy_meta' ), 1 ) );

This way you can see the structure and available variables.

share|improve this answer
    
You added the title in SEO > titles & metas > Post Types? –  Mike Madern Mar 7 '13 at 11:08
    
I improved my answer with the solution :-) –  Mike Madern Mar 7 '13 at 11:51
    
I'm guessing you missed my last post edit :-P I added a version with $tag_id. –  Mike Madern Mar 7 '13 at 12:11
1  
Thanks so much for the code, I´d never be able to figure this out. I made a few minor changes to get it to work with custom taxonomies. –  Mattvic Mar 7 '13 at 12:45

On archive page in post loop add following line of code to make it work

echo get_post_meta(get_the_ID(), '_yoast_wpseo_title', true); 

Tell me whether it is working for you or i will provide another solution.

share|improve this answer
    
That didn´t work unfortunately. It shows the SEO title of the first post in the archive. I´ll probably have to dive into the DB to see where this data is stored. –  Mattvic Mar 7 '13 at 10:22
    
Are you using it in loop? Can you show me the code? –  Vinod Dalvi Mar 7 '13 at 10:28
    
I´ve added my code. Not sure if I explained that I wanted to output the page title, not the titles of each post in the loop. –  Mattvic Mar 7 '13 at 10:45

Your Answer

 
discard

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.