WordPress.org

Make WordPress Core

Ticket #13958: handle-invalid-object-types.13958.diff

File handle-invalid-object-types.13958.diff, 4.7 KB (added by filosofo, 4 years ago)
  • wp-includes/nav-menu-template.php

     
    9191                $output .= apply_filters( 'walker_nav_menu_start_el', $item_output, $item, $depth, $args ); 
    9292        } 
    9393 
     94        function display_element( $menu_item, &$desc_items, $max_depth, $depth = 0, $wp_nav_menu_args = array(), &$output ) { 
     95                if ( empty( $menu_item ) || ! isset( $menu_item->post_status ) || 'publish' != $menu_item->post_status && empty( $wp_nav_menu_args['_display_unpublished'] ) ) 
     96                        return; 
     97 
     98                return parent::display_element( $menu_item, $desc_items, $max_depth, $depth, $wp_nav_menu_args, $output ); 
     99        } 
     100 
    94101        /** 
    95102         * @see Walker::end_el() 
    96103         * @since 3.0.0 
  • wp-includes/nav-menu.php

     
    305305                $original_title = ''; 
    306306                if ( 'taxonomy' == $args['menu-item-type'] ) { 
    307307                        $original_parent = get_term_field( 'parent', $args['menu-item-object-id'], $args['menu-item-object'], 'raw' ); 
     308                        if ( is_wp_error( $original_parent ) ) 
     309                                return $original_parent; 
     310 
    308311                        $original_title = get_term_field( 'name', $args['menu-item-object-id'], $args['menu-item-object'], 'raw' ); 
     312                        if ( is_wp_error( $original_title ) ) 
     313                                return $original_title; 
     314 
    309315                } elseif ( 'post_type' == $args['menu-item-type'] ) { 
    310316 
    311317                        $original_object = get_post( $args['menu-item-object-id'] ); 
     318                        if ( empty( $original_object->post_type ) || ! post_type_exists( $original_object->post_type ) )  
     319                                return new WP_Error('invalid_post_type', __( 'Invalid post type.' ) ); 
    312320                        $original_parent = (int) $original_object->post_parent; 
    313321                        $original_title = $original_object->post_title; 
    314322                } 
     
    543551 
    544552                        if ( 'post_type' == $menu_item->type ) { 
    545553                                $object = get_post_type_object( $menu_item->object ); 
    546                                 $menu_item->type_label = $object->labels->singular_name; 
     554                                $menu_item->type_label = empty( $object ) ? '' : $object->labels->singular_name; 
    547555                                $menu_item->url = get_permalink( $menu_item->object_id ); 
    548  
     556                                 
    549557                                $original_object = get_post( $menu_item->object_id ); 
    550558                                $original_title = $original_object->post_title; 
    551559                                $menu_item->title = '' == $menu_item->post_title ? $original_title : $menu_item->post_title; 
     560                                 
     561                                if ( ! post_type_exists( $menu_item->object ) ) { 
     562                                        $menu_item->title = __( 'Invalid post type.' ); 
     563                                        $menu_item->url = ''; 
     564                                        $menu_item->post_status = 'draft'; 
     565                                } 
    552566 
     567 
    553568                        } elseif ( 'taxonomy' == $menu_item->type ) { 
    554569                                $object = get_taxonomy( $menu_item->object ); 
    555                                 $menu_item->type_label = $object->labels->singular_name; 
     570                                $menu_item->type_label = empty( $object ) ? '' : $object->labels->singular_name; 
    556571                                $term_url = get_term_link( (int) $menu_item->object_id, $menu_item->object ); 
    557                                 $menu_item->url = !is_wp_error( $term_url ) ? $term_url : ''; 
     572                                $menu_item->url = ! is_wp_error( $term_url ) ? $term_url : ''; 
    558573 
    559574                                $original_title = get_term_field( 'name', $menu_item->object_id, $menu_item->object, 'raw' ); 
    560575                                $menu_item->title = '' == $menu_item->post_title ? $original_title : $menu_item->post_title; 
     576                                if ( is_wp_error( $original_title ) ) { 
     577                                        $menu_item->title = $original_title->get_error_message(); 
     578                                        $menu_item->url = ''; 
     579                                        $menu_item->post_status = 'draft'; 
     580                                } 
    561581 
    562582                        } else { 
    563583                                $menu_item->type_label = __('Custom'); 
  • wp-admin/includes/nav-menu.php

     
    88 * @uses Walker_Nav_Menu 
    99 */ 
    1010class Walker_Nav_Menu_Edit extends Walker_Nav_Menu  { 
     11         
    1112        /** 
     13         * Generate the markup for an individual menu item to edit. 
     14         * 
     15         * @see Walker_Nav_Menu::display_element() 
     16         * @since 3.1 
     17         */ 
     18        function display_element( $menu_item, &$desc_items, $max_depth, $depth = 0, $wp_nav_menu_args = array(), &$output ) { 
     19                $wp_nav_menu_args['_display_unpublished'] = true; 
     20 
     21                return parent::display_element( $menu_item, $desc_items, $max_depth, $depth, $wp_nav_menu_args, $output ); 
     22        } 
     23 
     24        /** 
    1225         * @see Walker_Nav_Menu::start_lvl() 
    1326         * @since 3.0.0 
    1427         * 
     
    5770                $original_title = ''; 
    5871                if ( 'taxonomy' == $item->type ) { 
    5972                        $original_title = get_term_field( 'name', $item->object_id, $item->object, 'raw' ); 
     73                        if ( is_wp_error( $original_title ) ) 
     74                                $original_title = $original_title->get_error_message(); 
    6075                } elseif ( 'post_type' == $item->type ) { 
    6176                        $original_object = get_post( $item->object_id ); 
    6277                        $original_title = $original_object->post_title;