diff --git a/src/wp-includes/post-template.php b/src/wp-includes/post-template.php
index 6ab77548d4..dfc74f6ce0 100644
--- a/src/wp-includes/post-template.php
+++ b/src/wp-includes/post-template.php
@@ -1009,8 +1009,15 @@ function wp_list_pages($args = '') {
$output .= '
' . $r['title_li'] . '';
global $wp_query;
- if ( is_page() || is_attachment() || $wp_query->is_posts_page )
- $current_page = $wp_query->get_queried_object_id();
+ if ( is_page() || is_attachment() || $wp_query->is_posts_page ) {
+ $current_page = get_queried_object_id();
+ } elseif ( is_singular() ) {
+ $queried_object = get_queried_object();
+ if ( is_post_type_hierarchical( $queried_object->post_type ) ) {
+ $current_page = $queried_object->ID;
+ }
+ }
+
$output .= walk_page_tree($pages, $r['depth'], $current_page, $r);
if ( $r['title_li'] )
diff --git a/tests/phpunit/tests/post/getPages.php b/tests/phpunit/tests/post/getPages.php
index 707c6add48..3ce65bbb69 100644
--- a/tests/phpunit/tests/post/getPages.php
+++ b/tests/phpunit/tests/post/getPages.php
@@ -211,4 +211,29 @@ class Tests_Post_getPages extends WP_UnitTestCase {
$this->assertEqualSets( array( $page_1, $page_2, $page_4, $page_3 ), wp_list_pluck( $pages, 'ID' ) );
}
+
+ function test_wp_list_pages_classes() {
+ $type = 'taco';
+ register_post_type( $type, array( 'hierarchical' => true, 'public' => true ) );
+
+ $posts = $this->factory->post->create_many( 2, array( 'post_type' => $type ) );
+ $post_id = reset( $posts );
+
+ $this->go_to( "/?p=$post_id&post_type=$type" );
+
+ $this->assertEquals( $post_id, get_queried_object_id() );
+
+ $output = wp_list_pages( array(
+ 'echo' => false,
+ 'title_li' => '',
+ 'post_type' => $type
+ ) );
+
+ $this->assertNotEmpty( $output );
+ $this->assertEquals( 2, substr_count( $output, 'class="page_item ' ) );
+ $this->assertContains( 'current_page_item', $output );
+ $this->assertEquals( 1, substr_count( $output, 'current_page_item' ) );
+
+ _unregister_post_type( $type );
+ }
}
\ No newline at end of file