How to set screen options layout value for a single page

Here’s a solution that will force a one column screen layout for any posts in the $one_column_layout_overrides array. Per the code in the original question, post type support for the editor is also removed for these posts.

Screen layout options are stored in a user option for each post type. Like standard options, user option values can be filtered on the fly.

This solution uses the dynamic filter get_user_option_{$option}, where {$option} is the name of the user option to filter. In this case the option is named screen_layout_{$post->post_type} where {$post->post_type} is the post type being edited.

So, to override the user option for layout settings for the page post type, the filter would be: get_user_option_screen_layout_page.

Checks are in place to ensure that we only process posts in the $one_column_layout_overrides array because we are overriding an option that applies to all posts of a particular type.

/**
 * Override the Screen Options > Layout setting for list of defined posts.
 * These posts will be forced to use a 1 column layout and
 * will have post type support for the editor removed.
 */     
add_action( 'admin_init', 'wpse_override_screen_layout_columns' );
function wpse_override_screen_layout_columns() {
    // Get the ID of the current post. Bail if we can't.
    $post_id = $_GET['post'];
    if ( ! $post_id ) {
        return;
    }   

    // Array of post IDs that will be forced to one column layouts.
    // Customize array values to fit your needs.
    $one_column_layout_overrides = [
        13459,
    ];

    // Bail if this post is not one that we want to process.
    if ( ! in_array( $post_id, $one_column_layout_overrides ) ) {
        return;
    }   

    // Get the post object. Bail if this fails.
    $post = get_post( $post_id );
    if ( ! $post ) {
        return;
    }   

    /**
     * Dynamic filter for the option "screen_layout_{$post->post_type}".
     *
     * The dynamic portion of the hook name, `$option`, refers to the user option name.
     *
     * @param mixed   $result Value for the user's option.
     * @param string  $option Name of the option being retrieved.
     * @param WP_User $user   WP_User object of the user whose option is being retrieved.
     */
    add_filter( "get_user_option_screen_layout_{$post->post_type}",
      function( $result, $option, $user ) {
        // Override result to 1 column layout.
        $result = 1;

        return $result;
        }, 10, 3
     );

    // Remove editor support for this post type.
    remove_post_type_support( $post->post_type, 'editor' ); 
}

tech