Make WordPress Core


Ignore:
Timestamp:
03/17/2010 07:57:08 PM (17 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.