Make WordPress Core

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

File handle-invalid-object-types.13958.diff, 4.7 KB (added by filosofo, 15 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;