Ticket #18962: 18962.diff
File 18962.diff, 2.8 KB (added by , 10 years ago) |
---|
-
src/wp-includes/post.php
3677 3677 if ( ! is_array( $feeds ) ) 3678 3678 $feeds = array(); 3679 3679 3680 $hierarchical_post_types = get_post_types( array('hierarchical' => true) );3681 3680 if ( 'attachment' == $post_type ) { 3682 3681 // Attachment slugs must be unique across all types. 3683 3682 $check_sql = "SELECT post_name FROM $wpdb->posts WHERE post_name = %s AND ID != %d LIMIT 1"; … … 3700 3699 } while ( $post_name_check ); 3701 3700 $slug = $alt_post_name; 3702 3701 } 3703 } elseif ( i n_array( $post_type, $hierarchical_post_types) ) {3702 } elseif ( is_post_type_hierarchical( $post_type ) ) { 3704 3703 if ( 'nav_menu_item' == $post_type ) 3705 3704 return $slug; 3706 3705 … … 3708 3707 * Page slugs must be unique within their own trees. Pages are in a separate 3709 3708 * namespace than posts so page slugs are allowed to overlap post slugs. 3710 3709 */ 3711 $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";3712 $post_name_check = $wpdb->get_var( $wpdb->prepare( $check_sql, $slug, $post_ ID, $post_parent ) );3710 $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"; 3711 $post_name_check = $wpdb->get_var( $wpdb->prepare( $check_sql, $slug, $post_type, $post_ID, $post_parent ) ); 3713 3712 3714 3713 /** 3715 3714 * Filter whether the post slug would make a bad hierarchical post slug. -
tests/phpunit/tests/post.php
991 991 _unregister_taxonomy( $tax ); 992 992 } 993 993 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 } 994 1019 }