wordpressyoast

Yoast wpseo_title visible in page Yoast SEO section


I want to populate the Yoast SEO title with a custom generated text string (functions.php).

The following add_filter function does provide the right output in my page's sourcecode.

function seoTitelHomepage() {
  return is_page(get_option('page_on_front')) ? jet_engine()->listings->data->get_option( 'pwp-options::seo-titel-homepage' ) : false;
}
add_filter('wpseo_title', 'seoTitelHomepage');

But since I use a filter function, I only change the sourcecode on output. Therefore the data is not written to the Database.

What I would like is to have my custom text being populated in the wpseo_title database field, in order to see this text also in my Yoast SEO section in my page details. That way, the Yoast 'analytics / scoring' will also work and I can see the nice preview displayed above of the Google result overview.

Any help is greatly appreciated!


Solution

  • I fixed it myself, below answer is for anyone who needs it.

    function seoHomepageTitle() {
      $homepageId = get_option('page_on_front');
      $meta_key = "_yoast_wpseo_title";
      $meta_value = jet_engine()->listings->data->get_option( 'pwp-options::seo-titel-homepage' );
      isset($homepageId , $meta_value) ? update_post_meta($homepageId , $meta_key, $meta_value) : false;
     }
    
    add_action('updated_postmeta', 'seoHomepageTitle');
    

    The trick was the right action hook; updated_postmeta.

    A list of Yoast meta keys can be found here: https://shellcreeper.com/yoast-seo-meta-keys-table/

    I am open for feedback on the above code, to make it more robust.