WordPress.org

Make WordPress Core

Ticket #37655: 37655.3.diff

File 37655.3.diff, 7.0 KB (added by johnbillion, 5 years ago)
  • src/wp-includes/template.php

     
    189189        $templates = array();
    190190
    191191        if ( ! empty( $category->slug ) ) {
     192
     193                $slug_decoded = urldecode( $category->slug );
     194                if ( $slug_decoded !== $category->slug ) {
     195                        $templates[] = "category-{$slug_decoded}.php";
     196                }
     197
    192198                $templates[] = "category-{$category->slug}.php";
    193199                $templates[] = "category-{$category->term_id}.php";
    194200        }
     
    219225        $templates = array();
    220226
    221227        if ( ! empty( $tag->slug ) ) {
     228
     229                $slug_decoded = urldecode( $tag->slug );
     230                if ( $slug_decoded !== $tag->slug ) {
     231                        $templates[] = "tag-{$slug_decoded}.php";
     232                }
     233
    222234                $templates[] = "tag-{$tag->slug}.php";
    223235                $templates[] = "tag-{$tag->term_id}.php";
    224236        }
     
    255267
    256268        if ( ! empty( $term->slug ) ) {
    257269                $taxonomy = $term->taxonomy;
     270
     271                $slug_decoded = urldecode( $term->slug );
     272                if ( $slug_decoded !== $term->slug ) {
     273                        $templates[] = "taxonomy-$taxonomy-{$slug_decoded}.php";
     274                }
     275
    258276                $templates[] = "taxonomy-$taxonomy-{$term->slug}.php";
    259277                $templates[] = "taxonomy-$taxonomy.php";
    260278        }
     
    349367        $templates = array();
    350368        if ( $template && 0 === validate_file( $template ) )
    351369                $templates[] = $template;
    352         if ( $pagename )
     370        if ( $pagename ) {
     371                $pagename_decoded = urldecode( $pagename );
     372                if ( $pagename_decoded !== $pagename ) {
     373                        $templates[] = "page-{$pagename_decoded}.php";
     374                }
    353375                $templates[] = "page-$pagename.php";
     376        }
    354377        if ( $id )
    355378                $templates[] = "page-$id.php";
    356379        $templates[] = 'page.php';
     
    409432        $templates = array();
    410433
    411434        if ( ! empty( $object->post_type ) ) {
     435
     436                $name_decoded = urldecode( $object->post_name );
     437                if ( $name_decoded !== $object->post_name ) {
     438                        $templates[] = "single-{$object->post_type}-{$name_decoded}.php";
     439                }
     440
    412441                $templates[] = "single-{$object->post_type}-{$object->post_name}.php";
    413442                $templates[] = "single-{$object->post_type}.php";
    414443        }
  • tests/phpunit/tests/template.php

     
    1616        public static function wpSetUpBeforeClass( WP_UnitTest_Factory $factory ) {
    1717                self::$page_on_front = $factory->post->create_and_get( array(
    1818                        'post_type' => 'page',
    19                         'post_name' => 'page-on-front',
     19                        'post_name' => 'page-on-front-😀',
    2020                ) );
    2121
    2222                self::$page_for_posts = $factory->post->create_and_get( array(
    2323                        'post_type' => 'page',
    24                         'post_name' => 'page-for-posts',
     24                        'post_name' => 'page-for-posts-😀',
    2525                ) );
    2626
    2727                self::$page = $factory->post->create_and_get( array(
    2828                        'post_type' => 'page',
    29                         'post_name' => 'page-name',
     29                        'post_name' => 'page-name-😀',
    3030                ) );
    3131                add_post_meta( self::$page->ID, '_wp_page_template', 'templates/page.php' );
    3232
    3333                self::$post = $factory->post->create_and_get( array(
    3434                        'post_type' => 'post',
    35                         'post_name' => 'post-name',
     35                        'post_name' => 'post-name-😀',
    3636                        'post_date' => '1984-02-25 12:34:56',
    3737                ) );
    3838                set_post_format( self::$post, 'quote' );
     
    8484        public function test_category_template_hierarchy() {
    8585                $term = self::factory()->term->create_and_get( array(
    8686                        'taxonomy' => 'category',
    87                         'slug'     => 'foo',
     87                        'slug'     => 'foo-😀',
    8888                ) );
    8989
    9090                $this->assertTemplateHierarchy( get_term_link( $term ), array(
    91                         'category-foo.php',
     91                        'category-foo-😀.php',
     92                        'category-foo-%f0%9f%98%80.php',
    9293                        "category-{$term->term_id}.php",
    9394                        'category.php',
    9495                        'archive.php',
     
    9899        public function test_tag_template_hierarchy() {
    99100                $term = self::factory()->term->create_and_get( array(
    100101                        'taxonomy' => 'post_tag',
    101                         'slug'     => 'foo',
     102                        'slug'     => 'foo-😀',
    102103                ) );
    103104
    104105                $this->assertTemplateHierarchy( get_term_link( $term ), array(
    105                         'tag-foo.php',
     106                        'tag-foo-😀.php',
     107                        'tag-foo-%f0%9f%98%80.php',
    106108                        "tag-{$term->term_id}.php",
    107109                        'tag.php',
    108110                        'archive.php',
     
    112114        public function test_taxonomy_template_hierarchy() {
    113115                $term = self::factory()->term->create_and_get( array(
    114116                        'taxonomy' => 'taxo',
    115                         'slug'     => 'foo',
     117                        'slug'     => 'foo-😀',
    116118                ) );
    117119
    118120                $this->assertTemplateHierarchy( get_term_link( $term ), array(
    119                         'taxonomy-taxo-foo.php',
     121                        'taxonomy-taxo-foo-😀.php',
     122                        'taxonomy-taxo-foo-%f0%9f%98%80.php',
    120123                        'taxonomy-taxo.php',
    121124                        'taxonomy.php',
    122125                        'archive.php',
     
    170173
    171174                $this->assertTemplateHierarchy( home_url(), array(
    172175                        'front-page.php',
    173                         'page-page-on-front.php',
     176                        'page-page-on-front-😀.php',
     177                        'page-page-on-front-%f0%9f%98%80.php',
    174178                        'page-' . self::$page_on_front->ID . '.php',
    175179                        'page.php',
    176180                        'singular.php',
     
    191195        public function test_page_template_hierarchy() {
    192196                $this->assertTemplateHierarchy( get_permalink( self::$page ), array(
    193197                        'templates/page.php',
    194                         'page-page-name.php',
     198                        'page-page-name-😀.php',
     199                        'page-page-name-%f0%9f%98%80.php',
    195200                        'page-' . self::$page->ID . '.php',
    196201                        'page.php',
    197202                        'singular.php',
     
    200205
    201206        public function test_single_template_hierarchy_for_post() {
    202207                $this->assertTemplateHierarchy( get_permalink( self::$post ), array(
    203                         'single-post-post-name.php',
     208                        'single-post-post-name-😀.php',
     209                        'single-post-post-name-%f0%9f%98%80.php',
    204210                        'single-post.php',
    205211                        'single.php',
    206212                        'singular.php',
     
    210216        public function test_single_template_hierarchy_for_custom_post_type() {
    211217                $cpt = self::factory()->post->create_and_get( array(
    212218                        'post_type' => 'cpt',
    213                         'post_name' => 'cpt-name',
     219                        'post_name' => 'cpt-name-😀',
    214220                ) );
    215221
    216222                $this->assertTemplateHierarchy( get_permalink( $cpt ), array(
    217                         'single-cpt-cpt-name.php',
     223                        'single-cpt-cpt-name-😀.php',
     224                        'single-cpt-cpt-name-%f0%9f%98%80.php',
    218225                        'single-cpt.php',
    219226                        'single.php',
    220227                        'singular.php',
     
    223230
    224231        public function test_attachment_template_hierarchy() {
    225232                $attachment = self::factory()->attachment->create_and_get( array(
    226                         'post_name'      => 'attachment-name',
     233                        'post_name'      => 'attachment-name-😀',
    227234                        'file'           => 'image.jpg',
    228235                        'post_mime_type' => 'image/jpeg',
    229236                ) );
     
    232239                        'jpeg.php',
    233240                        'image.php',
    234241                        'attachment.php',
    235                         'single-attachment-attachment-name.php',
     242                        'single-attachment-attachment-name-😀.php',
     243                        'single-attachment-attachment-name-%f0%9f%98%80.php',
    236244                        'single-attachment.php',
    237245                        'single.php',
    238246                        'singular.php',
     
    244252                        'embed-post-quote.php',
    245253                        'embed-post.php',
    246254                        'embed.php',
    247                         'single-post-post-name.php',
     255                        'single-post-post-name-😀.php',
     256                        'single-post-post-name-%f0%9f%98%80.php',
    248257                        'single-post.php',
    249258                        'single.php',
    250259                        'singular.php',
     
    256265                        'embed-page.php',
    257266                        'embed.php',
    258267                        'templates/page.php',
    259                         'page-page-name.php',
     268                        'page-page-name-😀.php',
     269                        'page-page-name-%f0%9f%98%80.php',
    260270                        'page-' . self::$page->ID . '.php',
    261271                        'page.php',
    262272                        'singular.php',