diff --git a/src/wp-admin/includes/dashboard.php b/src/wp-admin/includes/dashboard.php
index d45f1e2477..ed10e49354 100644
--- a/src/wp-admin/includes/dashboard.php
+++ b/src/wp-admin/includes/dashboard.php
@@ -264,17 +264,16 @@ function wp_dashboard_right_now() {
 	<div class="main">
 	<ul>
 	<?php
-	// Posts and Pages
-	foreach ( array( 'post', 'page' ) as $post_type ) {
+	// At a Glance Post Types
+	foreach ( get_post_types( array( 'at_a_glance' => true ) ) as $post_type ) {
 		$num_posts = wp_count_posts( $post_type );
 		if ( $num_posts && $num_posts->publish ) {
-			if ( 'post' == $post_type ) {
-				$text = _n( '%s Post', '%s Posts', $num_posts->publish );
-			} else {
-				$text = _n( '%s Page', '%s Pages', $num_posts->publish );
-			}
-			$text             = sprintf( $text, number_format_i18n( $num_posts->publish ) );
 			$post_type_object = get_post_type_object( $post_type );
+			if ( ! $post_type_object ) {
+				continue;
+			}
+			$post_label = 1 === intval( $num_posts->publish ) ? $post_type_object->labels->singular_name : $post_type_object->labels->name;
+			$text       = sprintf( '%s %s', number_format_i18n( $num_posts->publish ), $post_label );
 			if ( $post_type_object && current_user_can( $post_type_object->cap->edit_posts ) ) {
 				printf( '<li class="%1$s-count"><a href="edit.php?post_type=%1$s">%2$s</a></li>', $post_type, $text );
 			} else {
diff --git a/src/wp-includes/class-wp-post-type.php b/src/wp-includes/class-wp-post-type.php
index f2e14a0a93..e5b4f535ed 100644
--- a/src/wp-includes/class-wp-post-type.php
+++ b/src/wp-includes/class-wp-post-type.php
@@ -127,6 +127,15 @@ final class WP_Post_Type {
 	 */
 	public $show_in_menu = null;
 
+	/**
+	 * Makes this post type visible in the At a Glance dashboard widget.
+	 *
+	 * Default is the value of $show_in_menu.
+	 *
+	 * @var bool $at_a_glance
+	 */
+	public $at_a_glance = null;
+
 	/**
 	 * Makes this post type available for selection in navigation menus.
 	 *
@@ -405,6 +414,7 @@ final class WP_Post_Type {
 			'show_in_rest'          => false,
 			'rest_base'             => false,
 			'rest_controller_class' => false,
+			'at_a_glance'           => null,
 			'_builtin'              => false,
 			'_edit_link'            => 'post.php?post=%d',
 		);
@@ -428,6 +438,11 @@ final class WP_Post_Type {
 			$args['show_in_menu'] = $args['show_ui'];
 		}
 
+		// If not set, default to the setting for show_in_menu
+		if ( null === $args['at_a_glance'] ) {
+			$args['at_a_glance'] = (bool) $args['show_in_menu'];
+		}
+
 		// If not set, default to the whether the full UI is shown.
 		if ( null === $args['show_in_admin_bar'] ) {
 			$args['show_in_admin_bar'] = (bool) $args['show_in_menu'];
diff --git a/src/wp-includes/post.php b/src/wp-includes/post.php
index 7636c3d02b..b76f2757c5 100644
--- a/src/wp-includes/post.php
+++ b/src/wp-includes/post.php
@@ -78,6 +78,7 @@ function create_initial_post_types() {
 			),
 			'public'                => true,
 			'show_ui'               => true,
+			'at_a_glance'           => false,
 			'_builtin'              => true, /* internal use only. don't use this when registering your own post type. */
 			'_edit_link'            => 'post.php?post=%d', /* internal use only. don't use this when registering your own post type. */
 			'capability_type'       => 'post',
diff --git a/tests/phpunit/tests/post/types.php b/tests/phpunit/tests/post/types.php
index cdab0337f3..56ef194498 100644
--- a/tests/phpunit/tests/post/types.php
+++ b/tests/phpunit/tests/post/types.php
@@ -156,6 +156,29 @@ class Tests_Post_Types extends WP_UnitTestCase {
 		$this->assertSame( $public, $args->show_in_admin_bar );
 	}
 
+	/**
+	 * @ticket 45035
+	 * @covers ::register_post_type()
+	 */
+	function test_register_post_type_at_a_glance_should_default_to_value_of_show_in_menu() {
+		/*
+		 * 'public'       Default is false
+		 * 'show_ui'      Default is null ('public')
+		 * 'show_in_menu' Default is null ('show_ui' > 'public')
+		 * 'at_a_glance'  Default is null ('show_in_menu' > 'show_ui' > 'public')
+		 */
+		$args = $this->register_post_type( array( 'public' => $public = false ) );
+
+		// Should fall back to 'show_in_menu'.
+		$this->assertSame( $args->show_in_menu, $args->at_a_glance );
+
+		// Should fall back to 'show_ui'.
+		$this->assertSame( $args->show_ui, $args->at_a_glance );
+
+		// Should fall back to 'public'.
+		$this->assertSame( $public, $args->at_a_glance );
+	}
+
 	function test_register_taxonomy_for_object_type() {
 		global $wp_taxonomies;
 
