Leave a Reply

4 comments

  1. 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.

  2. 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.

  3. 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:

                /** Method 1. Tap into the options directly. **/
                $meta = get_option( 'wpseo_taxonomy_meta' ); // needed only once, so keep this outside/before your foreach loop.
    
                $posttags = get_the_tags();
                if ($posttags) {
                    foreach( $posttags as $tag ) {
                        echo $meta['post_tag'][$tag->term_id]['wpseo_focuskw'];
                    }
                }
    

    This is basically the approach used by Mike at the end of his post.

    or

                /** Method 2. Use Yoast's function. **/
                $posttags = get_the_tags();
                if ($posttags) {
                    foreach( $posttags as $tag ) {
                        echo WPSEO_Taxonomy_Meta::get_term_meta( $tag->term_id, 'post_tag', 'focuskw' );
                    }
                }
    

    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 for if 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 the wp_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 just tag, just check out the URLs when you edit a category or a tag: it’ll show …taxonomy=category… or the like.

  4. 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'];