WordPress.org

Make WordPress Core

Changeset 41975


Ignore:
Timestamp:
10/23/2017 08:07:06 PM (4 years ago)
Author:
swissspidy
Message:

Themes: Show templates from both parent and child theme when calling WP_Theme::get_post_templates().

Props birgire for initial patch.
Fixes #41717.

Location:
trunk
Files:
2 edited

Legend:

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

    r41806 r41975  
    10371037            $post_templates = array();
    10381038
    1039             $files = (array) $this->get_files( 'php', 1 );
     1039            $files = (array) $this->get_files( 'php', 1, true);
    10401040
    10411041            foreach ( $files as $file => $full_path ) {
     
    10911091        $post_templates = $this->get_post_templates();
    10921092        $post_templates = isset( $post_templates[ $post_type ] ) ? $post_templates[ $post_type ] : array();
    1093 
    1094         if ( $this->parent() ) {
    1095             $post_templates += $this->parent()->get_page_templates( $post, $post_type );
    1096         }
    10971093
    10981094        /**
  • trunk/tests/phpunit/tests/admin/includesTheme.php

    r39906 r41975  
    123123
    124124        $this->assertEqualSetsWithIndex( array(
    125             'Top Level' => 'template-top-level-post-types.php',
    126             'Sub Dir'   => 'subdir/template-sub-dir-post-types.php',
     125            'Top Level'                  => 'template-top-level-post-types.php',
     126            'Sub Dir'                    => 'subdir/template-sub-dir-post-types.php',
     127            'Top Level In A Child Theme' => 'template-top-level-post-types-child.php',
     128            'Sub Dir In A Child Theme'   => 'subdir/template-sub-dir-post-types-child.php',
    127129        ), get_page_templates( null, 'foo' ) );
     130
    128131        $this->assertEqualSetsWithIndex( array(
    129132            'Top Level' => 'template-top-level-post-types.php',
    130133            'Sub Dir'   => 'subdir/template-sub-dir-post-types.php',
    131134        ), get_page_templates( null, 'post' ) );
     135
    132136        $this->assertEqualSetsWithIndex( array(
    133137            'Top Level'                           => 'template-top-level.php',
     
    135139            'This Template Header Is On One Line' => 'template-header.php',
    136140        ), get_page_templates() );
     141
    137142        $this->assertEquals( array(), get_page_templates( null, 'bar' ) );
     143    }
     144
     145    /**
     146     * @ticket 41717
     147     */
     148    public function test_get_post_templates_child_theme() {
     149        $theme = wp_get_theme( 'page-templates-child' );
     150        $this->assertNotEmpty( $theme );
     151
     152        switch_theme( $theme['Template'], $theme['Stylesheet'] );
     153
     154        $post_templates = $theme->get_post_templates();
     155
     156        $this->assertEqualSetsWithIndex( array(
     157            'template-top-level-post-types.php'            => 'Top Level',
     158            'subdir/template-sub-dir-post-types.php'       => 'Sub Dir',
     159            'template-top-level-post-types-child.php'      => 'Top Level In A Child Theme',
     160            'subdir/template-sub-dir-post-types-child.php' => 'Sub Dir In A Child Theme',
     161        ), $post_templates['foo'] );
     162
     163        $this->assertEqualSetsWithIndex( array(
     164            'template-top-level-post-types.php'      => 'Top Level',
     165            'subdir/template-sub-dir-post-types.php' => 'Sub Dir',
     166        ), $post_templates['post'] );
     167
     168        $this->assertEqualSetsWithIndex( array(
     169            'template-top-level.php'      => 'Top Level',
     170            'subdir/template-sub-dir.php' => 'Sub Dir',
     171            'template-header.php'         => 'This Template Header Is On One Line',
     172        ), $post_templates['page'] );
    138173    }
    139174
Note: See TracChangeset for help on using the changeset viewer.