Make WordPress Core


Ignore:
Timestamp:
03/17/2010 07:57:08 PM (15 years ago)
Author:
markjaquith
Message:

Nav Menus: blur/Focus behavior for Create Menu and Add Custom Links. Route "return" presses in each of those areas to proper button press. Better create/save logic on the PHP side.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/wp-admin/nav-menus.php

    r13733 r13739  
    6868
    6969        // Add Menu
    70         if ( isset($_POST['create-menu']) ) {
     70        if ( isset($_POST['create-menu-button']) ) {
    7171            if ( current_theme_supports('nav-menus') ) {
    7272                $add_nav_menu = esc_html( $_POST['create-menu-name'] );
     
    8787                unset($add_nav_menu);
    8888            }
    89         } elseif ( isset($_POST['menu-name']) ) {
    90             $old_nav_menu = get_term( $nav_menu_selected_id, 'nav_menu', ARRAY_A );
    91             $args = array( 'name' => $_POST['menu-name'], 'slug' => null, 'description' => $old_nav_menu['description'], 'parent' => $old_nav_menu['parent'], );
    92             $new_nav_menu = wp_update_term( $nav_menu_selected_id, 'nav_menu', $args );
    93         }
    94 
    95         // Update menu items
    96         $update_nav_items = isset( $_POST['li-count'] ) ? (int) $_POST['li-count'] : 0;
    97         $update_nav_menu = is_nav_menu( $nav_menu_selected_id );
    98 
    99         if ( !is_wp_error($update_nav_menu) ) {
    100             $menu_items = wp_get_nav_menu_items( $nav_menu_selected_id, array('orderby' => 'ID', 'output' => ARRAY_A, 'output_key' => 'ID') );
    101             $parent_menu_ids = array();
    102 
    103             // Loop through all POST variables
    104             for ( $k = 0; $k < $update_nav_items; $k++ ) {
    105                 $menu_item_db_id        = isset( $_POST['menu-item-db-id'][$k] )        ? $_POST['menu-item-db-id'][$k]     : 0;
    106                 $menu_item_object_id    = isset( $_POST['menu-item-object-id'][$k] )    ? $_POST['menu-item-object-id'][$k] : 0;
    107                 $menu_item_parent_id    = isset( $_POST['menu-item-parent-id'][$k] )    ? $_POST['menu-item-parent-id'][$k] : 0;
    108                 $menu_item_position     = isset( $_POST['menu-item-position'][$k] )     ? $_POST['menu-item-position'][$k]  : 0;
    109                 $menu_item_type         = isset( $_POST['menu-item-type'][$k] )         ? $_POST['menu-item-type'][$k]      : 'custom';
    110                 $menu_item_append       = isset( $_POST['menu-item-append'][$k] )       ? $_POST['menu-item-append'][$k]    : 'custom';
    111 
    112                 $menu_item_title        = isset( $_POST['menu-item-title'][$k] )        ? $_POST['menu-item-title'][$k]     : '';
    113                 $menu_item_url          = isset( $_POST['menu-item-url'][$k] )          ? $_POST['menu-item-url'][$k]       : '';
    114                 $menu_item_description  = isset( $_POST['menu-item-description'][$k] )  ? $_POST['menu-item-description'][$k]: '';
    115                 $menu_item_attr_title   = isset( $_POST['menu-item-attr-title'][$k] )   ? $_POST['menu-item-attr-title'][$k] : '';
    116                 $menu_item_target       = isset( $_POST['menu-item-target'][$k] )       ? $_POST['menu-item-target'][$k]    : 0;
    117                 $menu_item_classes      = isset( $_POST['menu-item-classes'][$k] )      ? $_POST['menu-item-classes'][$k]   : '';
    118                 $menu_item_xfn          = isset( $_POST['menu-item-xfn'][$k] )          ? $_POST['menu-item-xfn'][$k]       : '';
    119 
    120                 // Menu item title can't be blank
    121                 if ( '' == $menu_item_title )
    122                     continue;
    123 
    124                 // Populate the menu item
    125                 $post = array( 'post_status' => 'publish', 'post_type' => 'nav_menu_item', 'post_author' => $user_ID,
    126                     'ping_status' => 0, 'post_parent' => $menu_item_parent_id, 'menu_order' => $menu_item_position,
    127                     'post_excerpt' => $menu_item_attr_title, 'tax_input' => array( 'nav_menu' => $update_nav_menu->name ),
    128                     'post_content' => $menu_item_description, 'post_title' => $menu_item_title );
    129 
    130                 // New menu item
    131                 if ( $menu_item_db_id == 0 ) {
    132                     $menu_item_db_id = wp_insert_post( $post );
    133                 } elseif ( isset( $menu_items[$menu_item_db_id] ) ) {
    134                     $post['ID'] = $menu_item_db_id;
    135                     wp_update_post( $post );
    136                     unset( $menu_items[$menu_item_db_id] );
     89        } else {
     90            if ( isset($_POST['menu-name']) ) {
     91                $old_nav_menu = get_term( $nav_menu_selected_id, 'nav_menu', ARRAY_A );
     92                $args = array( 'name' => $_POST['menu-name'], 'slug' => null, 'description' => $old_nav_menu['description'], 'parent' => $old_nav_menu['parent'], );
     93                $new_nav_menu = wp_update_term( $nav_menu_selected_id, 'nav_menu', $args );
     94            }
     95
     96            // Update menu items
     97            $update_nav_items = isset( $_POST['li-count'] ) ? (int) $_POST['li-count'] : 0;
     98            $update_nav_menu = is_nav_menu( $nav_menu_selected_id );
     99
     100            if ( !is_wp_error($update_nav_menu) ) {
     101                $menu_items = wp_get_nav_menu_items( $nav_menu_selected_id, array('orderby' => 'ID', 'output' => ARRAY_A, 'output_key' => 'ID') );
     102                $parent_menu_ids = array();
     103
     104                // Loop through all POST variables
     105                for ( $k = 0; $k < $update_nav_items; $k++ ) {
     106                    $menu_item_db_id        = isset( $_POST['menu-item-db-id'][$k] )        ? $_POST['menu-item-db-id'][$k]     : 0;
     107                    $menu_item_object_id    = isset( $_POST['menu-item-object-id'][$k] )    ? $_POST['menu-item-object-id'][$k] : 0;
     108                    $menu_item_parent_id    = isset( $_POST['menu-item-parent-id'][$k] )    ? $_POST['menu-item-parent-id'][$k] : 0;
     109                    $menu_item_position     = isset( $_POST['menu-item-position'][$k] )     ? $_POST['menu-item-position'][$k]  : 0;
     110                    $menu_item_type         = isset( $_POST['menu-item-type'][$k] )         ? $_POST['menu-item-type'][$k]      : 'custom';
     111                    $menu_item_append       = isset( $_POST['menu-item-append'][$k] )       ? $_POST['menu-item-append'][$k]    : 'custom';
     112
     113                    $menu_item_title        = isset( $_POST['menu-item-title'][$k] )        ? $_POST['menu-item-title'][$k]     : '';
     114                    $menu_item_url          = isset( $_POST['menu-item-url'][$k] )          ? $_POST['menu-item-url'][$k]       : '';
     115                    $menu_item_description  = isset( $_POST['menu-item-description'][$k] )  ? $_POST['menu-item-description'][$k]: '';
     116                    $menu_item_attr_title   = isset( $_POST['menu-item-attr-title'][$k] )   ? $_POST['menu-item-attr-title'][$k] : '';
     117                    $menu_item_target       = isset( $_POST['menu-item-target'][$k] )       ? $_POST['menu-item-target'][$k]    : 0;
     118                    $menu_item_classes      = isset( $_POST['menu-item-classes'][$k] )      ? $_POST['menu-item-classes'][$k]   : '';
     119                    $menu_item_xfn          = isset( $_POST['menu-item-xfn'][$k] )          ? $_POST['menu-item-xfn'][$k]       : '';
     120
     121                    // Menu item title can't be blank
     122                    if ( '' == $menu_item_title )
     123                        continue;
     124
     125                    // Populate the menu item
     126                    $post = array( 'post_status' => 'publish', 'post_type' => 'nav_menu_item', 'post_author' => $user_ID,
     127                        'ping_status' => 0, 'post_parent' => $menu_item_parent_id, 'menu_order' => $menu_item_position,
     128                        'post_excerpt' => $menu_item_attr_title, 'tax_input' => array( 'nav_menu' => $update_nav_menu->name ),
     129                        'post_content' => $menu_item_description, 'post_title' => $menu_item_title );
     130
     131                    // New menu item
     132                    if ( $menu_item_db_id == 0 ) {
     133                        $menu_item_db_id = wp_insert_post( $post );
     134                    } elseif ( isset( $menu_items[$menu_item_db_id] ) ) {
     135                        $post['ID'] = $menu_item_db_id;
     136                        wp_update_post( $post );
     137                        unset( $menu_items[$menu_item_db_id] );
     138                    }
     139                    $parent_menu_ids[$k] = $menu_item_db_id;
     140
     141                    // @todo sanitize type append and ID.
     142                    update_post_meta( $menu_item_db_id, 'menu_item_type', $menu_item_type );
     143                    update_post_meta( $menu_item_db_id, 'menu_item_append', $menu_item_append );
     144                    update_post_meta( $menu_item_db_id, 'menu_item_object_id', $menu_item_object_id );
     145                    update_post_meta( $menu_item_db_id, 'menu_item_target', sanitize_key($menu_item_target) );
     146                    // @todo handle sanitizing multiple classes separated by whitespace.
     147                    update_post_meta( $menu_item_db_id, 'menu_item_classes', sanitize_html_class($menu_item_classes) );
     148                    update_post_meta( $menu_item_db_id, 'menu_item_xfn', sanitize_html_class($menu_item_xfn) );
     149
     150                    // @todo: only save custom link urls.
     151                    update_post_meta( $menu_item_db_id, 'menu_item_url', esc_url_raw( $menu_item_url ) );
    137152                }
    138                 $parent_menu_ids[$k] = $menu_item_db_id;
    139 
    140                 // @todo sanitize type append and ID.
    141                 update_post_meta( $menu_item_db_id, 'menu_item_type', $menu_item_type );
    142                 update_post_meta( $menu_item_db_id, 'menu_item_append', $menu_item_append );
    143                 update_post_meta( $menu_item_db_id, 'menu_item_object_id', $menu_item_object_id );
    144                 update_post_meta( $menu_item_db_id, 'menu_item_target', sanitize_key($menu_item_target) );
    145                 // @todo handle sanitizing multiple classes separated by whitespace.
    146                 update_post_meta( $menu_item_db_id, 'menu_item_classes', sanitize_html_class($menu_item_classes) );
    147                 update_post_meta( $menu_item_db_id, 'menu_item_xfn', sanitize_html_class($menu_item_xfn) );
    148 
    149                 // @todo: only save custom link urls.
    150                 update_post_meta( $menu_item_db_id, 'menu_item_url', esc_url_raw( $menu_item_url ) );
     153
     154                // Remove menu items from the menu that weren't in $_POST
     155                if ( !empty( $menu_items ) ) {
     156                    foreach ( array_keys( $menu_items ) as $menu_item_id ) {
     157                        wp_delete_post( $menu_item_id );
     158                    }
     159                }
     160                $messages_div = '<div id="message" class="updated fade below-h2"><p>' . __('The menu has been updated.') . '</p></div>';
    151161            }
    152 
    153             // Remove menu items from the menu that weren't in $_POST
    154             if ( !empty( $menu_items ) ) {
    155                 foreach ( array_keys( $menu_items ) as $menu_item_id ) {
    156                     wp_delete_post( $menu_item_id );
    157                 }
    158             }
    159             $messages_div = '<div id="message" class="updated fade below-h2"><p>' . __('The menu has been updated.') . '</p></div>';
    160162        }
    161163        break;
Note: See TracChangeset for help on using the changeset viewer.