WordPress.org

Make WordPress Core

Ticket #13249: menu_item_parent.13249.diff

File menu_item_parent.13249.diff, 7.8 KB (added by filosofo, 5 years ago)
  • wp-includes/nav-menu-template.php

     
    2828         * @todo Decouple this. 
    2929         * @var array 
    3030         */ 
    31         var $db_fields = array( 'parent' => 'post_parent', 'id' => 'object_id' ); 
     31        var $db_fields = array( 'parent' => 'menu_item_parent', 'id' => 'db_id' ); 
    3232 
    3333        /** 
    3434         * @see Walker::start_lvl() 
     
    137137                $_nav_menu_placeholder = ( 0 > $_nav_menu_placeholder ) ? intval($_nav_menu_placeholder) - 1 : -1; 
    138138                $possible_object_id = isset( $item->post_type ) && 'nav_menu_item' == $item->post_type ? $item->object_id : $_nav_menu_placeholder; 
    139139                $possible_db_id = ( ! empty( $item->ID ) ) && ( 0 < $possible_object_id ) ? (int) $item->ID : 0; 
    140                 $possible_parent_id = ( ! empty( $item->ID ) ) && ( 0 < $possible_object_id ) ? (int) $item->post_parent : 0; 
    141140 
    142141                $indent = ( $depth ) ? str_repeat( "\t", $depth ) : ''; 
    143142 
     
    157156                // Menu item hidden fields 
    158157                $output .= '<input type="hidden" class="menu-item-db-id" name="menu-item[' . $possible_object_id . '][menu-item-db-id]" value="' . $possible_db_id . '" />'; 
    159158                $output .= '<input type="hidden" class="menu-item-object" name="menu-item[' . $possible_object_id . '][menu-item-object]" value="'. esc_attr( $item->object ) .'" />'; 
    160                 $output .= '<input type="hidden" class="menu-item-parent-id" name="menu-item[' . $possible_object_id . '][menu-item-parent-id]" value="'. $possible_parent_id .'" />'; 
     159                $output .= '<input type="hidden" class="menu-item-parent-id" name="menu-item[' . $possible_object_id . '][menu-item-parent-id]" value="'. esc_attr( $item->menu_item_parent ) .'" />'; 
    161160                $output .= '<input type="hidden" class="menu-item-type" name="menu-item[' . $possible_object_id . '][menu-item-type]" value="'. esc_attr( $item->type ) .'" />'; 
    162161                $output .= '<input type="hidden" class="menu-item-append" name="menu-item[' . $possible_object_id . '][menu-item-append]" value="'. esc_attr( $item->append ) .'" />'; 
    163162                $output .= '<input type="hidden" class="menu-item-title" name="menu-item[' . $possible_object_id . '][menu-item-title]" value="'. esc_attr( $item->title ) .'" />'; 
  • wp-includes/nav-menu.php

     
    256256                } 
    257257        } 
    258258 
     259        $original_parent = 0 < $menu_item_db_id ? get_post_field( 'post_parent', $menu_item_db_id ) : 0; 
     260 
    259261        if ( 'custom' != $args['menu-item-type'] ) { 
    260262                /* if non-custom menu item, then: 
    261263                        * use original object's URL 
     
    266268 
    267269                $original_title = ''; 
    268270                if ( 'taxonomy' == $args['menu-item-type'] ) { 
     271                        $original_parent = get_term_field( 'parent', $args['menu-item-object-id'], $args['menu-item-object'], 'raw' ); 
    269272                        $original_title = get_term_field( 'name', $args['menu-item-object-id'], $args['menu-item-object'], 'raw' ); 
    270273                } elseif ( 'post_type' == $args['menu-item-type'] ) { 
    271274 
    272275                        $original_object = get_post( $args['menu-item-object-id'] ); 
     276                        $original_parent = (int) $original_object->post_parent; 
    273277                        $original_title = $original_object->post_title; 
    274278 
    275279                        if ( 'trash' == get_post_status( $args['menu-item-object-id'] ) ) { 
     
    297301                'ping_status' => 0, 
    298302                'post_content' => $args['menu-item-description'], 
    299303                'post_excerpt' => $args['menu-item-attr-title'], 
    300                 'post_parent' => $args['menu-item-parent-id'], 
     304                'post_parent' => $original_parent, 
    301305                'post_title' => $args['menu-item-title'], 
    302306                'post_type' => 'nav_menu_item', 
    303307                'tax_input' => array( 'nav_menu' => $menu->name ), 
     
    326330                $menu_item_db_id = (int) $menu_item_db_id; 
    327331 
    328332                update_post_meta( $menu_item_db_id, '_menu_item_type', sanitize_key($args['menu-item-type']) ); 
     333                update_post_meta( $menu_item_db_id, '_menu_item_menu_item_parent', (int) $args['menu-item-parent-id'] ); 
    329334                update_post_meta( $menu_item_db_id, '_menu_item_object_id', (int) $args['menu-item-object-id'] ); 
    330335                update_post_meta( $menu_item_db_id, '_menu_item_object', sanitize_key($args['menu-item-object']) ); 
    331336                update_post_meta( $menu_item_db_id, '_menu_item_target', sanitize_key($args['menu-item-target']) ); 
     
    439444 * Decorates a menu item object with the shared navigation menu item properties. 
    440445 * 
    441446 * Properties: 
    442  * - db_id:             The DB ID of the this item as a nav_menu_item object, if it exists (0 if it doesn't exist). 
     447 * - db_id:             The DB ID of this item as a nav_menu_item object, if it exists (0 if it doesn't exist). 
    443448 * - object_id:         The DB ID of the original object this menu item represents, e.g. ID for posts and term_id for categories. 
    444449 * - type:              The family of objects originally represented, such as "post_type" or "taxonomy." 
    445450 * - object:            The type of object originally represented, such as "category," "post", or "attachment." 
    446451 * - append:            The singular label used to describe this type of menu item. 
    447  * - parent:            The DB ID of the original object's parent object, if any (0 otherwise). 
     452 * - post_parent:       The DB ID of the original object's parent object, if any (0 otherwise). 
     453 * - menu_item_parent:  The DB ID of the nav_menu_item that is this item's menu parent, if any.  0 otherwise. 
    448454 * - url:               The URL to which this menu item points. 
    449455 * - title:             The title of this menu item. 
    450456 * - target:            The target attribute of the link element for this menu item. 
     
    462468        if ( isset( $menu_item->post_type ) ) { 
    463469                if ( 'nav_menu_item' == $menu_item->post_type ) { 
    464470                        $menu_item->db_id = (int) $menu_item->ID; 
     471                        $menu_item->menu_item_parent = get_post_meta( $menu_item->ID, '_menu_item_menu_item_parent', true ); 
    465472                        $menu_item->object_id = get_post_meta( $menu_item->ID, '_menu_item_object_id', true ); 
    466473                        $menu_item->object = get_post_meta( $menu_item->ID, '_menu_item_object', true ); 
    467474                        $menu_item->type = get_post_meta( $menu_item->ID, '_menu_item_type', true ); 
     
    498505                        $menu_item->xfn = get_post_meta( $menu_item->ID, '_menu_item_xfn', true ); 
    499506                } else { 
    500507                        $menu_item->db_id = 0; 
     508                        $menu_item->menu_item_parent = 0; 
    501509                        $menu_item->object_id = (int) $menu_item->ID; 
    502510                        $menu_item->type = 'post_type'; 
    503511 
     
    517525        } elseif ( isset( $menu_item->taxonomy ) ) { 
    518526                $menu_item->ID = $menu_item->term_id; 
    519527                $menu_item->db_id = 0; 
     528                $menu_item->menu_item_parent = 0; 
    520529                $menu_item->object_id = (int) $menu_item->term_id; 
    521530                $menu_item->post_parent = (int) $menu_item->parent; 
    522531                $menu_item->type = 'taxonomy'; 
  • wp-admin/includes/nav-menu.php

     
    187187                                <input class="menu-item-data-db-id" type="hidden" name="menu-item-db-id[<?php echo $item_id; ?>]" value="<?php echo $item_id; ?>" /> 
    188188                                <input class="menu-item-data-object-id" type="hidden" name="menu-item-object-id[<?php echo $item_id; ?>]" value="<?php echo esc_attr( $item->object_id ); ?>" /> 
    189189                                <input class="menu-item-data-object" type="hidden" name="menu-item-object[<?php echo $item_id; ?>]" value="<?php echo esc_attr( $item->object ); ?>" /> 
    190                                 <input class="menu-item-data-parent-id" type="hidden" name="menu-item-parent-id[<?php echo $item_id; ?>]" value="<?php echo esc_attr( $item->post_parent ); ?>" /> 
     190                                <input class="menu-item-data-parent-id" type="hidden" name="menu-item-parent-id[<?php echo $item_id; ?>]" value="<?php echo esc_attr( $item->menu_item_parent ); ?>" /> 
    191191                                <input class="menu-item-data-position" type="hidden" class="menu-item-position" name="menu-item-position[<?php echo $item_id; ?>]" value="<?php echo esc_attr( $item->menu_order ); ?>" /> 
    192192                                <input class="menu-item-data-type" type="hidden" name="menu-item-type[<?php echo $item_id; ?>]" value="<?php echo esc_attr( $item->type ); ?>" /> 
    193193                        </div><!-- .menu-item-settings-->