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!
CodePudding user response:
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.