WordPress.org

Make WordPress Core


Ignore:
Timestamp:
09/17/2016 09:49:49 PM (5 years ago)
Author:
westonruter
Message:

Customize: Ensure nav menu items lacking a label use the title from the original object.

Use original title as placeholder for label and in control title. Prevent original title from overriding empty label in initial setting values.

Fixes #38015.

File:
1 edited

Legend:

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

    r37539 r38618  
    234234                $value = $post_value;
    235235            }
    236         } else if ( isset( $this->value ) ) {
     236        } elseif ( isset( $this->value ) ) {
    237237            $value = $this->value;
    238238        } else {
     
    243243                $post = get_post( $this->post_id );
    244244                if ( $post && self::POST_TYPE === $post->post_type ) {
     245                    $is_title_empty = empty( $post->post_title );
    245246                    $value = (array) wp_setup_nav_menu_item( $post );
     247                    if ( $is_title_empty ) {
     248                        $value['title'] = '';
     249                    }
    246250                }
    247251            }
     
    261265
    262266    /**
     267     * Get original title.
     268     *
     269     * @since 4.7.0
     270     *
     271     * @param object $item Nav menu item.
     272     * @return string The original title.
     273     */
     274    protected function get_original_title( $item ) {
     275        if ( empty( $item->object_id ) ) {
     276            return '';
     277        }
     278        $original_title = '';
     279        if ( 'post_type' === $item->type ) {
     280            $original_object = get_post( $item->object_id );
     281            if ( $original_object ) {
     282                /** This filter is documented in wp-includes/post-template.php */
     283                $original_title = apply_filters( 'the_title', $original_object->post_title, $original_object->ID );
     284
     285                if ( '' === $original_title ) {
     286                    /* translators: %d: ID of a post */
     287                    $original_title = sprintf( __( '#%d (no title)' ), $original_object->ID );
     288                }
     289            }
     290        } elseif ( 'taxonomy' === $item->type ) {
     291            $original_term_title = get_term_field( 'name', $item->object_id, $item->object, 'raw' );
     292            if ( ! is_wp_error( $original_term_title ) ) {
     293                $original_title = $original_term_title;
     294            }
     295        }
     296        $original_title = html_entity_decode( $original_title, ENT_QUOTES, get_bloginfo( 'charset' ) );
     297        return $original_title;
     298    }
     299
     300    /**
    263301     * Ensure that the value is fully populated with the necessary properties.
    264302     *
     
    285323
    286324        if ( ! isset( $this->value['original_title'] ) ) {
    287             $original_title = '';
    288             if ( 'post_type' === $this->value['type'] ) {
    289                 $original_title = get_the_title( $this->value['object_id'] );
    290             } elseif ( 'taxonomy' === $this->value['type'] ) {
    291                 $original_title = get_term_field( 'name', $this->value['object_id'], $this->value['object'], 'raw' );
    292                 if ( is_wp_error( $original_title ) ) {
    293                     $original_title = '';
    294                 }
    295             }
    296             $this->value['original_title'] = html_entity_decode( $original_title, ENT_QUOTES, get_bloginfo( 'charset' ) );
     325            $this->value['original_title'] = $this->get_original_title( (object) $this->value );
    297326        }
    298327
     
    535564        unset( $item->position );
    536565
     566        if ( empty( $item->original_title ) ) {
     567            $item->original_title = $this->get_original_title( $item );
     568        }
     569        if ( empty( $item->title ) && ! empty( $item->original_title ) ) {
     570            $item->title = $item->original_title;
     571        }
    537572        if ( $item->title ) {
    538573            $item->post_title = $item->title;
     
    555590                    $post->type_label = $post->object;
    556591                }
    557             } elseif ( 'taxonomy' == $post->type ) {
     592            } elseif ( 'taxonomy' === $post->type ) {
    558593                $object = get_taxonomy( $post->object );
    559594                if ( $object ) {
Note: See TracChangeset for help on using the changeset viewer.