Make WordPress Core


Ignore:
Timestamp:
04/28/2010 06:30:32 PM (15 years ago)
Author:
nacin
Message:

More nav menu fixes. props filosofo. see #13148. fixes #13155, fixes #13157, fixes #13138, see #13134.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/wp-includes/nav-menu.php

    r14270 r14283  
    5151    $menu_obj = wp_get_nav_menu_object( $menu );
    5252
    53     if ( $menu_obj && ! is_wp_error( $menu_obj ) && ! empty( $menu_obj->term_id ) )
     53    if (
     54        $menu_obj &&
     55        ! is_wp_error( $menu_obj ) &&
     56        ! empty( $menu_obj->taxonomy ) &&
     57        'nav_menu' == $menu_obj->taxonomy
     58    )
    5459        return true;
    5560   
     
    144149 * @param int $menu_id The ID of the menu
    145150 * @param array $menu_data The array of menu data.
    146  * @return int The menu's ID.
     151 * @return int|error object The menu's ID or WP_Error object.
    147152 */
    148153function wp_update_nav_menu_object( $menu_id = 0, $menu_data = array() ) {
     
    152157
    153158    // menu doesn't already exist
    154     if ( ! $_menu || is_wp_error( $_menu ) ) {
     159    if ( ! $_menu || is_wp_error( $_menu ) )
    155160        $_menu = wp_create_nav_menu( $menu_data['menu-name'] );
    156     }
    157 
    158     if ( $_menu && isset( $_menu->term_id ) && ! is_wp_error( $_menu ) ) {
     161
     162    if ( is_wp_error( $_menu ) )
     163        return $_menu;
     164
     165    if ( $_menu && isset( $_menu->term_id ) ) {
    159166        $args = array(
    160167            'description' => ( isset( $menu_data['description'] ) ? $menu_data['description'] : '' ),
     
    168175        $update_response = wp_update_term( $menu_id, 'nav_menu', $args );
    169176
    170         if ( ! is_wp_error( $update_response ) ) {
     177        if ( ! is_wp_error( $update_response ) )
    171178            return $menu_id;
    172         }
     179        else
     180            return $update_response;
    173181    } else {
    174182        return 0;
     
    238246    }
    239247   
     248    if ( 'custom' != $args['menu-item-type'] ) {
     249        /* if non-custom menu item, then:
     250            * use original object's URL
     251            * blank default title to sync with original object's
     252        */
     253
     254        $args['menu-item-url'] = '';
     255
     256        $original_title = '';
     257        if ( 'taxonomy' == $args['menu-item-type'] ) {
     258            $original_title = get_term_field( 'name', $args['menu-item-object-id'], $args['menu-item-object'], 'raw' );
     259        } elseif ( 'post_type' == $args['menu-item-type'] ) {
     260            $original_object = get_post( $args['menu-item-object-id'] );
     261            $original_title = $original_object->post_title;
     262        }
     263
     264        if ( empty( $args['menu-item-title'] ) || $args['menu-item-title'] == $original_title ) {
     265            $args['menu-item-title'] = '';
     266
     267            // hack to get wp to create a post object when too many properties are empty
     268            if ( empty( $args['menu-item-description'] ) ) {
     269                $args['menu-item-description'] = ' ';
     270            }
     271        }
     272    }
     273
    240274    // Populate the menu item object
    241275    $post = array(
     
    363397
    364398        $items = get_posts( $args );
     399
     400        if ( is_wp_error( $items ) || ! is_array( $items ) ) {
     401            return false;
     402        }
     403
     404        $items = array_map( 'wp_setup_nav_menu_item', $items );
    365405
    366406        if ( ARRAY_A == $args['output'] ) {
     
    411451                $menu_item->append = $object->singular_label;
    412452                $menu_item->url = get_permalink( $menu_item->object_id );
     453           
     454                $original_object = get_post( $menu_item->object_id );
     455                $original_title = $original_object->post_title;
     456                $menu_item->title = '' == $menu_item->post_title ? $original_title : $menu_item->post_title;
    413457
    414458            } elseif ( 'taxonomy' == $menu_item->type ) {
     
    417461                $menu_item->url = get_term_link( (int) $menu_item->object_id, $menu_item->object );
    418462
     463                $original_title = get_term_field( 'name', $menu_item->object_id, $menu_item->object, 'raw' );
     464                $menu_item->title = '' == $menu_item->post_title ? $original_title : $menu_item->post_title;
     465
    419466            } else {
    420467                $menu_item->append = __('Custom');
     468                $menu_item->title = $menu_item->post_title;
    421469                $menu_item->url = get_post_meta( $menu_item->ID, '_menu_item_url', true );
    422470            }
    423471           
    424             $menu_item->title = $menu_item->post_title;
    425472            $menu_item->target = get_post_meta( $menu_item->ID, '_menu_item_target', true );
    426473
Note: See TracChangeset for help on using the changeset viewer.