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' )
);
}
}
}