WordPress.org

Make WordPress Core

Changeset 30158


Ignore:
Timestamp:
11/01/2014 08:36:23 PM (6 years ago)
Author:
wonderboymusic
Message:

All duplicate slugs across different post types.

Adds unit test.

Props mboynes, nacin.
Fixes #18962.

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-includes/post.php

    r30155 r30158  
    36743674        $feeds = array();
    36753675
    3676     $hierarchical_post_types = get_post_types( array('hierarchical' => true) );
    36773676    if ( 'attachment' == $post_type ) {
    36783677        // Attachment slugs must be unique across all types.
     
    36973696            $slug = $alt_post_name;
    36983697        }
    3699     } elseif ( in_array( $post_type, $hierarchical_post_types ) ) {
     3698    } elseif ( is_post_type_hierarchical( $post_type ) ) {
    37003699        if ( 'nav_menu_item' == $post_type )
    37013700            return $slug;
     
    37053704         * namespace than posts so page slugs are allowed to overlap post slugs.
    37063705         */
    3707         $check_sql = "SELECT post_name FROM $wpdb->posts WHERE post_name = %s AND post_type IN ( '" . implode( "', '", esc_sql( $hierarchical_post_types ) ) . "' ) AND ID != %d AND post_parent = %d LIMIT 1";
    3708         $post_name_check = $wpdb->get_var( $wpdb->prepare( $check_sql, $slug, $post_ID, $post_parent ) );
     3706        $check_sql = "SELECT post_name FROM $wpdb->posts WHERE post_name = %s AND post_type = %s AND ID != %d AND post_parent = %d LIMIT 1";
     3707        $post_name_check = $wpdb->get_var( $wpdb->prepare( $check_sql, $slug, $post_type, $post_ID, $post_parent ) );
    37093708
    37103709        /**
  • trunk/tests/phpunit/tests/post.php

    r29789 r30158  
    992992    }
    993993
     994    /**
     995     * @ticket 18962
     996     */
     997    function test_wp_unique_post_slug_with_multiple_hierarchies() {
     998        register_post_type( 'post-type-1', array( 'hierarchical' => true ) );
     999        register_post_type( 'post-type-2', array( 'hierarchical' => true ) );
     1000
     1001        $args = array(
     1002            'post_type' => 'post-type-1',
     1003            'post_name' => 'some-slug',
     1004            'post_status' => 'publish',
     1005        );
     1006        $one = $this->factory->post->create( $args );
     1007        $args['post_type'] = 'post-type-2';
     1008        $two = $this->factory->post->create( $args );
     1009
     1010        $this->assertEquals( 'some-slug', get_post( $one )->post_name );
     1011        $this->assertEquals( 'some-slug', get_post( $two )->post_name );
     1012
     1013        $this->assertEquals( 'some-other-slug', wp_unique_post_slug( 'some-other-slug', $one, 'publish', 'post-type-1', 0 ) );
     1014        $this->assertEquals( 'some-other-slug', wp_unique_post_slug( 'some-other-slug', $one, 'publish', 'post-type-2', 0 ) );
     1015
     1016        _unregister_post_type( 'post-type-1' );
     1017        _unregister_post_type( 'post-type-2' );
     1018    }
    9941019}
Note: See TracChangeset for help on using the changeset viewer.