Make WordPress Core

Changeset 38583


Ignore:
Timestamp:
09/09/2016 12:47:17 AM (8 years 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.