WordPress.org

Make WordPress Core

Changeset 38583


Ignore:
Timestamp:
09/09/16 00:47:17 (8 months ago)
Author:
johnbillion
Message:

Themes: Add the non-encoded form of the queried item slug to the template hierarchy when the slug contains non-ASCII characters.

This affects category, tag, and custom taxonomy archives, and single posts, pages, and custom post types.

Fixes #37655

Location:
trunk
Files:
2 edited

Legend:

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

    r38428 r38583  
    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"; 
     
    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"; 
     
    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"; 
     
    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"; 
     
    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"; 
  • trunk/tests/phpunit/tests/template.php

    r38419 r38583  
    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' ); 
     
    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        ) ); 
     
    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', 
     
    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', 
     
    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', 
     
    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', 
     
    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', 
     
    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', 
     
    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', 
     
    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', 
     
    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', 
     
    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', 
     
    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', 
Note: See TracChangeset for help on using the changeset viewer.