I'm building a website and I need to have the Yoast description programmatically added after saving a post (a custom post type in my case).

Now, since I'm using Advanced Custom Fields, and I also need some custom fields populated programmatically, I created a function in functions.php and called it this way:

add_action( 'acf/save_post', 'atc_set_element_intro', 20 );

...so it's fired every time a post is saved. This is the function:

function atc_set_element_intro( $post_id ){
  if( get_post_type( $post_id ) == 'giochi' ){

    // [CUT]
    // Here I generate the strings ($intro and $intro_y) to fill the custom fields with 

    update_field( 'field_5d0be8f40addf', $intro, $post_id );
    update_post_meta( $post_id, '_yoast_wpseo_metadesc', $intro_y );
  } else {

Now, the "update_field" works perfectly fine, and it adds a value on a custom field of my choice. The "update_post_meta" isn't working, unless I add a die() or wp_die() after it. In that case, I see a blank screen on save, and then checking my post I see that it added the Yoast description I wanted. But of course I can't die() on that function.

I guess there's something after the execution of that function that rewrites the Yoast description. What can I do to prevent that? Thank you.

1 Answer 1


After days of trying I managed to fix it myself.

Instead of using update_post_meta, I just did this:

$_POST[ "yoast_wpseo_metadesc" ] = $intro_y;

It works perfectly.

Hope this can help someone.

  • Man... thank you!! I can't even imagine how long that would've taken me to figure out.
    – Gavin
    May 1, 2022 at 18:20

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.