Change GUID field on create / update post

It's convenient in some cases to set real working post URL to the guid field. For example if we have difficult logic of post URL creation, it's better to save it to guid field and just take it when we need the URL.

Example code of how to save post URL to the GUID wp_posts table field.

# Change GUID field on create / update post
# in admin (the permalink writes in current structure)
add_action( 'save_post', 'permalink_to_post_guid' );

function permalink_to_post_guid( $post_id ){
	global $wpdb;

	$guid = get_permalink( $post_id );
	$wpdb->update( $wpdb->posts, [ 'guid' => wp_make_link_relative( $guid ) ], [ 'ID'=>$post_id ] );

	clean_post_cache( $post_id );
}

The same, but for specified post_type only:

# Change GUID field on create / update post
# in admin (the permalink writes in current structure)
add_action( 'save_post_posttype', 'permalink_to_post_guid' );

function permalink_to_post_guid( $post_id ){
	global $wpdb;

	$guid = get_permalink( $post_id );
	$wpdb->update( $wpdb->posts, [ 'guid' => wp_make_link_relative( $guid ) ], [ 'ID'=>$post_id ] );

	clean_post_cache( $post_id );
}