Index: src/wp-includes/class-wp-post-type.php
===================================================================
--- src/wp-includes/class-wp-post-type.php	(revision 44746)
+++ src/wp-includes/class-wp-post-type.php	(working copy)
@@ -551,14 +551,16 @@
 					$archive_slug = $wp_rewrite->root . $archive_slug;
 				}
 
-				add_rewrite_rule( "{$archive_slug}/?$", "index.php?post_type=$this->name", 'top' );
+				$archive_slug = apply_filters( 'post_type_archive_slug', $archive_slug, $this->name, $this );
+
+				add_rewrite_rule( "{$archive_slug}/?$", apply_filters( 'post_type_archive_rewrite_query', "index.php?post_type=$this->name", $archive_slug, $this->name, $this ), 'top' );
 				if ( $this->rewrite['feeds'] && $wp_rewrite->feeds ) {
 					$feeds = '(' . trim( implode( '|', $wp_rewrite->feeds ) ) . ')';
-					add_rewrite_rule( "{$archive_slug}/feed/$feeds/?$", "index.php?post_type=$this->name" . '&feed=$matches[1]', 'top' );
-					add_rewrite_rule( "{$archive_slug}/$feeds/?$", "index.php?post_type=$this->name" . '&feed=$matches[1]', 'top' );
+					add_rewrite_rule( "{$archive_slug}/feed/$feeds/?$", apply_filters( 'post_type_archive_rewrite_feed_query', "index.php?post_type=$this->name" . '&feed=$matches[1]', $archive_slug, $this->name, $this, $feeds ), 'top' );
+					add_rewrite_rule( "{$archive_slug}/$feeds/?$", apply_filters( 'post_type_archive_rewrite_feed_root_query', "index.php?post_type=$this->name" . '&feed=$matches[1]', $archive_slug, $this->name, $this, $feeds ), 'top' );
 				}
 				if ( $this->rewrite['pages'] ) {
-					add_rewrite_rule( "{$archive_slug}/{$wp_rewrite->pagination_base}/([0-9]{1,})/?$", "index.php?post_type=$this->name" . '&paged=$matches[1]', 'top' );
+					add_rewrite_rule( "{$archive_slug}/{$wp_rewrite->pagination_base}/([0-9]{1,})/?$", apply_filters( 'post_type_archive_rewrite_pagination_query', "index.php?post_type=$this->name" . '&paged=$matches[1]', $archive_slug, $this->name, $this ), 'top' );
 				}
 			}
 
Index: tests/phpunit/tests/post/wpPostType.php
===================================================================
--- tests/phpunit/tests/post/wpPostType.php	(revision 44746)
+++ tests/phpunit/tests/post/wpPostType.php	(working copy)
@@ -132,6 +132,42 @@
 		$this->assertFalse( array_search( "%$post_type%", $rewrite_tags_after ) );
 	}
 
+	public function test_adds_rewrite_rules_with_filtered_archive_slug() {
+		$this->set_permalink_structure( '/%postname%' );
+
+		/* @var WP_Rewrite $wp_rewrite */
+		global $wp_rewrite;
+
+		$original_slug    = 'unfiltered-archive-slug';
+		$new_archive_slug = 'filtered-archive-slug';
+
+		add_filter(
+			'post_type_archive_slug',
+			function() use ( $new_archive_slug ) {
+				return $new_archive_slug;
+			}
+		);
+
+		$post_type        = 'cpt';
+		$post_type_object = new WP_Post_Type(
+			$post_type,
+			array(
+				'public'      => true,
+				'has_archive' => true,
+				'rewrite'     => array(
+					'slug' => $original_slug,
+				),
+			)
+		);
+
+		$post_type_object->add_rewrite_rules();
+		$wp_rewrite->flush_rules();
+		$rewrite_rules = $wp_rewrite->rules;
+
+		$this->assertNotFalse( array_key_exists( "{$new_archive_slug}/?$", $rewrite_rules ) );
+		$this->assertFalse( array_key_exists( "{$original_slug}/?$", $rewrite_rules ) );
+	}
+
 	public function test_register_meta_boxes() {
 		$post_type        = 'cpt';
 		$post_type_object = new WP_Post_Type( $post_type, array( 'register_meta_box_cb' => '__return_false' ) );
