Skip to content

Commit 1ffce5d

Browse files
committed
Consolidate ID tie-breaker logic and ensure consistent SQL output in unit tests for orderby scenarios.
1 parent 4c312c7 commit 1ffce5d

File tree

2 files changed

+18
-22
lines changed

2 files changed

+18
-22
lines changed

src/wp-includes/class-wp-query.php

Lines changed: 11 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2558,14 +2558,6 @@ public function get_posts() {
25582558
$has_id_orderby = true;
25592559
}
25602560
}
2561-
2562-
// Add ID as tie-breaker if needed and not already present
2563-
if ( $needs_deterministic_orderby && ! $has_id_orderby ) {
2564-
$orderby_array[] = "{$wpdb->posts}.ID " . $query_vars['order'];
2565-
}
2566-
2567-
$orderby = implode( ', ', $orderby_array );
2568-
25692561
} else {
25702562
$query_vars['orderby'] = urldecode( $query_vars['orderby'] );
25712563
$query_vars['orderby'] = addslashes_gpc( $query_vars['orderby'] );
@@ -2586,16 +2578,18 @@ public function get_posts() {
25862578
$has_id_orderby = true;
25872579
}
25882580
}
2589-
$orderby = implode( ', ', $orderby_array );
2581+
}
25902582

2591-
if ( empty( $orderby ) ) {
2592-
$orderby = "{$wpdb->posts}.post_date " . $query_vars['order'] . ', ' . "{$wpdb->posts}.ID " . $query_vars['order'];
2593-
} elseif ( $needs_deterministic_orderby && ! $has_id_orderby ) {
2594-
// Add ID as tie-breaker for deterministic ordering
2595-
$orderby .= ", {$wpdb->posts}.ID " . $query_vars['order'];
2596-
} elseif ( ! empty( $query_vars['order'] ) ) {
2597-
$orderby .= " {$query_vars['order']}";
2598-
}
2583+
// Add ID as tie-breaker if needed and not already present
2584+
if ( $needs_deterministic_orderby && ! $has_id_orderby ) {
2585+
$orderby_array[] = "{$wpdb->posts}.ID " . $query_vars['order'];
2586+
}
2587+
2588+
// Build the final orderby string
2589+
if ( empty( $orderby_array ) ) {
2590+
$orderby = "{$wpdb->posts}.post_date " . $query_vars['order'] . ', ' . "{$wpdb->posts}.ID " . $query_vars['order'];
2591+
} else {
2592+
$orderby = implode( ', ', $orderby_array );
25992593
}
26002594
}
26012595

tests/phpunit/tests/admin/wpPrivacyRequestsTable.php

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -100,12 +100,14 @@ public function test_columns_should_be_sortable( $order, $orderby, $search, $exp
100100
unset( $_REQUEST['s'] );
101101

102102
$expected_query = explode( ', ', $expected );
103-
$expected_query = array_map( function( $item ) use ( $wpdb ) {
104-
return "{$wpdb->posts}.{$item}";
105-
}, $expected_query );
106-
$expected_query = implode( ', ', $expected_query );
103+
$expected_query = array_map(
104+
function( $item ) use ( $wpdb ) {
105+
return "{$wpdb->posts}.{$item}";
106+
},
107+
$expected_query
108+
);
107109

108-
$this->assertStringContainsString( "ORDER BY {$expected_query}", $this->sql );
110+
$this->assertStringContainsString( "ORDER BY " . implode( ', ', $expected_query ), $this->sql );
109111
}
110112

111113
/**

0 commit comments

Comments
 (0)