Index: src/wp-admin/includes/options.php
===================================================================
--- src/wp-admin/includes/options.php	(revision 48709)
+++ src/wp-admin/includes/options.php	(working copy)
@@ -112,9 +112,11 @@
 	jQuery(document).ready(function($){
 		var section = $('#front-static-pages'),
 			staticPage = section.find('input:radio[value="page"]'),
-			selects = section.find('select'),
+			selects = section.find('.staticPages select'),
+            homepage_types = section.find('select#homepage_types')
 			check_disabled = function(){
 				selects.prop( 'disabled', ! staticPage.prop('checked') );
+                homepage_types.prop( 'disabled', staticPage.prop('checked') );
 			};
 		check_disabled();
 		section.find( 'input:radio' ).change( check_disabled );
Index: src/wp-admin/options-reading.php
===================================================================
--- src/wp-admin/options-reading.php	(revision 48709)
+++ src/wp-admin/options-reading.php	(working copy)
@@ -67,28 +67,93 @@
 }
 ?>
 
-<?php if ( ! get_pages() ) : ?>
-<input name="show_on_front" type="hidden" value="posts" />
-<table class="form-table" role="presentation">
-	<?php
-	if ( 'posts' != get_option( 'show_on_front' ) ) :
-		update_option( 'show_on_front', 'posts' );
-	endif;
+<?php
 
-else :
+/**
+ * this fillter overrides which post type are show in the dropdown
+ *
+ * @uses get_post_types
+ *
+ * @param array $args
+ * @return $args
+ *
+ */
+$post_types_allowed_on_home_page = apply_filters( 'post_types_allowed_on_home_page', array_keys( get_post_types( array( 'show_in_home_page_list' => true ) ) ) );
+$args = array(
+	'post_type'     =>	$post_types_allowed_on_home_page,
+	'post_status'	=>	'publish',
+	'fields'        => 'ids'
+);
+$allowed_pages = new WP_Query( $args );
+
+//if ( empty( $allowed_pages->posts ) ) : ?>
+<!--<input name="show_on_front" type="hidden" value="posts" />-->
+<!--<table class="form-table" role="presentation">-->
+<!--    <tr>-->
+<!--        <th scope="row">--><?php //_e( 'Your homepage displays' ); ?><!--</th>-->
+<!--        <td>--><?php
+//            $content_type_links = array();
+//            foreach ($post_types_allowed_on_home_page as $type ){
+//	            $content_type_links[] = sprintf('<a href="%s">%s</a>',
+//		            'edit.php?post_type=' . $type, ucfirst( $type ) );
+//            }
+//        printf(
+//            /* translators: %s: URL to Pages screen. */
+//            __( 'No selectable pages found! Add at least one of these content types %s' ),
+//            implode( ', ', $content_type_links )
+//            );
+//        ?>
+<!--        </td>-->
+<!--	--><?php
+//	if ( 'posts' !== get_option( 'show_on_front' ) ) :
+//		update_option( 'show_on_front', 'posts' );
+//	endif;
+//
+//else :
 	if ( 'page' === get_option( 'show_on_front' ) && ! get_option( 'page_on_front' ) && ! get_option( 'page_for_posts' ) ) {
 		update_option( 'show_on_front', 'posts' );
 	}
-	?>
+ 	?>
 <table class="form-table" role="presentation">
 <tr>
 <th scope="row"><?php _e( 'Your homepage displays' ); ?></th>
 <td id="front-static-pages"><fieldset><legend class="screen-reader-text"><span><?php _e( 'Your homepage displays' ); ?></span></legend>
 	<p><label>
-		<input name="show_on_front" type="radio" value="posts" class="tog" <?php checked( 'posts', get_option( 'show_on_front' ) ); ?> />
-		<?php _e( 'Your latest posts' ); ?>
+        <input name="show_on_front" type="radio" value="posts" class="tog" <?php
+        $allowed_archives_on_home_page = array( 'posts') + $post_types_allowed_on_home_page;
+        unset( $allowed_archives_on_home_page['page'] );
+        checked( in_array( get_option( 'show_on_front' ), $allowed_archives_on_home_page, true ) ); ?> />
+        <?php
+        if( 1 === count( $allowed_archives_on_home_page ) ) {
+	        _e( 'Your latest posts' );
+        } else {
+		$output = "<select name='show_archive_on_front' id='homepage_types'>\n";
+		foreach ( $allowed_archives_on_home_page as $post_type ){
+		    $post_type = ( 'posts' === $post_type ) ? 'post' : $post_type;
+			$output .= sprintf( '<option %s>%s</option>', $post_type, get_post_type_object( $post_type )->labels->name ) ;
+        }
+		$output .= "</select>\n";
+
+        printf( __( 'Your latest %s' ), $output );
+        }
+		?>
 	</label>
 	</p>
+       <?php if ( empty( $allowed_pages->posts ) ) : ?>
+        <p> <?php
+	       $content_type_links = array();
+	       foreach ($post_types_allowed_on_home_page as $type ){
+		       $content_type_links[] = sprintf('<a href="%s">%s</a>',
+			       'edit.php?post_type=' . $type, ucfirst( $type ) );
+	       }
+	       printf(
+	       /* translators: %s: URL to Pages screen. */
+		       __( 'No selectable pages found! Add/Publish at least one of these content types %s' ),
+		       implode( ', ', $content_type_links )
+	       );
+	       ?>
+        </p>
+       <?php else : ?>
 	<p><label>
 		<input name="show_on_front" type="radio" value="page" class="tog" <?php checked( 'page', get_option( 'show_on_front' ) ); ?> />
 		<?php
@@ -100,22 +165,30 @@
 		?>
 	</label>
 	</p>
-<ul>
+<ul class="staticPages">
 	<li><label for="page_on_front">
 	<?php
+
+	$output = "<select name='page_on_front' >\n";
+	foreach ( $post_types_allowed_on_home_page as $post_type ){
+		$post_type = ( 'posts' === $post_type ) ? 'post' : $post_type;
+		$output .= sprintf( '<optgroup label="%s">', get_post_type_object( $post_type )->labels->name );
+		$args = array(
+			'post_type'     =>	$post_type,
+			'post_status'	=>	'publish',
+		);
+		$cpt_posts  = new WP_Query( $args );
+		foreach ( $cpt_posts->posts as $cpt_post ) {
+			$output .= sprintf( '<option %s>%s</option>', $cpt_post->ID, $cpt_post->post_name ) ;
+        }
+		$output .= '</optgroup>';
+	}
+	$output .= "</select>\n";
+
+
 	printf(
 		/* translators: %s: Select field to choose the front page. */
-		__( 'Homepage: %s' ),
-		wp_dropdown_pages(
-			array(
-				'name'              => 'page_on_front',
-				'echo'              => 0,
-				'show_option_none'  => __( '&mdash; Select &mdash;' ),
-				'option_none_value' => '0',
-				'selected'          => get_option( 'page_on_front' ),
-			)
-		)
-	);
+		__( 'Homepage: %s' ), $output );
 	?>
 </label></li>
 	<li><label for="page_for_posts">
