To execute update_post_meta after the permalink is customized, you can use the save_post hook instead of wp_after_insert_post. Here’s how you can modify your code:
add_action('save_post', 'add_permalink_to_new_post', 10, 2);
function add_permalink_to_new_post($post_id, $post) {
// Check if this is a new post
if ($post->post_date_gmt == $post->post_modified_gmt) {
// Only run this on a newly created post
update_post_meta($post_id, 'canonical_permalink', get_permalink($post_id));
}
}
In the updated code:
- I’ve changed the hook to
save_post, which fires after a post is saved or updated. - Inside the
add_permalink_to_new_postfunction, we check if thepost_date_gmtandpost_modified_gmtare the same. If they are, it means that the post is newly created, as the modification date hasn’t been updated yet. - If it’s a newly created post, we update the
canonical_permalinkpost meta with the customized permalink usingget_permalink($post_id).
This way, the update_post_meta function will only be called after the permalink is customized for a newly created post, ensuring that you get the permalink you want without any issues with ?p=[ID]. You can now use this updated code in your WordPress theme or plugin to achieve the desired functionality.