Redirects: Prevent redirects if a queried object exists.
After [34659], it became possible to cause an incorrect redirect, by changing the slug of a post, then creating a new post with the old slug. The correct behaviour is to prevent redirecting to the old post. Props dd32, pento. Fixes #35031 for trunk. git-svn-id: https://develop.svn.wordpress.org/trunk@36128 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
parent
cf82d2ef2b
commit
a9dcce7060
@ -4956,6 +4956,10 @@ class WP_Query {
|
||||
function wp_old_slug_redirect() {
|
||||
global $wp_query, $wp_rewrite;
|
||||
|
||||
if ( get_queried_object() ) {
|
||||
return;
|
||||
}
|
||||
|
||||
if ( '' !== $wp_query->query_vars['name'] ) :
|
||||
global $wpdb;
|
||||
|
||||
|
@ -150,6 +150,31 @@ class Tests_Rewrite_OldSlugRedirect extends WP_UnitTestCase {
|
||||
$this->assertEquals( $permalink, $this->old_slug_redirect_url );
|
||||
}
|
||||
|
||||
/**
|
||||
* @ticket 35031
|
||||
*/
|
||||
public function test_old_slug_doesnt_redirect_when_reused() {
|
||||
$old_permalink = user_trailingslashit( get_permalink( $this->post_id ) );
|
||||
|
||||
wp_update_post( array(
|
||||
'ID' => $this->post_id,
|
||||
'post_name' => 'bar-baz',
|
||||
) );
|
||||
|
||||
$new_post_id = self::factory()->post->create( array(
|
||||
'post_title' => 'Foo Bar',
|
||||
'post_name' => 'foo-bar',
|
||||
) );
|
||||
|
||||
$permalink = user_trailingslashit( get_permalink( $new_post_id ) );
|
||||
|
||||
$this->assertEquals( $old_permalink, $permalink );
|
||||
|
||||
$this->go_to( $old_permalink );
|
||||
wp_old_slug_redirect();
|
||||
$this->assertNull( $this->old_slug_redirect_url );
|
||||
}
|
||||
|
||||
public function filter_old_slug_redirect_url( $url ) {
|
||||
$this->old_slug_redirect_url = $url;
|
||||
return false;
|
||||
|
Loading…
Reference in New Issue
Block a user