Index: src/wp-admin/options.php
===================================================================
--- src/wp-admin/options.php	(revision 48709)
+++ src/wp-admin/options.php	(working copy)
@@ -137,6 +137,7 @@
 		'show_on_front',
 		'page_on_front',
 		'page_for_posts',
+		'show_archive_on_front',
 		'blog_public',
 	),
 	'writing'    => array(
Index: src/wp-content/themes/twentytwenty/functions.php
===================================================================
--- src/wp-content/themes/twentytwenty/functions.php	(revision 48709)
+++ src/wp-content/themes/twentytwenty/functions.php	(working copy)
@@ -754,3 +754,67 @@
 	*/
 	return apply_filters( 'twentytwenty_get_elements_array', $elements );
 }
+
+
+
+//add_filter( 'post_types_allowed_on_home_page', 'rsadfd_post_types_allowed_on_home_page');
+function rsadfd_post_types_allowed_on_home_page( $posts ){
+
+	$posts[] = 'book';
+    return $posts;
+}
+
+
+/**
+ * Register a custom post type called "book".
+ *
+ * @see get_post_type_labels() for label keys.
+ */
+function wpdocs_codex_book_init() {
+	$labels = array(
+		'name'                  => _x( 'Books', 'Post type general name', 'textdomain' ),
+		'singular_name'         => _x( 'Book', 'Post type singular name', 'textdomain' ),
+		'menu_name'             => _x( 'Books', 'Admin Menu text', 'textdomain' ),
+		'name_admin_bar'        => _x( 'Book', 'Add New on Toolbar', 'textdomain' ),
+		'add_new'               => __( 'Add New', 'textdomain' ),
+		'add_new_item'          => __( 'Add New Book', 'textdomain' ),
+		'new_item'              => __( 'New Book', 'textdomain' ),
+		'edit_item'             => __( 'Edit Book', 'textdomain' ),
+		'view_item'             => __( 'View Book', 'textdomain' ),
+		'all_items'             => __( 'All Books', 'textdomain' ),
+		'search_items'          => __( 'Search Books', 'textdomain' ),
+		'parent_item_colon'     => __( 'Parent Books:', 'textdomain' ),
+		'not_found'             => __( 'No books found.', 'textdomain' ),
+		'not_found_in_trash'    => __( 'No books found in Trash.', 'textdomain' ),
+		'featured_image'        => _x( 'Book Cover Image', 'Overrides the “Featured Image” phrase for this post type. Added in 4.3', 'textdomain' ),
+		'set_featured_image'    => _x( 'Set cover image', 'Overrides the “Set featured image” phrase for this post type. Added in 4.3', 'textdomain' ),
+		'remove_featured_image' => _x( 'Remove cover image', 'Overrides the “Remove featured image” phrase for this post type. Added in 4.3', 'textdomain' ),
+		'use_featured_image'    => _x( 'Use as cover image', 'Overrides the “Use as featured image” phrase for this post type. Added in 4.3', 'textdomain' ),
+		'archives'              => _x( 'Book archives', 'The post type archive label used in nav menus. Default “Post Archives”. Added in 4.4', 'textdomain' ),
+		'insert_into_item'      => _x( 'Insert into book', 'Overrides the “Insert into post”/”Insert into page” phrase (used when inserting media into a post). Added in 4.4', 'textdomain' ),
+		'uploaded_to_this_item' => _x( 'Uploaded to this book', 'Overrides the “Uploaded to this post”/”Uploaded to this page” phrase (used when viewing media attached to a post). Added in 4.4', 'textdomain' ),
+		'filter_items_list'     => _x( 'Filter books list', 'Screen reader text for the filter links heading on the post type listing screen. Default “Filter posts list”/”Filter pages list”. Added in 4.4', 'textdomain' ),
+		'items_list_navigation' => _x( 'Books list navigation', 'Screen reader text for the pagination heading on the post type listing screen. Default “Posts list navigation”/”Pages list navigation”. Added in 4.4', 'textdomain' ),
+		'items_list'            => _x( 'Books list', 'Screen reader text for the items list heading on the post type listing screen. Default “Posts list”/”Pages list”. Added in 4.4', 'textdomain' ),
+	);
+
+	$args = array(
+		'labels'             => $labels,
+		'public'             => true,
+		'publicly_queryable' => true,
+		'show_ui'            => true,
+		'show_in_menu'       => true,
+		'query_var'          => true,
+		'rewrite'            => array( 'slug' => 'book' ),
+		'capability_type'    => 'post',
+		'has_archive'        => true,
+		'hierarchical'       => false,
+		'menu_position'      => null,
+		'show_in_home_page_list'=> true,
+		'supports'           => array( 'title', 'editor', 'author', 'thumbnail', 'excerpt', 'comments' ),
+	);
+
+	register_post_type( 'book', $args );
+}
+
+add_action( 'init', 'wpdocs_codex_book_init' );
Index: src/wp-includes/post.php
===================================================================
--- src/wp-includes/post.php	(revision 48709)
+++ src/wp-includes/post.php	(working copy)
@@ -39,6 +39,7 @@
 			'show_in_rest'          => true,
 			'rest_base'             => 'posts',
 			'rest_controller_class' => 'WP_REST_Posts_Controller',
+			'show_in_home_page_list'=> null,
 		)
 	);
 
@@ -64,6 +65,7 @@
 			'show_in_rest'          => true,
 			'rest_base'             => 'pages',
 			'rest_controller_class' => 'WP_REST_Posts_Controller',
+			'show_in_home_page_list'=> true,
 		)
 	);
 
@@ -3132,8 +3134,8 @@
  */
 function _reset_front_page_settings_for_post( $post_id ) {
 	$post = get_post( $post_id );
-
-	if ( 'page' === $post->post_type ) {
+	$post_types_allowed_on_home_page = apply_filters( 'post_types_allowed_on_home_page', array_keys( get_post_types( array( 'show_in_home_page_list' => true ) ) ) );
+	if ( in_array( $post->post_type, $post_types_allowed_on_home_page, true ) ) {
 		/*
 		 * If the page is defined in option page_on_front or post_for_posts,
 		 * adjust the corresponding options.
