Make WordPress Core

Ticket #20419: 20419.3.diff

File 20419.3.diff, 22.0 KB (added by mintindeed, 9 years ago)
  • src/wp-admin/includes/ajax-actions.php

     
    16481648                }
    16491649        }
    16501650
    1651         // Hack: wp_unique_post_slug() doesn't work for drafts, so we will fake that our post is published.
    1652         if ( ! empty( $data['post_name'] ) && in_array( $post['post_status'], array( 'draft', 'pending' ) ) ) {
    1653                 $post['post_status'] = 'publish';
    1654                 $data['post_name'] = wp_unique_post_slug( $data['post_name'], $post['ID'], $post['post_status'], $post['post_type'], $post['post_parent'] );
     1651        if ( ! empty( $data['post_name'] ) ) {
     1652                $data['post_name'] = wp_unique_post_slug( $data['post_name'], $post_ID );       
    16551653        }
    16561654
    16571655        // Update the post.
  • src/wp-admin/includes/post.php

     
    12061206 */
    12071207function get_sample_permalink($id, $title = null, $name = null) {
    12081208        $post = get_post( $id );
    1209         if ( ! $post )
     1209        if ( ! $post ) {
    12101210                return array( '', '' );
     1211        }
    12111212
    12121213        $ptype = get_post_type_object($post->post_type);
    12131214
     
    12151216        $original_date = $post->post_date;
    12161217        $original_name = $post->post_name;
    12171218
    1218         // Hack: get_permalink() would return ugly permalink for drafts, so we will fake that our post is published.
    1219         if ( in_array( $post->post_status, array( 'draft', 'pending', 'future' ) ) ) {
    1220                 $post->post_status = 'publish';
    1221                 $post->post_name = sanitize_title($post->post_name ? $post->post_name : $post->post_title, $post->ID);
    1222         }
    1223 
    12241219        // If the user wants to set a new name -- override the current one
    12251220        // Note: if empty name is supplied -- use the title instead, see #6072
    1226         if ( !is_null($name) )
    1227                 $post->post_name = sanitize_title($name ? $name : $title, $post->ID);
     1221        if ( !is_null( $name ) ) {
     1222                $name = ( $name ) ? $name : $title;
     1223                $post->post_name = sanitize_title( $name, $post->ID );
     1224        }
     1225        // Otherwise, use our default behaviour
     1226        else if ( empty( $post->post_name ) ) {
     1227                $post->post_name = sanitize_title( $post->post_title, $post->ID );
     1228        }
    12281229
    1229         $post->post_name = wp_unique_post_slug($post->post_name, $post->ID, $post->post_status, $post->post_type, $post->post_parent);
    1230 
    12311230        $post->filter = 'sample';
    12321231
     1232        // wp_unique_post_slug() now knows this is a "sample" post
     1233        $post->post_name = wp_unique_post_slug( $post->post_name, $post );
     1234
    12331235        $permalink = get_permalink($post, true);
    12341236
    12351237        // Replace custom post_type Token with generic pagename token for ease of use.
  • src/wp-includes/link-template.php

     
    161161         */
    162162        $permalink = apply_filters( 'pre_post_link', $permalink, $post, $leavename );
    163163
    164         if ( '' != $permalink && !in_array( $post->post_status, array( 'draft', 'pending', 'auto-draft', 'future' ) ) ) {
     164        // Don't use pretty permalinks for non-published post statuses, otherwise we risk exposing the unpublished post slug (which may contain sensitive info) publicly. See #30910
     165        // Ensure we're using pretty permalinks for sample permalinks. See #20419
     166        if ( '' != $permalink && ( 'sample' === $post->filter || !in_array( $post->post_status, array( 'draft', 'pending', 'auto-draft', 'future' ) ) ) ) {
    165167                $unixtime = strtotime($post->post_date);
    166168
    167169                $category = '';
  • src/wp-includes/post.php

     
    31463146         */
    31473147        $post_parent = apply_filters( 'wp_insert_post_parent', $post_parent, $post_ID, compact( array_keys( $postarr ) ), $postarr );
    31483148
    3149         $post_name = wp_unique_post_slug( $post_name, $post_ID, $post_status, $post_type, $post_parent );
    3150 
    31513149        // Don't unslash.
    31523150        $post_mime_type = isset( $postarr['post_mime_type'] ) ? $postarr['post_mime_type'] : '';
    31533151
     
    31653163                }
    31663164        }
    31673165
     3166        $data['post_name'] = wp_unique_post_slug( $data['post_name'], (object) $data );
     3167
    31683168        if ( 'attachment' === $post_type ) {
    31693169                /**
    31703170                 * Filter attachment post data before it is updated in or added to the database.
     
    32283228        }
    32293229
    32303230        if ( empty( $data['post_name'] ) && ! in_array( $data['post_status'], array( 'draft', 'pending', 'auto-draft' ) ) ) {
    3231                 $data['post_name'] = wp_unique_post_slug( sanitize_title( $data['post_title'], $post_ID ), $post_ID, $data['post_status'], $post_type, $post_parent );
     3231                // This is a brand new post, so we want to mock a WP_Post object to pass wp_unique_post_slug() as much info
     3232                // as we know about this post. This way wp_unique_post_slug() doesn't have to mock it itself, and we're
     3233                // probably preventing a bug.
     3234                $_post_data_for_slug = new WP_Post( (object) array(
     3235                        'ID' => $post_ID,
     3236                        'post_status' => $data['post_status'],
     3237                        'post_type' => $post_type,
     3238                        'post_parent' => $post_parent,
     3239                ) );
     3240                $_slug = sanitize_title( $data['post_title'], $post_ID );
     3241                $data['post_name'] = wp_unique_post_slug( $_slug, $_post_data_for_slug );
     3242                unset( $_slug, $_post_data_for_slug ); // Make it clear we don't need this anymore
     3243
    32323244                $wpdb->update( $wpdb->posts, array( 'post_name' => $data['post_name'] ), $where );
    32333245                clean_post_cache( $post_ID );
    32343246        }
     
    35423554 * @global wpdb       $wpdb WordPress database abstraction object.
    35433555 * @global WP_Rewrite $wp_rewrite
    35443556 *
    3545  * @param string $slug        The desired slug (post_name).
    3546  * @param int    $post_ID     Post ID.
    3547  * @param string $post_status No uniqueness checks are made if the post is still draft or pending.
    3548  * @param string $post_type   Post type.
    3549  * @param int    $post_parent Post parent ID.
     3557 * @param string  $slug                   The desired slug (post_name).
     3558 * @param obj     $post                   Post object or ID.
     3559 * @param string  $deprecated_post_status No uniqueness checks are made if the post is still draft or pending.
     3560 * @param string  $deprecated_post_type   Post type from the post object.
     3561 * @param int     $deprecated_post_parent Post parent ID from the post object.
    35503562 * @return string Unique slug for the post, based on $post_name (with a -1, -2, etc. suffix)
    35513563 */
    3552 function wp_unique_post_slug( $slug, $post_ID, $post_status, $post_type, $post_parent ) {
    3553         if ( in_array( $post_status, array( 'draft', 'pending', 'auto-draft' ) ) || ( 'inherit' == $post_status && 'revision' == $post_type ) )
     3564function wp_unique_post_slug( $slug, $post, $deprecated_post_status = null, $deprecated_post_type = null, $deprecated_post_parent = null ) {
     3565        if ( $deprecated_post_status || $deprecated_post_type || $deprecated_post_parent ) {
     3566                _deprecated_argument( __FUNCTION__, '4.5' );
     3567        }
     3568
     3569        $_post = get_post( $post );
     3570        if ( ! $_post ) {
     3571                // This is a brand new post, it doesn't exist in the DB or memory. Mock it.
     3572                // The value of post_status, post_type, and post_parent don't matter. They're only present so that we don't throw a warning
     3573                // when checking for backwards compatible (deprecated) values.
     3574                $_post = new WP_Post( (object) array(
     3575                        'post_status' => 'publish',
     3576                        'post_type' => 'post',
     3577                        'post_parent' => 0,
     3578                ) );
     3579        }
     3580        $post = $_post;
     3581        unset($_post); // Don't need this any more
     3582        $post->post_status = ( $deprecated_post_status ) ? $deprecated_post_status : $post->post_status;
     3583        $post->post_type = ( $deprecated_post_type ) ? $deprecated_post_type : $post->post_type;
     3584        $post->post_parent = ( $deprecated_post_parent ) ? $deprecated_post_parent : $post->post_parent;
     3585
     3586        // There's a few circumstances where we don't want to check for uniqueness: auto-draft saves and revisions.
     3587        if ( 'auto-draft' === $post->post_status || ( 'inherit' == $post->post_status && 'revision' == $post->post_type ) ) {
    35543588                return $slug;
     3589        }
    35553590
    35563591        global $wpdb, $wp_rewrite;
    35573592
     
    35583593        $original_slug = $slug;
    35593594
    35603595        $feeds = $wp_rewrite->feeds;
    3561         if ( ! is_array( $feeds ) )
     3596        if ( ! is_array( $feeds ) ) {
    35623597                $feeds = array();
     3598        }
    35633599
    3564         if ( 'attachment' == $post_type ) {
     3600        if ( 'attachment' === $post->post_type ) {
    35653601                // Attachment slugs must be unique across all types.
    35663602                $check_sql = "SELECT post_name FROM $wpdb->posts WHERE post_name = %s AND ID != %d LIMIT 1";
    3567                 $post_name_check = $wpdb->get_var( $wpdb->prepare( $check_sql, $slug, $post_ID ) );
     3603                $post_name_check = $wpdb->get_var( $wpdb->prepare( $check_sql, $slug, $post->ID ) );
    35683604
    35693605                /**
    35703606                 * Filter whether the post slug would make a bad attachment slug.
     
    35783614                        $suffix = 2;
    35793615                        do {
    35803616                                $alt_post_name = _truncate_post_slug( $slug, 200 - ( strlen( $suffix ) + 1 ) ) . "-$suffix";
    3581                                 $post_name_check = $wpdb->get_var( $wpdb->prepare( $check_sql, $alt_post_name, $post_ID ) );
     3617                                $post_name_check = $wpdb->get_var( $wpdb->prepare( $check_sql, $alt_post_name, $post->ID ) );
    35823618                                $suffix++;
    35833619                        } while ( $post_name_check );
    35843620                        $slug = $alt_post_name;
    35853621                }
    3586         } elseif ( is_post_type_hierarchical( $post_type ) ) {
    3587                 if ( 'nav_menu_item' == $post_type )
     3622        } elseif ( is_post_type_hierarchical( $post->post_type ) ) {
     3623                if ( 'nav_menu_item' === $post->post_type ) {
    35883624                        return $slug;
     3625                }
    35893626
    35903627                /*
    35913628                 * Page slugs must be unique within their own trees. Pages are in a separate
     
    35923629                 * namespace than posts so page slugs are allowed to overlap post slugs.
    35933630                 */
    35943631                $check_sql = "SELECT post_name FROM $wpdb->posts WHERE post_name = %s AND post_type IN ( %s, 'attachment' ) AND ID != %d AND post_parent = %d LIMIT 1";
    3595                 $post_name_check = $wpdb->get_var( $wpdb->prepare( $check_sql, $slug, $post_type, $post_ID, $post_parent ) );
     3632                $post_name_check = $wpdb->get_var( $wpdb->prepare( $check_sql, $slug, $post->post_type, $post->ID, $post->post_parent ) );
    35963633
    35973634                /**
    35983635                 * Filter whether the post slug would make a bad hierarchical post slug.
     
    36043641                 * @param string $post_type   Post type.
    36053642                 * @param int    $post_parent Post parent ID.
    36063643                 */
    3607                 if ( $post_name_check || in_array( $slug, $feeds ) || preg_match( "@^($wp_rewrite->pagination_base)?\d+$@", $slug )  || apply_filters( 'wp_unique_post_slug_is_bad_hierarchical_slug', false, $slug, $post_type, $post_parent ) ) {
     3644                if ( $post_name_check || in_array( $slug, $feeds ) || preg_match( "@^($wp_rewrite->pagination_base)?\d+$@", $slug )  || apply_filters( 'wp_unique_post_slug_is_bad_hierarchical_slug', false, $slug, $post->post_type, $post->post_parent ) ) {
    36083645                        $suffix = 2;
    36093646                        do {
    36103647                                $alt_post_name = _truncate_post_slug( $slug, 200 - ( strlen( $suffix ) + 1 ) ) . "-$suffix";
    3611                                 $post_name_check = $wpdb->get_var( $wpdb->prepare( $check_sql, $alt_post_name, $post_type, $post_ID, $post_parent ) );
     3648                                $post_name_check = $wpdb->get_var( $wpdb->prepare( $check_sql, $alt_post_name, $post->post_type, $post->ID, $post->post_parent ) );
    36123649                                $suffix++;
    36133650                        } while ( $post_name_check );
    36143651                        $slug = $alt_post_name;
     
    36163653        } else {
    36173654                // Post slugs must be unique across all posts.
    36183655                $check_sql = "SELECT post_name FROM $wpdb->posts WHERE post_name = %s AND post_type = %s AND ID != %d LIMIT 1";
    3619                 $post_name_check = $wpdb->get_var( $wpdb->prepare( $check_sql, $slug, $post_type, $post_ID ) );
     3656                $post_name_check = $wpdb->get_var( $wpdb->prepare( $check_sql, $slug, $post->post_type, $post->ID ) );
    36203657
    36213658                // Prevent new post slugs that could result in URLs that conflict with date archives.
    3622                 $post = get_post( $post_ID );
     3659                $_post = get_post( $post->ID );
    36233660                $conflicts_with_date_archive = false;
    3624                 if ( 'post' === $post_type && ( ! $post || $post->post_name !== $slug ) && preg_match( '/^[0-9]+$/', $slug ) && $slug_num = intval( $slug ) ) {
     3661                $slug_num = intval( $slug );
     3662                if ( 'post' === $post->post_type && ( ! $_post || $_post->post_name !== $slug ) && preg_match( '/^[0-9]+$/', $slug ) && $slug_num ) {
    36253663                        $permastructs   = array_values( array_filter( explode( '/', get_option( 'permalink_structure' ) ) ) );
    36263664                        $postname_index = array_search( '%postname%', $permastructs );
    3627 
    36283665                        /*
    36293666                         * Potential date clashes are as follows:
    36303667                         *
     
    36493686                 * @param string $slug      The post slug.
    36503687                 * @param string $post_type Post type.
    36513688                 */
    3652                 if ( $post_name_check || in_array( $slug, $feeds ) || $conflicts_with_date_archive || apply_filters( 'wp_unique_post_slug_is_bad_flat_slug', false, $slug, $post_type ) ) {
     3689                if ( $post_name_check || in_array( $slug, $feeds ) || $conflicts_with_date_archive || apply_filters( 'wp_unique_post_slug_is_bad_flat_slug', false, $slug, $post->post_type ) ) {
    36533690                        $suffix = 2;
    36543691                        do {
    36553692                                $alt_post_name = _truncate_post_slug( $slug, 200 - ( strlen( $suffix ) + 1 ) ) . "-$suffix";
    3656                                 $post_name_check = $wpdb->get_var( $wpdb->prepare( $check_sql, $alt_post_name, $post_type, $post_ID ) );
     3693                                $post_name_check = $wpdb->get_var( $wpdb->prepare( $check_sql, $alt_post_name, $post->post_type, $post->ID ) );
    36573694                                $suffix++;
    36583695                        } while ( $post_name_check );
    36593696                        $slug = $alt_post_name;
     
    36723709         * @param int    $post_parent   Post parent ID
    36733710         * @param string $original_slug The original post slug.
    36743711         */
    3675         return apply_filters( 'wp_unique_post_slug', $slug, $post_ID, $post_status, $post_type, $post_parent, $original_slug );
     3712        return apply_filters( 'wp_unique_post_slug', $slug, $post->ID, $post->post_status, $post->post_type, $post->post_parent, $original_slug );
    36763713}
    36773714
    36783715/**
  • tests/phpunit/tests/admin/includesPost.php

     
    254254
    255255        /**
    256256         * @ticket 30910
     257         * @ticket 20419
    257258         */
    258259        public function test_get_sample_permalink_should_return_pretty_permalink_for_posts_with_post_status_future() {
    259260                $permalink_structure = '%postname%';
     
    271272        /**
    272273         * @ticket 30910
    273274         * @ticket 18306
     275         * @ticket 20419
    274276         */
    275277        public function test_get_sample_permalink_html_should_use_default_permalink_for_view_post_link_when_pretty_permalinks_are_disabled() {
    276278                wp_set_current_user( self::$admin_id );
     
    285287        /**
    286288         * @ticket 30910
    287289         * @ticket 18306
     290         * @ticket 20419
    288291         */
    289292        public function test_get_sample_permalink_html_should_use_pretty_permalink_for_view_post_link_when_pretty_permalinks_are_enabled() {
    290293                $this->set_permalink_structure( '/%postname%/' );
     
    302305        /**
    303306         * @ticket 32954
    304307         * @ticket 18306
     308         * @ticket 20419
    305309         */
    306310        public function test_get_sample_permalink_html_should_use_correct_permalink_for_view_post_link_when_changing_slug() {
    307311                $this->set_permalink_structure( '/%postname%/' );
  • tests/phpunit/tests/link.php

     
    306306
    307307        /**
    308308         * @ticket 30910
     309         * @ticket 20419
    309310         */
    310311        public function test_get_permalink_should_not_reveal_post_name_for_post_with_post_status_future() {
    311312                update_option( 'permalink_structure','/%year%/%monthnum%/%day%/%postname%/' );
     
    324325
    325326        /**
    326327         * @ticket 30910
     328         * @ticket 20419
    327329         */
    328330        public function test_get_permalink_should_not_reveal_post_name_for_cpt_with_post_status_future() {
    329331                update_option( 'permalink_structure','/%year%/%monthnum%/%day%/%postname%/' );
  • tests/phpunit/tests/post/wpUniquePostSlug.php

     
    3131                                        'post_title' => $post_title,
    3232                                );
    3333
    34                                 $id = $this->post_ids[] = wp_insert_post( $post );
     34                                $id = $this->post_ids[] = self::factory()->post->create( $post );
    3535                        }
    3636
    3737                        $post = get_post( $id );
     
    4141
    4242        /**
    4343         * @ticket 18962
     44         * @expectedDeprecated wp_unique_post_slug
    4445         */
    4546        public function test_with_multiple_hierarchies() {
    4647                register_post_type( 'post-type-1', array( 'hierarchical' => true ) );
     
    6768
    6869        /**
    6970         * @ticket 30339
     71         * @expectedDeprecated wp_unique_post_slug
    7072         */
    7173        public function test_with_hierarchy() {
    7274                register_post_type( 'post-type-1', array( 'hierarchical' => true ) );
     
    9092
    9193        /**
    9294         * @ticket 18962
     95         * @expectedDeprecated wp_unique_post_slug
    9396         */
    9497        function test_wp_unique_post_slug_with_hierarchy_and_attachments() {
    9598                register_post_type( 'post-type-1', array( 'hierarchical' => true ) );
     
    104107                $args = array(
    105108                        'post_mime_type' => 'image/jpeg',
    106109                        'post_type' => 'attachment',
    107                         'post_name' => 'image'
     110                        'post_name' => 'image',
     111                        'post_status' => 'inherit',
    108112                );
    109113                $attachment = self::factory()->attachment->create_object( 'image.jpg', $one, $args );
    110114
     
    134138                        'post_type' => 'post',
    135139                        'post_name' => 'foo',
    136140                ) );
    137 
    138141                $p2 = self::factory()->post->create( array(
    139142                        'post_type' => 'post',
     143                        'post_status' => $status,
     144                        'post_type' => 'post',
     145                        'post_parent' => 0,
    140146                ) );
    141147
    142                 $actual = wp_unique_post_slug( 'foo', $p2, $status, 'post', 0 );
     148                $actual = wp_unique_post_slug( 'foo', $p2 );
    143149
    144150                $this->assertSame( 'foo', $actual );
    145151        }
     
    146152
    147153        public function whitelist_post_statuses() {
    148154                return array(
    149                         array( 'draft' ),
    150                         array( 'pending' ),
     155                        // Removed 'draft' and 'pending', see #20419
    151156                        array( 'auto-draft' ),
    152157                );
    153158        }
     
    160165
    161166                $p2 = self::factory()->post->create( array(
    162167                        'post_type' => 'post',
     168                        'post_status' => 'inherit',
     169                        'post_type' => 'revision',
     170                        'post_parent' => 0,
    163171                ) );
    164172
    165                 $actual = wp_unique_post_slug( 'foo', $p2, 'inherit', 'revision', 0 );
     173                $actual = wp_unique_post_slug( 'foo', $p2 );
    166174
    167175                $this->assertSame( 'foo', $actual );
    168176        }
     
    176184                $p = self::factory()->post->create( array(
    177185                        'post_type' => 'post',
    178186                        'post_name' => 'foo',
     187                        'post_status' => 'publish',
     188                        'post_type' => 'post',
     189                        'post_parent' => 0,
    179190                ) );
    180191
    181                 $found = wp_unique_post_slug( '2015', $p, 'publish', 'post', 0 );
     192                $found = wp_unique_post_slug( '2015', $p );
    182193                $this->assertEquals( '2015-2', $found );
    183194        }
    184195
     
    192203                        'post_type' => 'post',
    193204                        'post_name' => 'foo',
    194205                        'post_status' => 'publish',
     206                        'post_type' => 'post',
     207                        'post_parent' => 0,
    195208                ) );
    196209
    197                 $found = wp_unique_post_slug( '2015', $p, 'publish', 'post', 0 );
     210                $found = wp_unique_post_slug( '2015', $p );
    198211                $this->assertEquals( '2015-2', $found );
    199212        }
    200213
     
    207220                $p = self::factory()->post->create( array(
    208221                        'post_type' => 'post',
    209222                        'post_name' => 'foo',
     223                        'post_status' => 'publish',
     224                        'post_type' => 'post',
     225                        'post_parent' => 0,
    210226                ) );
    211227
    212                 $found = wp_unique_post_slug( '2015', $p, 'publish', 'post', 0 );
     228                $found = wp_unique_post_slug( '2015', $p );
    213229                $this->assertEquals( '2015', $found );
    214230        }
    215231
     
    222238                $p = self::factory()->post->create( array(
    223239                        'post_type' => 'post',
    224240                        'post_name' => 'foo',
     241                        'post_status' => 'publish',
     242                        'post_type' => 'post',
     243                        'post_parent' => 0,
    225244                ) );
    226245
    227                 $found = wp_unique_post_slug( '11', $p, 'publish', 'post', 0 );
     246                $found = wp_unique_post_slug( '11', $p );
    228247                $this->assertEquals( '11-2', $found );
    229248        }
    230249
     
    237256                $p = self::factory()->post->create( array(
    238257                        'post_type' => 'post',
    239258                        'post_name' => 'foo',
     259                        'post_status' => 'publish',
     260                        'post_type' => 'post',
     261                        'post_parent' => 0,
    240262                ) );
    241263
    242                 $found = wp_unique_post_slug( '11', $p, 'publish', 'post', 0 );
     264                $found = wp_unique_post_slug( '11', $p );
    243265                $this->assertEquals( '11', $found );
    244266        }
    245267
     
    252274                $p = self::factory()->post->create( array(
    253275                        'post_type' => 'post',
    254276                        'post_name' => 'foo',
     277                        'post_status' => 'publish',
     278                        'post_type' => 'post',
     279                        'post_parent' => 0,
    255280                ) );
    256281
    257                 $found = wp_unique_post_slug( '13', $p, 'publish', 'post', 0 );
     282                $found = wp_unique_post_slug( '13', $p );
    258283                $this->assertEquals( '13', $found );
    259284        }
    260285
     
    267292                $p = self::factory()->post->create( array(
    268293                        'post_type' => 'post',
    269294                        'post_name' => 'foo',
     295                        'post_status' => 'publish',
     296                        'post_type' => 'post',
     297                        'post_parent' => 0,
    270298                ) );
    271299
    272                 $found = wp_unique_post_slug( '30', $p, 'publish', 'post', 0 );
     300                $found = wp_unique_post_slug( '30', $p );
    273301                $this->assertEquals( '30-2', $found );
    274302        }
    275303
     
    282310                $p = self::factory()->post->create( array(
    283311                        'post_type' => 'post',
    284312                        'post_name' => 'foo',
     313                        'post_status' => 'publish',
     314                        'post_type' => 'post',
     315                        'post_parent' => 0,
    285316                ) );
    286317
    287                 $found = wp_unique_post_slug( '30', $p, 'publish', 'post', 0 );
     318                $found = wp_unique_post_slug( '30', $p );
    288319                $this->assertEquals( '30', $found );
    289320        }
    290321
     
    297328                $p = self::factory()->post->create( array(
    298329                        'post_type' => 'post',
    299330                        'post_name' => 'foo',
     331                        'post_status' => 'publish',
     332                        'post_type' => 'post',
     333                        'post_parent' => 0,
    300334                ) );
    301335
    302                 $found = wp_unique_post_slug( '32', $p, 'publish', 'post', 0 );
     336                $found = wp_unique_post_slug( '32', $p );
    303337                $this->assertEquals( '32', $found );
    304338        }
     339
     340        /**
     341         * @ticket 20419
     342         * @expectedDeprecated wp_unique_post_slug
     343         */
     344        public function test_post_status_parameter_with_deprecated_params() {
     345                $slug = wp_unique_post_slug( 'foo', 0, 'publish', 'post', 0 );
     346                $this->assertSame( 'foo', $slug );
     347        }
     348
     349        /**
     350         * @ticket 20419
     351         * @expectedDeprecated wp_unique_post_slug
     352         */
     353        public function test_post_status_parameter_with_some_deprecated_params() {
     354                $post = new WP_Post( (object) array(
     355                        'post_name' => 'foo',
     356                        'post_status' => 'publish',
     357                        'post_type' => 'post',
     358                ) );
     359
     360                $slug = wp_unique_post_slug( 'foo', $post, 'draft', 'page' );
     361                $this->assertSame( 'foo', $slug );
     362        }
     363
     364        /**
     365         * @ticket 20419
     366         */
     367        public function test_post_status_parameter_with_post_object() {
     368                $post = new WP_Post( (object) array(
     369                        'post_name' => 'foo',
     370                        'post_status' => 'publish',
     371                ) );
     372
     373                $slug = wp_unique_post_slug( $post->post_name, $post );
     374                $this->assertSame( 'foo', $slug );
     375        }
     376
     377        /**
     378         * @ticket 20419
     379         */
     380        public function test_post_status_parameter_with_post_id() {
     381                $post_id = self::factory()->post->create( array(
     382                        'post_name' => 'foo',
     383                        'post_status' => 'publish',
     384                        'post_type' => 'post',
     385                ) );
     386
     387                $slug = wp_unique_post_slug( 'foo', $post_id );
     388                $this->assertSame( 'foo', $slug );
     389        }
     390
    305391}