Make WordPress Core


Ignore:
Timestamp:
11/30/2016 11:35:34 PM (10 years 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.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-includes/customize/class-wp-customize-nav-menu-item-setting.php

    r39365 r39393  
    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
Note: See TracChangeset for help on using the changeset viewer.