mirror of
https://github.com/gosticks/wordpress-develop.git
synced 2025-10-16 12:05:38 +00:00
Renames `reset_permalinks()` to `set_permalink_structure()` (mimicking `$wp_rewrite->set_permalink_structure()`) and allows it to accept an optional permalink structure. In this way, we can double dip using it to both set and reset the permalink structure from anywhere. Removes alot of duplicated code from tests. See #33968. git-svn-id: https://develop.svn.wordpress.org/trunk@34810 602fd350-edb4-49c9-b593-d223f7449a82
438 lines
13 KiB
PHP
438 lines
13 KiB
PHP
<?php
|
|
|
|
/**
|
|
* @group rewrite
|
|
* @ticket 5305
|
|
*/
|
|
class Tests_Rewrite_NumericSlugs extends WP_UnitTestCase {
|
|
private $old_current_user;
|
|
|
|
public function setUp() {
|
|
parent::setUp();
|
|
$this->author_id = $this->factory->user->create( array( 'role' => 'editor' ) );
|
|
|
|
// Override the post/archive slug collision prevention in `wp_unique_post_slug()`.
|
|
add_filter( 'wp_unique_post_slug', array( $this, 'filter_unique_post_slug' ), 10, 6 );
|
|
}
|
|
|
|
public function tearDown() {
|
|
remove_filter( 'wp_unique_post_slug', array( $this, 'filter_unique_post_slug' ), 10, 6 );
|
|
}
|
|
|
|
public function test_go_to_year_segment_collision_without_title() {
|
|
global $wpdb;
|
|
$this->set_permalink_structure( '/%postname%/' );
|
|
|
|
$id = $this->factory->post->create( array(
|
|
'post_author' => $this->author_id,
|
|
'post_status' => 'publish',
|
|
'post_content' => rand_str(),
|
|
'post_title' => '',
|
|
'post_name' => '2015',
|
|
'post_date' => '2015-02-01 01:00:00'
|
|
) );
|
|
|
|
// Force an ID that resembles a year format
|
|
$wpdb->update(
|
|
$wpdb->posts,
|
|
array(
|
|
'ID' => '2015',
|
|
'guid' => 'http://example.org/?p=2015'
|
|
),
|
|
array( 'ID' => $id )
|
|
);
|
|
|
|
$this->go_to( get_permalink( '2015' ) );
|
|
|
|
$this->assertQueryTrue( 'is_single', 'is_singular' );
|
|
}
|
|
|
|
public function test_url_to_postid_year_segment_collision_without_title() {
|
|
global $wpdb;
|
|
$this->set_permalink_structure( '/%postname%/' );
|
|
|
|
$id = $this->factory->post->create( array(
|
|
'post_author' => $this->author_id,
|
|
'post_status' => 'publish',
|
|
'post_content' => rand_str(),
|
|
'post_title' => '',
|
|
'post_name' => '2015',
|
|
'post_date' => '2015-02-01 01:00:00'
|
|
) );
|
|
|
|
// Force an ID that resembles a year format
|
|
$wpdb->update(
|
|
$wpdb->posts,
|
|
array(
|
|
'ID' => '2015',
|
|
'guid' => 'http://example.org/?p=2015'
|
|
),
|
|
array( 'ID' => $id )
|
|
);
|
|
|
|
$this->assertEquals( '2015', url_to_postid( get_permalink( '2015' ) ) );
|
|
}
|
|
|
|
public function test_go_to_year_segment_collision_with_title() {
|
|
$this->set_permalink_structure( '/%postname%/' );
|
|
|
|
$id = $this->factory->post->create( array(
|
|
'post_author' => $this->author_id,
|
|
'post_status' => 'publish',
|
|
'post_content' => rand_str(),
|
|
'post_title' => '2015',
|
|
'post_date' => '2015-02-01 01:00:00',
|
|
) );
|
|
|
|
$this->go_to( get_permalink( $id ) );
|
|
|
|
$this->assertQueryTrue( 'is_single', 'is_singular' );
|
|
}
|
|
|
|
public function test_url_to_postid_year_segment_collision_with_title() {
|
|
$this->set_permalink_structure( '/%postname%/' );
|
|
|
|
$id = $this->factory->post->create( array(
|
|
'post_author' => $this->author_id,
|
|
'post_status' => 'publish',
|
|
'post_content' => rand_str(),
|
|
'post_title' => '2015',
|
|
'post_date' => '2015-02-01 01:00:00',
|
|
) );
|
|
|
|
$this->assertEquals( $id, url_to_postid( get_permalink( $id ) ) );
|
|
}
|
|
|
|
public function test_go_to_month_segment_collision_without_title() {
|
|
$this->set_permalink_structure( '/%year%/%postname%/' );
|
|
|
|
$id = $this->factory->post->create( array(
|
|
'post_author' => $this->author_id,
|
|
'post_status' => 'publish',
|
|
'post_content' => rand_str(),
|
|
'post_title' => '',
|
|
'post_name' => '02',
|
|
'post_date' => '2015-02-01 01:00:00',
|
|
) );
|
|
|
|
$this->go_to( get_permalink( $id ) );
|
|
|
|
$this->assertQueryTrue( 'is_single', 'is_singular' );
|
|
}
|
|
|
|
public function test_url_to_postid_month_segment_collision_without_title() {
|
|
$this->set_permalink_structure( '/%year%/%postname%/' );
|
|
|
|
$id = $this->factory->post->create( array(
|
|
'post_author' => $this->author_id,
|
|
'post_status' => 'publish',
|
|
'post_content' => rand_str(),
|
|
'post_title' => '',
|
|
'post_name' => '02',
|
|
'post_date' => '2015-02-01 01:00:00',
|
|
) );
|
|
|
|
$this->assertEquals( $id, url_to_postid( get_permalink( $id ) ) );
|
|
}
|
|
|
|
public function test_go_to_month_segment_collision_without_title_no_leading_zero() {
|
|
$this->set_permalink_structure( '/%year%/%postname%/' );
|
|
|
|
$id = $this->factory->post->create( array(
|
|
'post_author' => $this->author_id,
|
|
'post_status' => 'publish',
|
|
'post_content' => rand_str(),
|
|
'post_title' => '',
|
|
'post_name' => '2',
|
|
'post_date' => '2015-02-01 01:00:00',
|
|
) );
|
|
|
|
$this->go_to( get_permalink( $id ) );
|
|
|
|
$this->assertQueryTrue( 'is_single', 'is_singular' );
|
|
}
|
|
|
|
public function test_url_to_postid_month_segment_collision_without_title_no_leading_zero() {
|
|
$this->set_permalink_structure( '/%year%/%postname%/' );
|
|
|
|
$id = $this->factory->post->create( array(
|
|
'post_author' => $this->author_id,
|
|
'post_status' => 'publish',
|
|
'post_content' => rand_str(),
|
|
'post_title' => '',
|
|
'post_name' => '2',
|
|
'post_date' => '2015-02-01 01:00:00',
|
|
) );
|
|
|
|
$this->assertEquals( $id, url_to_postid( get_permalink( $id ) ) );
|
|
}
|
|
|
|
public function test_go_to_month_segment_collision_with_title() {
|
|
$this->set_permalink_structure( '/%year%/%postname%/' );
|
|
|
|
$id = $this->factory->post->create( array(
|
|
'post_author' => $this->author_id,
|
|
'post_status' => 'publish',
|
|
'post_content' => rand_str(),
|
|
'post_title' => '02',
|
|
'post_date' => '2015-02-01 01:00:00',
|
|
) );
|
|
|
|
$this->go_to( get_permalink( $id ) );
|
|
|
|
$this->assertQueryTrue( 'is_single', 'is_singular' );
|
|
}
|
|
|
|
public function test_url_to_postid_month_segment_collision_with_title() {
|
|
$this->set_permalink_structure( '/%year%/%postname%/' );
|
|
|
|
$id = $this->factory->post->create( array(
|
|
'post_author' => $this->author_id,
|
|
'post_status' => 'publish',
|
|
'post_content' => rand_str(),
|
|
'post_title' => '02',
|
|
'post_date' => '2015-02-01 01:00:00',
|
|
) );
|
|
|
|
$this->assertEquals( $id, url_to_postid( get_permalink( $id ) ) );
|
|
}
|
|
|
|
public function test_go_to_month_segment_collision_with_title_no_leading_zero() {
|
|
$this->set_permalink_structure( '/%year%/%postname%/' );
|
|
|
|
$id = $this->factory->post->create( array(
|
|
'post_author' => $this->author_id,
|
|
'post_status' => 'publish',
|
|
'post_content' => rand_str(),
|
|
'post_title' => '2',
|
|
'post_date' => '2015-02-01 01:00:00',
|
|
) );
|
|
|
|
$this->go_to( get_permalink( $id ) );
|
|
|
|
$this->assertQueryTrue( 'is_single', 'is_singular' );
|
|
}
|
|
|
|
public function test_url_to_postid_month_segment_collision_with_title_no_leading_zero() {
|
|
$this->set_permalink_structure( '/%year%/%postname%/' );
|
|
|
|
$id = $this->factory->post->create( array(
|
|
'post_author' => $this->author_id,
|
|
'post_status' => 'publish',
|
|
'post_content' => rand_str(),
|
|
'post_title' => '2',
|
|
'post_date' => '2015-02-01 01:00:00',
|
|
) );
|
|
|
|
$this->assertEquals( $id, url_to_postid( get_permalink( $id ) ) );
|
|
}
|
|
|
|
public function test_go_to_day_segment_collision_without_title() {
|
|
$this->set_permalink_structure( '/%year%/%monthnum%/%postname%/' );
|
|
|
|
$id = $this->factory->post->create( array(
|
|
'post_author' => $this->author_id,
|
|
'post_status' => 'publish',
|
|
'post_content' => rand_str(),
|
|
'post_title' => '',
|
|
'post_name' => '01',
|
|
'post_date' => '2015-02-01 01:00:00',
|
|
) );
|
|
|
|
$this->go_to( get_permalink( $id ) );
|
|
|
|
$this->assertQueryTrue( 'is_single', 'is_singular' );
|
|
}
|
|
|
|
public function test_url_to_postid_day_segment_collision_without_title() {
|
|
$this->set_permalink_structure( '/%year%/%monthnum%/%postname%/' );
|
|
|
|
$id = $this->factory->post->create( array(
|
|
'post_author' => $this->author_id,
|
|
'post_status' => 'publish',
|
|
'post_content' => rand_str(),
|
|
'post_title' => '',
|
|
'post_name' => '01',
|
|
'post_date' => '2015-02-01 01:00:00',
|
|
) );
|
|
|
|
$this->assertEquals( $id, url_to_postid( get_permalink( $id ) ) );
|
|
}
|
|
|
|
public function test_go_to_day_segment_collision_with_title() {
|
|
$this->set_permalink_structure( '/%year%/%monthnum%/%postname%/' );
|
|
|
|
$id = $this->factory->post->create( array(
|
|
'post_author' => $this->author_id,
|
|
'post_status' => 'publish',
|
|
'post_content' => rand_str(),
|
|
'post_title' => '01',
|
|
'post_date' => '2015-02-01 01:00:00',
|
|
) );
|
|
|
|
$this->go_to( get_permalink( $id ) );
|
|
|
|
$this->assertQueryTrue( 'is_single', 'is_singular' );
|
|
}
|
|
|
|
public function test_url_to_postid_day_segment_collision_with_title() {
|
|
$this->set_permalink_structure( '/%year%/%monthnum%/%postname%/' );
|
|
|
|
$id = $this->factory->post->create( array(
|
|
'post_author' => $this->author_id,
|
|
'post_status' => 'publish',
|
|
'post_content' => rand_str(),
|
|
'post_title' => '01',
|
|
'post_date' => '2015-02-01 01:00:00',
|
|
) );
|
|
|
|
$this->assertEquals( $id, url_to_postid( get_permalink( $id ) ) );
|
|
}
|
|
|
|
public function test_numeric_slug_permalink_conflicts_should_only_be_resolved_for_the_main_query() {
|
|
$this->set_permalink_structure( '/%year%/%monthnum%/%postname%/' );
|
|
|
|
$id = $this->factory->post->create( array(
|
|
'post_author' => $this->author_id,
|
|
'post_status' => 'publish',
|
|
'post_content' => rand_str(),
|
|
'post_title' => '01',
|
|
'post_date' => '2015-02-01 01:00:00',
|
|
) );
|
|
|
|
$q = new WP_Query( array(
|
|
'year' => '2015',
|
|
'monthnum' => '02',
|
|
'day' => '01',
|
|
) );
|
|
|
|
$this->assertTrue( $q->is_day );
|
|
$this->assertFalse( $q->is_single );
|
|
}
|
|
|
|
public function test_month_slug_collision_should_resolve_to_date_archive_when_year_does_not_match_post_year() {
|
|
$this->set_permalink_structure( '/%year%/%postname%/' );
|
|
|
|
// Make sure a post is published in 2013/02, to avoid 404s.
|
|
$this->factory->post->create( array(
|
|
'post_author' => $this->author_id,
|
|
'post_status' => 'publish',
|
|
'post_content' => 'foo',
|
|
'post_title' => 'bar',
|
|
'post_date' => '2013-02-01 01:00:00',
|
|
) );
|
|
|
|
$id = $this->factory->post->create( array(
|
|
'post_author' => $this->author_id,
|
|
'post_status' => 'publish',
|
|
'post_content' => 'foo',
|
|
'post_title' => '02',
|
|
'post_date' => '2015-02-01 01:00:00',
|
|
) );
|
|
|
|
$permalink = get_permalink( $id );
|
|
$permalink = str_replace( '/2015/', '/2013/', $permalink );
|
|
|
|
$this->go_to( $permalink );
|
|
|
|
$this->assertTrue( is_month() );
|
|
}
|
|
|
|
public function test_day_slug_collision_should_resolve_to_date_archive_when_monthnum_does_not_match_post_month() {
|
|
$this->set_permalink_structure( '/%year%/%monthnum%/%postname%/' );
|
|
|
|
// Make sure a post is published on 2015/01/01, to avoid 404s.
|
|
$this->factory->post->create( array(
|
|
'post_author' => $this->author_id,
|
|
'post_status' => 'publish',
|
|
'post_content' => 'foo',
|
|
'post_title' => 'bar',
|
|
'post_date' => '2015-01-02 01:00:00',
|
|
) );
|
|
|
|
$id = $this->factory->post->create( array(
|
|
'post_author' => $this->author_id,
|
|
'post_status' => 'publish',
|
|
'post_content' => 'foo',
|
|
'post_title' => '02',
|
|
'post_date' => '2015-02-02 01:00:00',
|
|
) );
|
|
|
|
$permalink = get_permalink( $id );
|
|
$permalink = str_replace( '/2015/02/', '/2015/01/', $permalink );
|
|
|
|
$this->go_to( $permalink );
|
|
|
|
$this->assertTrue( is_day() );
|
|
}
|
|
|
|
public function test_date_slug_collision_should_distinguish_valid_pagination_from_date() {
|
|
$this->set_permalink_structure( '/%year%/%postname%/' );
|
|
|
|
$id = $this->factory->post->create( array(
|
|
'post_author' => $this->author_id,
|
|
'post_status' => 'publish',
|
|
'post_content' => 'Page 0<!--nextpage-->Page 1<!--nextpage-->Page 2<!--nextpage-->Page 3',
|
|
'post_title' => '02',
|
|
'post_date' => '2015-02-01 01:00:00',
|
|
) );
|
|
|
|
$this->go_to( get_permalink( $id ) . '1' );
|
|
|
|
$this->assertFalse( is_day() );
|
|
}
|
|
|
|
public function test_date_slug_collision_should_distinguish_too_high_pagination_from_date() {
|
|
$this->set_permalink_structure( '/%year%/%postname%/' );
|
|
|
|
$id = $this->factory->post->create( array(
|
|
'post_author' => $this->author_id,
|
|
'post_status' => 'publish',
|
|
'post_content' => 'Page 0<!--nextpage-->Page 1<!--nextpage-->Page 2<!--nextpage-->Page 3',
|
|
'post_title' => '02',
|
|
'post_date' => '2015-02-05 01:00:00',
|
|
) );
|
|
|
|
$this->go_to( get_permalink( $id ) . '5' );
|
|
|
|
$this->assertTrue( is_day() );
|
|
}
|
|
|
|
public function test_date_slug_collision_should_not_require_pagination_query_var() {
|
|
$this->set_permalink_structure( '/%year%/%postname%/' );
|
|
|
|
$id = $this->factory->post->create( array(
|
|
'post_author' => $this->author_id,
|
|
'post_status' => 'publish',
|
|
'post_content' => 'Page 0<!--nextpage-->Page 1<!--nextpage-->Page 2<!--nextpage-->Page 3',
|
|
'post_title' => '02',
|
|
'post_date' => '2015-02-05 01:00:00',
|
|
) );
|
|
|
|
$this->go_to( get_permalink( $id ) );
|
|
|
|
$this->assertQueryTrue( 'is_single', 'is_singular' );
|
|
$this->assertFalse( is_date() );
|
|
}
|
|
|
|
public function test_date_slug_collision_should_be_ignored_when_pagination_var_is_present_but_post_does_not_have_multiple_pages() {
|
|
$this->set_permalink_structure( '/%year%/%postname%/' );
|
|
|
|
$id = $this->factory->post->create( array(
|
|
'post_author' => $this->author_id,
|
|
'post_status' => 'publish',
|
|
'post_content' => 'This post does not have pagination.',
|
|
'post_title' => '02',
|
|
'post_date' => '2015-02-05 01:00:00',
|
|
) );
|
|
|
|
$this->go_to( get_permalink( $id ) . '5' );
|
|
|
|
$this->assertTrue( is_day() );
|
|
}
|
|
|
|
public function filter_unique_post_slug( $slug, $post_id, $post_status, $post_type, $post_parent, $original_slug ) {
|
|
return $original_slug;
|
|
}
|
|
}
|