I’m trying to save post id and keyword (Yoast Focus Keyword) to a custom table when post is created or updated via save_post
action. It saves everything fine on Publish (first-time) but when I update the post, it gets old value for focus keyword from database and doesn’t save the new value.
for example
Focus Keyword (Publish) = “Hello World” (works fine and keyword is stored properly)
Focus Keyword (1st Update) = “Hello” (Doesn’t work and keeps “Hello World” in custom table)
Focus Keyword (2nd Update) = “Hello again” (It saves “Hello”)
So basically the problem is that get_post_meta($post_id, ‘_yoast_wpseo_focuskw’, true) returns which is already in the database and not the new value that is being saved.
What is the best way to get the new value while the post is being saved via save_post
action?
$_POST[‘_yoast_wpseo_focuskw’] won’t work because Yoast Focus Keyword input field doesn’t have name set on input field. Screenshot
Any help would be appreciated. Thanks
This is my code.
add_action('save_post', 'my_custom_table');
function my_custom_table($post_id) {
global $wpdb;
$table_name = $wpdb->prefix . "custom_table";
$data = [
'post_id' => $post_id,
'keyword' => get_post_meta( $post_id, '_yoast_wpseo_focuskw', true )
];
if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE ) {
return;
} else {
//check if new post so insert
if( strpos( wp_get_raw_referer(), 'post-new' ) > 0 ) {
if (get_post_status($post_id) === 'publish') {
$wpdb->insert(
$table_name,
$data
);
}
} else {
$wpdb->update(
$table_name,
$data,
array(
'post_id' => $post_id
),
array( '%d', '%s' ),
array( '%d' )
);
}
}
}
2 Answers
WordPress fires the updated_{$meta_type}_meta hook which fires after the metadata is updated. In your case, the hook would be updated_post_meta
and you could have your function run on that hook instead of the save_post
hook.