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.
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>
Get Archive SEO titles
If you defined a Custom Post Type archive title you can get that by:
Remember to replace
POST_TYPE
by your own Custom Post Type.To display all the
wpseo_title
variables, you can use: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:
Tags
By using this code you can get the SEO title you defined:
To display all
wpseo_taxonomy_meta
variables, you can use:This way you can see the structure and available variables.
On archive page in post loop add following line of code to make it work
Tell me whether it is working for you or i will provide another solution.
Getting the focus keyword for categories and tags
To get the focus keyword of a Category or Tag programmatically, you can use either of these two methods:
This is basically the approach used by Mike at the end of his post.
or
I tend to prefer the second approach because this way I don’t have to fetch or care about getting the meta option myself.
In your
functions.php
, you may want to test forif class_exists( 'WPSEO_Taxonomy_Meta' )
and then maybe wrap the Yoast function into a functon of your own, to be safe in case you ever were to stop using Yoast SEO down the line.Some background
As mentioned in the original question, something like
get_post_meta( $tag->term_id, '_yoast_wpseo_focuskw', true);
won’t work for categories and pages (it will return nothing.)So why is that?
That’s because, for categories and tags, the focus keyword is saved elsewhere in the database. Instead of being saved inside of the
wp_postmeta
table as usual, it’s buried deep inside of thewp_options
table, as a JSON object.The methods above let us access these values.
Finally, if you’re like me and can’t remember the name of taxonomies (e.g.: it’s not obvious why tags use taxonomy
post_tag
and not justtag
, just check out the URLs when you edit a category or a tag: it’ll showâ¦taxonomy=categoryâ¦
or the like.Reply Getting the focus keyword for categories and tags
// it work thankyou
// with rest api
get /wp-json/wp/v2/categories?slug=
slug_name
plugin.in use Method 1
change line
$meta['post_tag'][$tag->term_id]['wpseo_focuskw'];
$meta['category'][$param_post_id]['wpseo_focuskw'];