Prevent multiple hierarchical posts with the same slug from being displayed in single post template.

fixes .

git-svn-id: https://develop.svn.wordpress.org/trunk@28803 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
Sergey Biryukov 2014-06-23 13:14:39 +00:00
parent 1c7bfc7ed1
commit f7d7ecd0a6
2 changed files with 18 additions and 3 deletions
src/wp-includes
tests/phpunit/tests/query

@ -2372,11 +2372,11 @@ class WP_Query {
if ( !$ptype_obj || !$ptype_obj->query_var || empty($q[ $ptype_obj->query_var ]) )
continue;
if ( ! $ptype_obj->hierarchical || strpos($q[ $ptype_obj->query_var ], '/') === false ) {
// Non-hierarchical post_types & parent-level-hierarchical post_types can directly use 'name'
if ( ! $ptype_obj->hierarchical ) {
// Non-hierarchical post types can directly use 'name'.
$q['name'] = $q[ $ptype_obj->query_var ];
} else {
// Hierarchical post_types will operate through the
// Hierarchical post types will operate through 'pagename'.
$q['pagename'] = $q[ $ptype_obj->query_var ];
$q['name'] = '';
}

@ -636,4 +636,19 @@ class Tests_Query_Results extends WP_UnitTestCase {
$result11 = $this->q->query( array_merge( $args, array( 'post_password' => 'burrito' ) ) );
$this->assertEqualSets( array( $two, $three ), $result11 );
}
/**
* @ticket 28611
*/
function test_duplicate_slug_in_hierarchical_post_type() {
register_post_type( 'handbook', array( 'hierarchical' => true ) );
$post_1 = $this->factory->post->create( array( 'post_title' => 'Getting Started', 'post_type' => 'handbook' ) );
$post_2 = $this->factory->post->create( array( 'post_title' => 'Contributing to the WordPress Codex', 'post_type' => 'handbook' ) );
$post_3 = $this->factory->post->create( array( 'post_title' => 'Getting Started', 'post_parent' => $post_2, 'post_type' => 'handbook' ) );
$result = $this->q->query( array( 'handbook' => 'getting-started', 'post_type' => 'handbook' ) );
$this->assertEquals( 1, $this->q->post_count );
}
}