WordPress.org

Make WordPress Core

Changeset 39395


Ignore:
Timestamp:
11/30/16 23:41:50 (9 months ago)
Author:
westonruter
Message:

Customize: Fix handling of the nav menu item labels (titles) that match defaults (original titles) and fix the display of item type labels.

  • Show default labels for nav menu item as placeholders in a control's label field instead of showing blank.
  • Store empty string as label instead of copying default labels.
  • Prevent labels for post type archive items from being dropped in preview.
  • Also ensure that the item type label is displayed on nav menu item controls for settings that are loaded from an existing changeset.

Amends [38618].
See #38015.
Fixes #38955 for 4.7 branch.

Location:
branches/4.7
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • branches/4.7

  • branches/4.7/src/wp-content/themes/twentyseventeen/template-parts/header/header-image.php

    r39394 r39395  
    1212<div class="custom-header"> 
    1313 
    14     <?php if ( has_custom_header() ) : ?> 
    15         <div class="custom-header-image"> 
    16             <?php the_custom_header_markup(); ?> 
    17         </div> 
    18     <?php endif; ?> 
     14    <div class="custom-header-image"> 
     15        <?php the_custom_header_markup(); ?> 
     16    </div> 
    1917 
    2018    <?php get_template_part( 'template-parts/header/site', 'branding' ); ?> 
  • branches/4.7/src/wp-includes/customize/class-wp-customize-nav-menu-item-setting.php

    r39366 r39395  
    234234                $value = $post_value; 
    235235            } 
     236            if ( ! empty( $value ) && empty( $value['original_title'] ) ) { 
     237                $value['original_title'] = $this->get_original_title( (object) $value ); 
     238            } 
    236239        } elseif ( isset( $this->value ) ) { 
    237240            $value = $this->value; 
     
    261264        } 
    262265 
     266        if ( ! empty( $value ) && empty( $value['type_label'] ) ) { 
     267            $value['type_label'] = $this->get_type_label( (object) $value ); 
     268        } 
     269 
    263270        return $value; 
    264271    } 
     
    274281     */ 
    275282    protected function get_original_title( $item ) { 
    276         if ( empty( $item->object_id ) ) { 
    277             return ''; 
    278         } 
    279283        $original_title = ''; 
    280         if ( 'post_type' === $item->type ) { 
     284        if ( 'post_type' === $item->type && ! empty( $item->object_id ) ) { 
    281285            $original_object = get_post( $item->object_id ); 
    282286            if ( $original_object ) { 
     
    289293                } 
    290294            } 
    291         } elseif ( 'taxonomy' === $item->type ) { 
     295        } elseif ( 'taxonomy' === $item->type && ! empty( $item->object_id ) ) { 
    292296            $original_term_title = get_term_field( 'name', $item->object_id, $item->object, 'raw' ); 
    293297            if ( ! is_wp_error( $original_term_title ) ) { 
    294298                $original_title = $original_term_title; 
    295299            } 
     300        } elseif ( 'post_type_archive' === $item->type ) { 
     301            $original_object = get_post_type_object( $item->object ); 
     302            if ( $original_object ) { 
     303                $original_title = $original_object->labels->archives; 
     304            } 
    296305        } 
    297306        $original_title = html_entity_decode( $original_title, ENT_QUOTES, get_bloginfo( 'charset' ) ); 
    298307        return $original_title; 
     308    } 
     309 
     310    /** 
     311     * Get type label. 
     312     * 
     313     * @since 4.7.0 
     314     * @access protected 
     315     * 
     316     * @param object $item Nav menu item. 
     317     * @returns string The type label. 
     318     */ 
     319    protected function get_type_label( $item ) { 
     320        if ( 'post_type' === $item->type ) { 
     321            $object = get_post_type_object( $item->object ); 
     322            if ( $object ) { 
     323                $type_label = $object->labels->singular_name; 
     324            } else { 
     325                $type_label = $item->object; 
     326            } 
     327        } elseif ( 'taxonomy' === $item->type ) { 
     328            $object = get_taxonomy( $item->object ); 
     329            if ( $object ) { 
     330                $type_label = $object->labels->singular_name; 
     331            } else { 
     332                $type_label = $item->object; 
     333            } 
     334        } elseif ( 'post_type_archive' === $item->type ) { 
     335            $type_label = __( 'Post Type Archive' ); 
     336        } else { 
     337            $type_label = __( 'Custom Link' ); 
     338        } 
     339        return $type_label; 
    299340    } 
    300341 
     
    585626 
    586627        if ( ! isset( $post->type_label ) ) { 
    587             if ( 'post_type' === $post->type ) { 
    588                 $object = get_post_type_object( $post->object ); 
    589                 if ( $object ) { 
    590                     $post->type_label = $object->labels->singular_name; 
    591                 } else { 
    592                     $post->type_label = $post->object; 
    593                 } 
    594             } elseif ( 'taxonomy' === $post->type ) { 
    595                 $object = get_taxonomy( $post->object ); 
    596                 if ( $object ) { 
    597                     $post->type_label = $object->labels->singular_name; 
    598                 } else { 
    599                     $post->type_label = $post->object; 
    600                 } 
    601             } else { 
    602                 $post->type_label = __( 'Custom Link' ); 
    603             } 
     628            $post->type_label = $this->get_type_label( $post ); 
    604629        } 
    605630 
  • branches/4.7/tests/phpunit/tests/customize/nav-menu-item-setting.php

    r39366 r39395  
    812812        $setting->preview(); 
    813813 
     814        $item_value = $setting->value(); 
     815        $this->assertArrayHasKey( 'type_label', $item_value ); 
    814816        $nav_menu_item = $setting->value_as_wp_post_nav_menu_item(); 
    815817        $this->assertEquals( 'Custom Link', $nav_menu_item->type_label ); 
     818        $this->assertEquals( $item_value['type_label'], $nav_menu_item->type_label ); 
    816819        add_filter( 'wp_setup_nav_menu_item', array( $this, 'filter_type_label' ) ); 
    817820        $nav_menu_item = $setting->value_as_wp_post_nav_menu_item(); 
     
    896899 
    897900    /** 
     901     * Test WP_Customize_Nav_Menu_Item_Setting::value_as_wp_post_nav_menu_item() for obtaining original title. 
     902     * 
     903     * @ticket 38945 
     904     * @covers WP_Customize_Nav_Menu_Item_Setting::get_original_title() 
     905     */ 
     906    function test_get_original_title() { 
     907        $menu_id = wp_create_nav_menu( 'Menu' ); 
     908        register_post_type( 'press_release', array( 
     909            'has_archive' => true, 
     910            'labels' => array( 
     911                'name' => 'PRs', 
     912                'singular_name' => 'PR', 
     913                'archives' => 'All PRs', 
     914            ), 
     915        ) ); 
     916        $original_post_title = 'The PR Post'; 
     917        $post_id = self::factory()->post->create( array( 'post_type' => 'press_release', 'post_title' => $original_post_title ) ); 
     918        $original_term_title = 'The Category Term'; 
     919        $term_id = self::factory()->term->create( array( 'taxonomy' => 'category', 'name' => $original_term_title ) ); 
     920 
     921        // Post: existing nav menu item. 
     922        $nav_menu_item_id = wp_update_nav_menu_item( $menu_id, 0, array( 
     923            'menu-item-object-id' => $post_id, 
     924            'menu-item-type' => 'post_type', 
     925            'menu-item-object' => 'press_release', 
     926            'menu-item-title' => '', 
     927            'menu-item-status' => 'publish', 
     928        ) ); 
     929        $setting = new WP_Customize_Nav_Menu_Item_Setting( 
     930            $this->wp_customize, 
     931            'nav_menu_item[' . $nav_menu_item_id . ']' 
     932        ); 
     933        $item_value = $setting->value(); 
     934        $this->assertEquals( $original_post_title, $item_value['original_title'] ); 
     935        $this->assertEquals( '', $item_value['title'] ); 
     936        $item = $setting->value_as_wp_post_nav_menu_item(); 
     937        $this->assertObjectHasAttribute( 'type_label', $item ); 
     938        $this->assertEquals( $original_post_title, $item->original_title ); 
     939        $this->assertEquals( $original_post_title, $item->title ); 
     940        $this->assertArrayHasKey( 'type_label', $item_value ); 
     941        $this->assertEquals( get_post_type_object( 'press_release' )->labels->singular_name, $item_value['type_label'] ); 
     942        $this->assertEquals( $item->type_label, $item_value['type_label'] ); 
     943 
     944        // Post: staged nav menu item. 
     945        $setting = new WP_Customize_Nav_Menu_Item_Setting( 
     946            $this->wp_customize, 
     947            'nav_menu_item[-1]' 
     948        ); 
     949        $this->wp_customize->set_post_value( $setting->id, array( 
     950            'object_id' => $post_id, 
     951            'type' => 'post_type', 
     952            'object' => 'press_release', 
     953            'title' => '', 
     954            'status' => 'publish', 
     955        ) ); 
     956        $setting->preview(); 
     957        $item_value = $setting->value(); 
     958        $this->assertEquals( $original_post_title, $item_value['original_title'] ); 
     959        $this->assertEquals( '', $item_value['title'] ); 
     960        $item = $setting->value_as_wp_post_nav_menu_item(); 
     961        $this->assertObjectHasAttribute( 'type_label', $item ); 
     962        $this->assertEquals( $original_post_title, $item->original_title ); 
     963        $this->assertEquals( $original_post_title, $item->title ); 
     964        $this->assertArrayHasKey( 'type_label', $item_value ); 
     965        $this->assertEquals( get_post_type_object( 'press_release' )->labels->singular_name, $item_value['type_label'] ); 
     966        $this->assertEquals( $item->type_label, $item_value['type_label'] ); 
     967 
     968        // Term: existing nav menu item. 
     969        $nav_menu_item_id = wp_update_nav_menu_item( $menu_id, 0, array( 
     970            'menu-item-object-id' => $term_id, 
     971            'menu-item-type' => 'taxonomy', 
     972            'menu-item-object' => 'category', 
     973            'menu-item-title' => '', 
     974            'menu-item-status' => 'publish', 
     975        ) ); 
     976        $setting = new WP_Customize_Nav_Menu_Item_Setting( 
     977            $this->wp_customize, 
     978            'nav_menu_item[' . $nav_menu_item_id . ']' 
     979        ); 
     980        $item_value = $setting->value(); 
     981        $this->assertEquals( $original_term_title, $item_value['original_title'] ); 
     982        $this->assertEquals( '', $item_value['title'] ); 
     983        $item = $setting->value_as_wp_post_nav_menu_item(); 
     984        $this->assertObjectHasAttribute( 'type_label', $item ); 
     985        $this->assertEquals( $original_term_title, $item->original_title ); 
     986        $this->assertEquals( $original_term_title, $item->title ); 
     987        $this->assertArrayHasKey( 'type_label', $item_value ); 
     988        $this->assertEquals( get_taxonomy( 'category' )->labels->singular_name, $item_value['type_label'] ); 
     989        $this->assertEquals( $item->type_label, $item_value['type_label'] ); 
     990 
     991        // Term: staged nav menu item. 
     992        $setting = new WP_Customize_Nav_Menu_Item_Setting( 
     993            $this->wp_customize, 
     994            'nav_menu_item[-2]' 
     995        ); 
     996        $this->wp_customize->set_post_value( $setting->id, array( 
     997            'object_id' => $term_id, 
     998            'type' => 'taxonomy', 
     999            'object' => 'category', 
     1000            'title' => '', 
     1001            'status' => 'publish', 
     1002        ) ); 
     1003        $setting->preview(); 
     1004        $item_value = $setting->value(); 
     1005        $this->assertEquals( $original_term_title, $item_value['original_title'] ); 
     1006        $this->assertEquals( '', $item_value['title'] ); 
     1007        $item = $setting->value_as_wp_post_nav_menu_item(); 
     1008        $this->assertObjectHasAttribute( 'type_label', $item ); 
     1009        $this->assertEquals( $original_term_title, $item->original_title ); 
     1010        $this->assertEquals( $original_term_title, $item->title ); 
     1011        $this->assertArrayHasKey( 'type_label', $item_value ); 
     1012        $this->assertEquals( get_taxonomy( 'category' )->labels->singular_name, $item_value['type_label'] ); 
     1013        $this->assertEquals( $item->type_label, $item_value['type_label'] ); 
     1014 
     1015        // Post Type Archive: existing nav menu item. 
     1016        $nav_menu_item_id = wp_update_nav_menu_item( $menu_id, 0, array( 
     1017            'menu-item-type' => 'post_type_archive', 
     1018            'menu-item-object' => 'press_release', 
     1019            'menu-item-title' => '', 
     1020            'menu-item-status' => 'publish', 
     1021        ) ); 
     1022        $setting = new WP_Customize_Nav_Menu_Item_Setting( 
     1023            $this->wp_customize, 
     1024            'nav_menu_item[' . $nav_menu_item_id . ']' 
     1025        ); 
     1026        $item_value = $setting->value(); 
     1027        $this->assertEquals( get_post_type_object( 'press_release' )->labels->archives, $item_value['original_title'] ); 
     1028        $this->assertEquals( '', $item_value['title'] ); 
     1029        $item = $setting->value_as_wp_post_nav_menu_item(); 
     1030        $this->assertObjectHasAttribute( 'type_label', $item ); 
     1031        $this->assertEquals( get_post_type_object( 'press_release' )->labels->archives, $item->original_title ); 
     1032        $this->assertEquals( get_post_type_object( 'press_release' )->labels->archives, $item->title ); 
     1033        $this->assertArrayHasKey( 'type_label', $item_value ); 
     1034        $this->assertEquals( __( 'Post Type Archive' ), $item_value['type_label'] ); 
     1035        $this->assertEquals( $item->type_label, $item_value['type_label'] ); 
     1036 
     1037        // Post Type Archive: staged nav menu item. 
     1038        $setting = new WP_Customize_Nav_Menu_Item_Setting( 
     1039            $this->wp_customize, 
     1040            'nav_menu_item[-3]' 
     1041        ); 
     1042        $this->wp_customize->set_post_value( $setting->id, array( 
     1043            'type' => 'post_type_archive', 
     1044            'object' => 'press_release', 
     1045            'title' => '', 
     1046            'status' => 'publish', 
     1047        ) ); 
     1048        $setting->preview(); 
     1049        $item_value = $setting->value(); 
     1050        $this->assertEquals( get_post_type_object( 'press_release' )->labels->archives, $item_value['original_title'] ); 
     1051        $this->assertEquals( '', $item_value['title'] ); 
     1052        $item = $setting->value_as_wp_post_nav_menu_item(); 
     1053        $this->assertObjectHasAttribute( 'type_label', $item ); 
     1054        $this->assertEquals( get_post_type_object( 'press_release' )->labels->archives, $item->original_title ); 
     1055        $this->assertEquals( get_post_type_object( 'press_release' )->labels->archives, $item->title ); 
     1056        $this->assertArrayHasKey( 'type_label', $item_value ); 
     1057        $this->assertEquals( __( 'Post Type Archive' ), $item_value['type_label'] ); 
     1058        $this->assertEquals( $item->type_label, $item_value['type_label'] ); 
     1059    } 
     1060 
     1061    /** 
    8981062     * Test WP_Customize_Nav_Menu_Item_Setting::value_as_wp_post_nav_menu_item() where title is empty. 
    8991063     * 
Note: See TracChangeset for help on using the changeset viewer.