Index: src/wp-includes/class-wp-query.php
===================================================================
--- src/wp-includes/class-wp-query.php	(revision 53362)
+++ src/wp-includes/class-wp-query.php	(working copy)
@@ -2754,8 +2754,6 @@
 			}
 		}
 
-		$clauses = array( 'where', 'groupby', 'join', 'orderby', 'distinct', 'fields', 'limits' );
-
 		/*
 		 * Apply post-paging filters on where and join. Only plugins that
 		 * manipulate paging queries should use these hooks.
@@ -2835,6 +2833,8 @@
 			 */
 			$fields = apply_filters_ref_array( 'posts_fields', array( $fields, &$this ) );
 
+			$clauses = array( 'where', 'groupby', 'join', 'orderby', 'distinct', 'fields', 'limits' );
+
 			/**
 			 * Filters all query clauses at once, for convenience.
 			 *
@@ -2967,6 +2967,8 @@
 			 */
 			$limits = apply_filters_ref_array( 'post_limits_request', array( $limits, &$this ) );
 
+			$clauses = array( 'where', 'groupby', 'join', 'orderby', 'distinct', 'fields', 'limits' );
+
 			/**
 			 * Filters all query clauses at once, for convenience.
 			 *
@@ -2990,7 +2992,7 @@
 			 * }
 			 * @param WP_Query $query  The WP_Query instance (passed by reference).
 			 */
-			$clauses = (array) apply_filters_ref_array( 'posts_clauses_request', array( $clauses, &$this ) );
+			$clauses = (array) apply_filters_ref_array( 'posts_clauses_request', array( compact( $clauses ), &$this ) );
 
 			$where    = isset( $clauses['where'] ) ? $clauses['where'] : '';
 			$groupby  = isset( $clauses['groupby'] ) ? $clauses['groupby'] : '';
Index: tests/phpunit/tests/query.php
===================================================================
--- tests/phpunit/tests/query.php	(revision 53362)
+++ tests/phpunit/tests/query.php	(working copy)
@@ -719,4 +719,54 @@
 		$this->assertInstanceOf( 'WP_User', get_queried_object() );
 		$this->assertSame( get_queried_object_id(), $user_id );
 	}
+
+	/**
+	 * Tests that the `posts_clauses` filter receives an array of clauses
+	 * with the other `posts_*` filters applied, e.g. `posts_join_paged`.
+	 *
+	 * @ticket 55699
+	 * @covers WP_Query::get_posts
+	 */
+	public function test_posts_clauses_filter_should_receive_filtered_clauses() {
+		add_filter(
+			'posts_join_paged',
+			static function() {
+				return '/* posts_join_paged */';
+			}
+		);
+
+		$filter = new MockAction();
+		add_filter( 'posts_clauses', array( $filter, 'filter' ), 10, 2 );
+		$this->go_to( '/' );
+		$filter_args   = $filter->get_args();
+		$posts_clauses = $filter_args[0][0];
+
+		$this->assertArrayHasKey( 'join', $posts_clauses );
+		$this->assertSame( '/* posts_join_paged */', $posts_clauses['join'] );
+	}
+
+	/**
+	 * Tests that the `posts_clauses_request` filter receives an array of clauses
+	 * with the other `posts_*_request` filters applied, e.g. `posts_join_request`.
+	 *
+	 * @ticket 55699
+	 * @covers WP_Query::get_posts
+	 */
+	public function test_posts_clauses_request_filter_should_receive_filtered_clauses() {
+		add_filter(
+			'posts_join_request',
+			static function() {
+				return '/* posts_join_request */';
+			}
+		);
+
+		$filter = new MockAction();
+		add_filter( 'posts_clauses_request', array( $filter, 'filter' ), 10, 2 );
+		$this->go_to( '/' );
+		$filter_args           = $filter->get_args();
+		$posts_clauses_request = $filter_args[0][0];
+
+		$this->assertArrayHasKey( 'join', $posts_clauses_request );
+		$this->assertSame( '/* posts_join_request */', $posts_clauses_request['join'] );
+	}
 }
