WordPress.org

Make WordPress Core


Ignore:
Timestamp:
03/15/2010 04:26:46 PM (12 years ago)
Author:
ryan
Message:

Menus rework. Props ptahdunbar. see #11817

File:
1 edited

Legend:

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

    r13685 r13704  
    1010 */
    1111
    12 require_once('admin.php');
    13 
    14 /*
    15 TODO
    16     Add caps: edit_menus, delete_menus
    17 */
     12/** Load WordPress Administration Bootstrap */
     13require_once( 'admin.php' );
     14
     15// Permissions Check
    1816if ( ! current_user_can('switch_themes') )
    1917    wp_die( __( 'Cheatin’ uh?' ));
    2018
     19// Nav Menu CSS
    2120wp_admin_css( 'nav-menu' );
     21
     22// jQuery
    2223wp_enqueue_script( 'jquery' );
    2324wp_enqueue_script( 'jquery-ui-draggable' );
    2425wp_enqueue_script( 'jquery-ui-droppable' );
    2526wp_enqueue_script( 'jquery-ui-sortable' );
    26 wp_enqueue_script( 'jquery-ui-dialog' );
     27wp_enqueue_script( 'jquery-autocomplete' );
     28
     29// Nav Menu functions
    2730wp_enqueue_script( 'nav-menu-dynamic-functions' );
    2831wp_enqueue_script( 'nav-menu-default-items' );
    29 wp_enqueue_script( 'jquery-autocomplete' );
    3032wp_enqueue_script( 'nav-menu-php-functions' );
     33
     34// Metaboxes
     35wp_enqueue_script( 'common' );
     36wp_enqueue_script( 'wp-lists' );
     37wp_enqueue_script( 'postbox' );
     38
     39// Thickbox
    3140add_thickbox();
    3241
     42// Load all the nav menu interface functions
     43require_once( ABSPATH . 'wp-admin/includes/nav-menu.php' );
     44
     45// Container for any messages displayed to the user
     46$messages_div = '';
     47
     48// Container that stores the name of the active menu
     49$nav_menu_selected_title = '';
     50
     51// The menu id of the current menu being edited
     52$nav_menu_selected_id = isset( $_REQUEST['menu'] ) ? (int) $_REQUEST['menu'] : 0;
     53
     54// Allowed actions: add, update, delete
     55$action = isset( $_REQUEST['action'] ) ? $_REQUEST['action'] : 'edit';
     56
     57switch ( $action ) {
     58    case 'delete':
     59        check_admin_referer( 'delete-nav_menu-' . $nav_menu_selected_id );
     60
     61        if ( is_nav_menu($nav_menu_selected_id) ) {
     62            wp_delete_nav_menu( $nav_menu_selected_id );
     63            $messages_div = '<div id="message" class="updated fade below-h2"><p>' . __('Menu successfully deleted.') . '</p></div>';
     64            $nav_menu_selected_id = 0;
     65        }
     66        break;
     67   
     68    case 'update':
     69        check_admin_referer( 'update-nav_menu' );
     70       
     71        // Add Menu
     72        if ( isset($_POST['create-menu']) ) {
     73            if ( current_theme_supports('nav-menus') ) {
     74                $add_nav_menu = esc_html( $_POST['create-menu-name'] );
     75
     76                if ( $add_nav_menu ) {
     77                    $add_nav_menu = wp_create_nav_menu( $add_nav_menu );
     78
     79                    if ( is_wp_error( $add_nav_menu ) ) {
     80                        $messages_div = '<div id="message" class="error fade below-h2"><p>' . $add_nav_menu->get_error_message() . '</p></div>';
     81                    } else {
     82                        $nav_menu_selected_id = $add_nav_menu->term_id;
     83                        $nav_menu_selected_title = $add_nav_menu->name;
     84                        $messages_div = '<div id="message" class="updated fade below-h2"><p>' . sprintf( __('The <strong>%s</strong> menu has been successfully created.'), esc_html( $add_nav_menu->name ) ) . '</p></div>';
     85                    }
     86                } else {
     87                    $messages_div = '<div id="message" class="error fade below-h2"><p>' . __('Please enter a valid menu name.') . '</p></div>';
     88                }
     89                unset($add_nav_menu);
     90            }
     91        }
     92       
     93        // Update menu name
     94        if ( isset($_POST['menu-name']) ) {
     95            $old_nav_menu = get_term( $nav_menu_selected_id, 'nav_menu', ARRAY_A );
     96            $args = array( 'name' => $_POST['menu-name'], 'slug' => null, 'description' => $old_nav_menu['description'], 'parent' => $old_nav_menu['parent'], );
     97            $new_nav_menu = wp_update_term( $nav_menu_selected_id, 'nav_menu', $args );
     98        }
     99       
     100        // Update menu items
     101        $update_nav_items = isset( $_POST['li-count'] ) ? (int) $_POST['li-count'] : 0;
     102        $update_nav_menu = is_nav_menu( $nav_menu_selected_id );
     103       
     104        if ( !is_wp_error($update_nav_menu) ) {
     105            $menu_items = wp_get_nav_menu_items( $nav_menu_selected_id, array('orderby' => 'ID', 'output' => ARRAY_A, 'output_key' => 'ID') );
     106            $parent_menu_ids = array();
     107           
     108            // Loop through all POST variables
     109            for ( $k = 0; $k < $update_nav_items; $k++ ) {
     110               
     111                $menu_item_db_id        = isset( $_POST['menu-item-db-id'][$k] )        ? $_POST['menu-item-db-id'][$k]     : 0;
     112                $menu_item_object_id    = isset( $_POST['menu-item-object-id'][$k] )    ? $_POST['menu-item-object-id'][$k] : 0;
     113                $menu_item_parent_id    = isset( $_POST['menu-item-parent-id'][$k] )    ? $_POST['menu-item-parent-id'][$k] : 0;
     114                $menu_item_position     = isset( $_POST['menu-item-position'][$k] )     ? $_POST['menu-item-position'][$k]  : 0;
     115                $menu_item_type         = isset( $_POST['menu-item-type'][$k] )         ? $_POST['menu-item-type'][$k]      : 'custom';
     116                $menu_item_append       = isset( $_POST['menu-item-append'][$k] )       ? $_POST['menu-item-append'][$k]    : 'custom';
     117               
     118                $menu_item_title        = isset( $_POST['menu-item-title'][$k] )        ? $_POST['menu-item-title'][$k]     : '';
     119                $menu_item_url          = isset( $_POST['menu-item-url'][$k] )          ? $_POST['menu-item-url'][$k]       : '';
     120                $menu_item_description  = isset( $_POST['menu-item-description'][$k] )  ? $_POST['menu-item-description'][$k]: '';
     121                $menu_item_attr_title   = isset( $_POST['menu-item-attr-title'][$k] )   ? $_POST['menu-item-attr-title'][$k] : '';
     122                $menu_item_target       = isset( $_POST['menu-item-target'][$k] )       ? $_POST['menu-item-target'][$k]    : 0;
     123                $menu_item_classes      = isset( $_POST['menu-item-classes'][$k] )      ? $_POST['menu-item-classes'][$k]   : '';
     124                $menu_item_xfn          = isset( $_POST['menu-item-xfn'][$k] )          ? $_POST['menu-item-xfn'][$k]       : '';
     125               
     126                // Menu item title can't be blank
     127                if ( '' == $menu_item_title )
     128                    continue;
     129               
     130                // Populate the menu item
     131                $post = array( 'post_status' => 'publish', 'post_type' => 'nav_menu_item', 'post_author' => $user_ID,
     132                    'ping_status' => 0, 'post_parent' => $menu_item_parent_id, 'menu_order' => $menu_item_position,
     133                    'post_excerpt' => $menu_item_attr_title, 'tax_input' => array( 'nav_menu' => $update_nav_menu->name ),
     134                    'post_content' => $menu_item_description, 'post_title' => $menu_item_title );
     135
     136                // New menu item
     137                if ( $menu_item_db_id == 0 ) {
     138                    $menu_item_db_id = wp_insert_post( $post );
     139                } elseif ( isset( $menu_items[$menu_item_db_id] ) ) {
     140                    $post['ID'] = $menu_item_db_id;
     141                    wp_update_post( $post );
     142                    unset( $menu_items[$menu_item_db_id] );
     143                }
     144                $parent_menu_ids[$k] = $menu_item_db_id;
     145               
     146                update_post_meta( $menu_item_db_id, 'menu_item_type', $menu_item_type );
     147                update_post_meta( $menu_item_db_id, 'menu_item_append', $menu_item_append );
     148                update_post_meta( $menu_item_db_id, 'menu_item_object_id', $menu_item_object_id );
     149                update_post_meta( $menu_item_db_id, 'menu_item_target', esc_attr($menu_item_target) );
     150                update_post_meta( $menu_item_db_id, 'menu_item_classes', esc_attr($menu_item_classes) );
     151                update_post_meta( $menu_item_db_id, 'menu_item_xfn', esc_attr($menu_item_xfn) );
     152               
     153                // @todo: only save custom link urls.
     154                update_post_meta( $menu_item_db_id, 'menu_item_url', esc_url_raw( $menu_item_url ) );
     155            }
     156           
     157            // Remove menu items from the menu that weren't in $_POST
     158            if ( !empty( $menu_items ) ) {
     159                foreach ( array_keys( $menu_items ) as $menu_item_id ) {
     160                    wp_delete_post( $menu_item_id );
     161                }
     162            }
     163            $messages_div = '<div id="message" class="updated fade below-h2"><p>' . __('The menu has been updated.') . '</p></div>';
     164        }
     165        break;
     166}
     167
     168// Get all nav menus
     169$nav_menus = wp_get_nav_menus();
     170
     171// Get recently edited nav menu
     172$recently_edited = get_user_option( 'nav_menu_recently_edited' );
     173
     174// If there was no recently edited menu, and $nav_menu_selected_id is a nav menu, update recently edited menu.
     175if ( !$recently_edited && is_nav_menu($nav_menu_selected_id) ) {
     176    $recently_edited = $nav_menu_selected_id;
     177
     178// Else if $nav_menu_selected_id is not a menu, but $recently_edited is, grab that one.
     179} elseif ( 0 == $nav_menu_selected_id && is_nav_menu($recently_edited) ) {
     180    $nav_menu_selected_id = $recently_edited;
     181
     182// Else try to grab the first menu from the menus list
     183} elseif ( 0 == $nav_menu_selected_id && ! empty($nav_menus) ) {
     184    $nav_menu_selected_id = $nav_menus[0]->term_id;
     185}
     186
     187// Update the user's setting
     188if ( $nav_menu_selected_id != $recently_edited && is_nav_menu($nav_menu_selected_id) )
     189    update_user_meta( $current_user->ID, 'nav_menu_recently_edited', $nav_menu_selected_id );
     190
     191// If there's a menu, get it's name.
     192if ( !$nav_menu_selected_title && $nav_menu_selected_title = is_nav_menu( $nav_menu_selected_id ) ) {
     193    $nav_menu_selected_title = $nav_menu_selected_title->name;
     194}
     195
     196// The user has no menus.
     197if ( !is_nav_menu( $nav_menu_selected_id ) ) {
     198    if ( current_theme_supports('nav-menus') ) {
     199        $messages_div = '<div id="message" class="updated"><p>' . __('You haven\'t setup any menus yet. Create a new menu.') . '</p></div>';
     200    } else {
     201        $messages_div = '<div id="message" class="error"><p>' . __('The current theme does not support menus.') . '</p></div>';
     202    }
     203} else {
     204    add_meta_box( 'manage-menu', __( 'Menu Settings' ), 'wp_nav_menu_manage_menu_metabox', 'menus', 'side', 'high', array( $nav_menu_selected_id, $nav_menu_selected_title ) );
     205}
     206
     207// Get the admin header
    33208require_once( 'admin-header.php' );
    34 require_once( ABSPATH . 'wp-admin/includes/nav-menu.php' );
    35 
    36 function wp_reset_nav_menu() {
    37     wp_nav_menu_setup( true );
    38     return true;
    39 }
    40 
    41 $messages_div = '';
    42 $menu_id_in_edit = 0;
    43 $updated = false;
    44 $advanced_option_descriptions = 'no';
    45 
    46 // Check which menu is selected and if menu is in edit already
    47 if ( isset( $_GET['edit-menu'] ) ) {
    48     $menu_selected_id = (int) $_GET['edit-menu'];
    49     $updated = true;
    50 } elseif ( isset( $_POST[ 'menu-id-in-edit' ] ) ) {
    51     $menu_selected_id = (int) $_POST[ 'menu-id-in-edit' ];
    52 } else {
    53     $menu_selected_id = 0;
    54 }
    55 
    56 // Delete a menu
    57 if ( isset($_GET['delete-menu']) && $_GET['delete-menu'] > 0 ) {
    58     // if ( ! current_user_can('delete_menus') )
    59     //  wp_die( __( 'Cheatin&#8217; uh?' ));
    60 
    61     $menu_id = (int) $_GET['delete-menu'];
    62     check_admin_referer( 'delete_menu-' . $menu_id );
    63 
    64     wp_delete_nav_menu( $menu_id );
    65     $messages_div = '<div id="message" class="updated fade below-h2"><p>' . __('Menu successfully deleted.') . '</p></div>';
    66     $menu_selected_id = 0;
    67     $updated = true;
    68 }
    69 
    70 // Default Menu to show
    71 $menus = wp_get_nav_menus();
    72 
    73 if ( empty($menus) && empty($_POST) ) {
    74     wp_create_default_nav_menu();
    75     $menus = wp_get_nav_menus();
    76 }
    77 
    78 if ( ! $menu_selected_id && ! empty($menus) )
    79     $menu_selected_id = $menus[0]->term_id;
    80 
    81 // Get the name of the current Menu
    82 $menu_title = '';
    83 $valid_menu = false;
    84 if ( $menu_selected_id > 0 ) {
    85     foreach ( $menus as $menu ) {
    86         if ( $menu->term_id == $menu_selected_id ) {
    87             $menu_title = $menu->name;
    88             $valid_menu = true;
    89             break;
    90         }
    91     }
    92 }
    93 
    94 if ( isset( $_POST['li-count'] ) )
    95     $post_counter = $_POST['li-count'];
    96 else
    97     $post_counter = 0;
    98 
    99 // Create a new menu. Menus are stored as terms in the 'menu' taxonomy.
    100 if ( isset( $_POST['create-menu'] ) && ! $updated ) {
    101     $insert_menu_name = $_POST['create-menu-name'];
    102 
    103     if ( $insert_menu_name ) {
    104         $menu = wp_create_nav_menu( $insert_menu_name );
    105         if ( is_wp_error( $menu ) ) {
    106             $messages_div = '<div id="message" class="error fade below-h2"><p>' . $menu->get_error_message() . '</p></div>';
    107         } else {
    108             $menus[$menu->term_id] = $menu;
    109             $menu_selected_id = $menu->term_id;
    110             $menu_id_in_edit = $menu_selected_id;
    111             $menu_title = $menu->name;
    112             $messages_div = '<div id="message" class="updated fade below-h2"><p>' . sprintf( __('&#8220;%s&#8221; menu has been created.'), esc_html( $menu->name ) ) . '</p></div>';
    113             $post_counter = 0;
    114         }
    115     } else {
    116         $messages_div = '<div id="message" class="error fade below-h2"><p>' . __('Please enter a valid menu name.') . '</p></div>';
    117     }
    118     $updated = true;
    119 }
    120 
    121 if ( $post_counter > 0 && $menu_selected_id > 0 && ! $updated ) {
    122     $menu_items = wp_get_nav_menu_items( $menu_selected_id, array('orderby' => 'ID', 'output' => ARRAY_A, 'output_key' => 'ID') );
    123     $parent_menu_ids = array();
    124 
    125     // Loop through all POST variables
    126     for ( $k = 1; $k <= $post_counter; $k++ ) {
    127         $db_id = isset( $_POST['item-dbid'.$k] )? $_POST['item-dbid'.$k] : 0;
    128         $object_id = isset( $_POST['item-postmenu'.$k] )? $_POST['item-postmenu'.$k] : 0;
    129         $parent_id = isset( $_POST['item-parent'.$k] )? $_POST['item-parent'.$k] : 0;
    130         $custom_title = isset( $_POST['item-title'.$k] )?  $_POST['item-title'.$k] : '';
    131         $custom_linkurl = ( isset( $_POST['item-url'.$k] ) && 'custom' == $_POST['item-type'.$k] ) ? $_POST['item-url'.$k] : '';
    132         $custom_description = isset( $_POST['item-description'.$k] )? $_POST['item-description'.$k] : '';
    133 
    134         // doesn't seem to be used by UI
    135         $position = isset( $_POST['item-position'.$k] )? $_POST['item-position'.$k] : 0;
    136         $linktype = isset( $_POST['item-type'.$k] )? $_POST['item-type'.$k] : 'custom';
    137         $custom_anchor_title  = isset( $_POST['item-attr-title'.$k] )? $_POST['item-attr-title'.$k] : $custom_title;
    138         $new_window = isset( $_POST['item-target'.$k] )? $_POST['item-target'.$k] : 0;
    139 
    140         $post = array( 'post_status' => 'publish', 'post_type' => 'nav_menu_item', 'post_author' => $user_ID,
    141             'ping_status' => 0, 'post_parent' => 0, 'menu_order' => $position,
    142             'post_excerpt' => $custom_anchor_title, 'tax_input' => array( 'nav_menu' => $menu_title ),
    143             'post_content' => $custom_description, 'post_title' => $custom_title );
    144 
    145         if ( $parent_id > 0 && isset( $parent_menu_ids[$parent_id] ) )
    146             $post['post_parent'] = $parent_menu_ids[$parent_id];
    147 
    148         // New menu item
    149         if ( $db_id == 0 ) {
    150             $db_id = wp_insert_post( $post );
    151         } elseif ( isset( $menu_items[$db_id] ) ) {
    152             $post['ID'] = $db_id;
    153             wp_update_post( $post );
    154             unset( $menu_items[$db_id] );
    155         }
    156         $parent_menu_ids[ $k ] = $db_id;
    157 
    158         update_post_meta( $db_id, 'menu_type', $linktype );
    159         update_post_meta( $db_id, 'object_id', $object_id );
    160         if ( $new_window )
    161             update_post_meta( $db_id, 'menu_new_window', 1 );
    162         else
    163             update_post_meta( $db_id, 'menu_new_window', 0 );
    164         if ( $custom_linkurl )
    165             update_post_meta( $db_id, 'menu_link', esc_url_raw( $custom_linkurl ) );
    166 
    167     }
    168     if ( !empty( $menu_items ) ) {
    169         foreach ( array_keys( $menu_items ) as $menu_id ) {
    170             wp_delete_post( $menu_id );
    171         }
    172     }
    173     $messages_div = '<div id="message" class="updated fade below-h2"><p>' . __('The menu has been updated.') . '</p></div>';
    174 }
    175 
    176209?>
    177210<div class="wrap">
     
    181214    <div class="hide-if-js error"><p><?php _e('You do not have JavaScript enabled in your browser. Please enable it to access the Menus functionality.'); ?></p></div>
    182215
    183     <form onsubmit="wp_update_post_data();" action="<?php echo admin_url( 'nav-menus.php' ); ?>" method="post" enctype="multipart/form-data">
    184         <?php if ( !empty($menus) && count($menus) > 1 ) : ?>
    185         <ul class="subsubsub">
    186             <?php
    187                 foreach ( $menus as $menu ) {
    188                     $sep = end( $menus ) == $menu ? '' : ' | ';
    189                     if ( ( $menu_id_in_edit == $menu->term_id ) || ( $menu_selected_id == $menu->term_id ) ) { ?>
    190                         <li><a href='nav-menus.php?edit-menu=<?php echo esc_attr($menu->term_id); ?>' class="current"><?php echo esc_html( $menu->name ); ?></a><?php echo $sep; ?></li>
    191             <?php   } else { ?>
    192                         <li><a href='nav-menus.php?edit-menu=<?php echo esc_attr($menu->term_id); ?>'><?php echo esc_html( $menu->name ); ?></a><?php echo $sep; ?></li>
    193             <?php   }
    194                 }
    195             ?>
    196         </ul>
    197         <?php endif; ?>
    198 
    199         <div id="menu-management" class="metabox-holder has-right-sidebar">
     216    <?php if ( !empty($nav_menus) && count($nav_menus) > 1 ) : ?>
     217    <ul class="subsubsub">
     218        <?php
     219            foreach ( $nav_menus as $_nav_menu ) {
     220                $sep = end( $nav_menus ) == $_nav_menu ? '' : ' | ';
     221               
     222                if ( $nav_menu_selected_id == $_nav_menu->term_id )
     223                    echo '<li><a href="'. admin_url( 'nav-menus.php?action=edit&amp;menu=' . esc_attr($_nav_menu->term_id) ) .'" class="current">'. esc_html( $_nav_menu->name ) .'</a>'. $sep .'</li>';
     224                else
     225                    echo '<li><a href="'. admin_url( 'nav-menus.php?action=edit&amp;menu=' . esc_attr($_nav_menu->term_id) ) .'">'. esc_html( $_nav_menu->name ) .'</a>'. $sep .'</li>';
     226            }
     227        ?>
     228    </ul>
     229    <?php endif; ?>
     230
     231    <div id="menu-management" class="metabox-holder has-right-sidebar">
     232        <form id="update-nav-menu" onsubmit="wp_update_post_data();" action="<?php echo admin_url( 'nav-menus.php' ); ?>" method="post" enctype="multipart/form-data">
     233            <?php wp_nonce_field( 'closedpostboxes', 'closedpostboxesnonce', false ); ?>
     234            <?php wp_nonce_field( 'meta-box-order', 'meta-box-order-nonce', false ); ?>
     235            <?php wp_nonce_field( 'update-nav_menu' ); ?>
     236            <input type="hidden" name="action" value="update" />
     237            <input type="hidden" name="li-count" id="li-count" value="0" />
     238            <input type="hidden" name="menu" id="menu" value="<?php echo esc_attr( $nav_menu_selected_id ); ?>" />
     239           
    200240            <div id="post-body">
    201241                <div id="post-body-content">
    202                     <div id="normal-sortables" class="meta-box-sortables ui-sortable">
    203                     <?php if ( $valid_menu and ! empty( $menus ) ) : ?>
     242                    <?php if ( is_nav_menu($nav_menu_selected_id) ) : ?>
    204243                        <div id="menu-container" class="postbox">
    205                             <h3 class="hndle"><?php echo esc_html( $menu_title ); ?></h3>
     244                            <h3 class="hndle"><?php echo esc_html( $nav_menu_selected_title ); ?></h3>
    206245                            <div class="inside">
    207                                 <input type="hidden" name="li-count" id="li-count" value="0" />
    208                                 <input type="hidden" name="menu-id-in-edit" id="menu-id-in-edit" value="<?php echo esc_attr( $menu_selected_id ); ?>" />
    209                                 <?php
    210                                 if ( $menu_selected_id > 0 )
    211                                     echo wp_get_nav_menu( array( 'type' => 'backend', 'menu' => $menu_selected_id, 'ul_class' => 'menu' ) );
    212                                 ?>
    213 
    214                                 <div id="queue" class="hide">
    215                                 </div><!--/#queue-->
     246                               
     247                                <?php echo wp_get_nav_menu( array( 'context' => 'backend', 'menu' => $nav_menu_selected_id ) ); ?>
     248                               
    216249                            </div><!-- /.inside -->
    217250                        <!-- /#nav-menu-canvas .postbox-->
    218251                        </div>
    219                         <p>
    220                             <script type="text/javascript">
    221                                 wp_update_post_data();
    222                             </script>
    223                             <a class="submitdelete deletion" href="<?php echo wp_nonce_url( admin_url('nav-menus.php?delete-menu=' . $menu_selected_id), 'delete_menu-' . $menu_selected_id ); ?>"><?php _e('Delete Menu'); ?></a>
    224                             <input class="button-primary save" name="save_menu" type="submit" value="<?php esc_attr_e('Save All Changes'); ?>" />
    225                             <br class="clear" />
    226                         </p>
     252                        <script type="text/javascript">
     253                            wp_update_post_data();
     254                        </script>
    227255                    <?php endif; ?>
    228                     </div><!-- /#normal-sortables-->
    229256                </div><!-- /#post-body-content-->
    230257            </div><!--- /#post-body -->
    231258            <div id="menu-settings-column" class="inner-sidebar">
    232                 <div id="side-sortables" class="meta-box-sortables ui-sortable">
    233 
    234                     <div id="create-menu" class="postbox">
    235                         <h3 class="hndle"><?php esc_html_e('Create Menu'); ?></h3>
    236                         <div class="inside">
    237                             <p>
    238                                 <input type="text" name="create-menu-name" id="create-menu-name" class="regular-text" value=""  />
    239                                 <input type="submit" name="create-menu" id="create-menu" class="button" value="<?php esc_attr_e('Create Menu'); ?>" />
    240                             </p>
    241                         </div><!-- /.inside-->
    242                     </div><!--END #create-menu-->
    243 
    244                     <div id="add-custom-link" class="postbox">
    245                         <h3 class="hndle"><?php esc_html_e('Add a Custom Link'); ?></h3>
    246                         <div class="inside">
    247                             <p id="menu-item-url-wrap">
    248                                 <label class="howto" for="menu-item-url">
    249                                     <span><?php _e('URL'); ?></span>
    250                                     <input id="menu-item-url" name="menu-item-url" type="text" class="code" value="http://" />
    251                                 </label>
    252                             </p>
    253                             <br class="clear" />
    254                             <p id="menu-item-name-wrap">
    255                                 <label class="howto" for="custom-menu-item-name">
    256                                     <span><?php _e('Text'); ?></span>
    257                                     <input id="menu-item-name" type="text" class="regular-text" value="<?php echo esc_attr( __('Menu Item') ); ?>" />
    258                                 </label>
    259                             </p>
    260 
    261                             <p class="button-controls">
    262                                 <a class="show-all"><?php _e('View All'); ?></a>
    263                                 <a class="hide-all"><?php _e('Hide All'); ?></a>
    264                             </p>
    265                             <div id="available-links" class="list-wrap">
    266                                 <div class="list-container">
    267                                     <ul class="list">
    268                                     <?php $items_counter = wp_nav_menu_get_custom_links( 0, 'default' ); ?>
    269                                     </ul>
    270                                 </div><!-- /.list-container-->
    271                             </div><!-- /#available-links-->
    272                             <p class="add-to-menu">
    273                                 <a class="button"><?php _e('Add to Menu'); ?></a>
    274                             </p>
    275                             <br class="clear" />
    276                         </div><!-- /.inside-->
    277                     </div><!-- /#add-custom-link-->
    278 
    279                     <div id="add-pages" class="postbox">
    280                         <h3 class="hndle"><?php esc_html_e('Add an Existing Page'); ?></h3>
    281                         <div class="inside">
    282                             <?php
    283                                 $pages_args = array(
    284                                     'child_of' => 0, 'sort_order' => 'ASC', 'sort_column' => 'post_title', 'hierarchical' => 1,
    285                                     'exclude' => '', 'include' => '', 'meta_key' => '', 'meta_value' => '', 'authors' => '',
    286                                     'parent' => -1, 'exclude_tree' => '', 'number' => '', 'offset' => 0
    287                                 );
    288                                 $page_name = '';
    289                                 $pages_array = get_pages( $pages_args );
    290                                 if ( $pages_array ) {
    291                                     foreach ( $pages_array as $post ) {
    292                                         $page_name .= $post->post_title . '|';
    293                                     }
    294                                 } else {
    295                                     $page_name = __('No pages available');
    296                                 }
    297                             ?>
    298                             <script type="text/javascript" charset="<?php bloginfo('charset'); ?>">
    299                                 jQuery(document).ready(function(){
    300                                     var posts = "<?php echo esc_js( $page_name ); ?>".split('|');
    301                                     jQuery('#add-pages .quick-search').autocomplete(posts);
    302 
    303 
    304                                     jQuery('#add-pages .quick-search').result(function(event, data, formatted) {
    305                                         jQuery('#add-pages .list-wrap').css('display','block');
    306                                         jQuery("#add-pages .list-wrap li:contains('" + data + "')").css('display','block');
    307                                         jQuery('#add-pages .show-all').hide();
    308                                         jQuery('#add-pages .hide-all').show();
    309                                     });
    310                                 });
    311                             </script>
    312                             <p>
    313                                 <input type="text" class="quick-search regular-text" value="" />
    314                                 <a class="quick-search-submit button"><?php _e('Search'); ?></a>
    315                             </p>
    316 
    317                             <p class="button-controls">
    318                                 <a class="show-all"><?php _e('View All'); ?></a>
    319                                 <a class="hide-all"><?php _e('Hide All'); ?></a>
    320                             </p>
    321 
    322                             <div id="existing-pages" class="list-wrap">
    323                                 <div class="list-container">
    324                                     <ul class="list">
    325                                     <?php $items_counter = wp_nav_menu_get_pages( $items_counter, 'default' ); ?>
    326                                     </ul>
    327                                 </div><!-- /.list-container-->
    328                             </div><!-- /#existing-pages-->
    329                             <p class="add-to-menu enqueue">
    330                                 <a class="button"><?php _e('Add to Menu'); ?></a>
    331                             </p>
    332                             <br class="clear" />
    333                         </div><!-- /.inside-->
    334                     </div><!--END #add-pages-->
    335 
    336                     <div id="add-categories" class="postbox">
    337                         <h3 class="hndle"><?php esc_html_e('Add an Existing Category'); ?></h3>
    338                         <div class="inside">
    339                             <?php
    340                                 // Custom GET categories query
    341                                 // @todo Use API
    342                                 $categories = $wpdb->get_results("SELECT term_id FROM $wpdb->term_taxonomy WHERE taxonomy = 'category' ORDER BY term_id ASC");
    343                                 $cat_name = '';
    344                                 if ( $categories ) {
    345                                     foreach ( $categories as $category ) {
    346                                         $cat_id = $category->term_id;
    347                                         $cat_args = array(
    348                                             'orderby' => 'name',
    349                                             'include' => $cat_id,
    350                                             'hierarchical' => 1,
    351                                             'order' => 'ASC',
    352                                         );
    353                                         $category_names = get_categories( $cat_args );
    354                                         if ( isset( $category_names[0]->name ) ) {
    355                                             $cat_name .= htmlentities( $category_names[0]->name ).'|';
    356                                         }
    357                                     }
    358                                 } else {
    359                                     $cat_name = __('No categories available');
    360                                 }
    361                             ?>
    362                             <script type="text/javascript" charset="<?php bloginfo('charset'); ?>">
    363                                 jQuery(document).ready(function(){
    364                                     var categories = "<?php echo esc_js($cat_name); ?>".split('|');
    365                                     jQuery('#add-categories .quick-search').autocomplete(categories);
    366                                     jQuery('#add-categories .quick-search').result(function(event, data, formatted) {
    367                                         jQuery('#add-categories .list-wrap').css('display','block');
    368                                         jQuery("#add-categories .list-wrap li:contains('" + data + "')").css('display','block');
    369                                         jQuery('#add-categories .show-all').hide();
    370                                         jQuery('#add-categories .hide-all').show();
    371                                     });
    372                                 });
    373                             </script>
    374                             <p>
    375                                 <input type="text" class="quick-search regular-text" value="" />
    376                                 <a class="quick-search-submit button"><?php _e('Search'); ?></a>
    377                             </p>
    378 
    379                             <p class="button-controls">
    380                                 <a class="show-all"><?php _e('View All'); ?></a>
    381                                 <a class="hide-all"><?php _e('Hide All'); ?></a>
    382                             </p>
    383 
    384                             <div id="existing-categories" class="list-wrap">
    385                                 <div class="list-container">
    386                                     <ul class="list">
    387                                         <?php $items_counter = wp_nav_menu_get_categories( $items_counter, 'default' ); ?>
    388                                     </ul>
    389                                 </div><!-- /.list-container-->
    390                             </div><!-- /#existing-categories-->
    391                             <p class="add-to-menu enqueue">
    392                                 <a class="button"><?php _e('Add to Menu'); ?></a>
    393                             </p>
    394                             <br class="clear" />
    395                         </div><!-- /.inside-->
    396                     </div><!--END #add-categories-->
    397                 </div><!-- /#side-sortables-->
     259               
     260                <?php do_meta_boxes( 'menus', 'side', null ); ?>
     261               
    398262            </div><!-- /#menu-settings-column -->
    399             <br class="clear" />
    400         </div><!-- /.metabox-holder has-right-sidebar-->
    401     </form>
     263        </form><!--/#update-nav-menu-->
     264        <br class="clear" />
     265    </div><!-- /.metabox-holder has-right-sidebar-->
    402266</div><!-- /.wrap-->
    403267
    404268<div id="menu-item-settings">
    405269    <p class="description">
    406         <label for="edit-item-title">
     270        <label for="edit-menu-item-title">
    407271            <?php _e( 'Menu Title' ); ?><br />
    408             <input type="text" id="edit-item-title" class="widefat" name="edit-item-title" value="" tabindex="1" />
    409         </label>
    410     </p>
    411     <p class="description">
    412         <label for="edit-item-url">
     272            <input type="text" id="edit-menu-item-title" class="widefat" name="edit-menu-item-title" value="" tabindex="1" />
     273        </label>
     274    </p>
     275    <p class="description">
     276        <label for="edit-menu-item-url">
    413277            <?php _e( 'URL' ); ?><br />
    414             <input type="text" id="edit-item-url" class="widefat code" name="edit-item-url" value="" tabindex="2" />
    415         </label>
    416     </p>
    417     <p class="description">
    418         <label for="edit-item-attr-title">
    419             <?php _e( 'Attribute Title' ); ?><br />
    420             <input type="text" id="edit-item-attr-title" class="widefat" name="edit-item-attr-title" value="" tabindex="3" />
    421         </label>
    422     </p>
    423     <p class="description">
    424         <label for="edit-item-target">
    425             <?php _e( 'Open Link in a new window' ); ?><br />
    426             <select id="edit-item-target" class="widefat" name="edit-item-target">
    427                 <option value="1">Yes</option>
    428                 <option value="0">No</option>
     278            <input type="text" id="edit-menu-item-url" class="widefat code" name="edit-menu-item-url" value="" tabindex="2" />
     279        </label>
     280    </p>
     281    <p class="description">
     282        <label for="edit-menu-item-attr-title">
     283            <?php _e( 'Title Attribute' ); ?><br />
     284            <input type="text" id="edit-menu-item-attr-title" class="widefat" name="edit-menu-item-attr-title" value="" tabindex="3" />
     285        </label>
     286    </p>
     287    <p class="description">
     288        <label for="edit-menu-item-target">
     289            <?php _e( 'Link Target' ); ?><br />
     290            <select id="edit-menu-item-target" class="widefat" name="edit-menu-item-target" tabindex="4">
     291                <option value="_self">Same window or tab</option>
     292                <option value="_blank">New window or tab</option>
    429293            </select>
    430294        </label>
    431295    </p>
    432296    <p class="description">
    433         <label for="edit-item-description">
    434             <?php _e( 'Description' ); ?><br />
    435             <textarea id="edit-item-description" class="widefat" rows="3" name="edit-item-description" tabindex="4" /></textarea>
     297        <label for="edit-menu-item-classes">
     298            <?php _e( 'CSS Classes (optional)' ); ?><br />
     299            <input type="text" id="edit-menu-item-classes" class="widefat code" name="edit-menu-item-classes" value="" tabindex="5" />
     300        </label>
     301    </p>
     302    <p class="description">
     303        <label for="edit-menu-item-xfn">
     304            <?php _e( 'Link Relationship (XFN) (optional)' ); ?><br />
     305            <input type="text" id="edit-menu-item-xfn" class="widefat code" name="edit-menu-item-xfn" value="" tabindex="6" />
     306        </label>
     307    </p>
     308    <p class="description">
     309        <label for="edit-menu-item-description">
     310            <?php _e( 'Description (optional)' ); ?><br />
     311            <textarea id="edit-menu-item-description" class="widefat" rows="3" name="edit-menu-item-description" tabindex="7" /></textarea>
     312            <span class="description">The description will be displayed in the menu if the current theme supports it.</span>
    436313        </label>
    437314    </p>
    438315    <p>
    439         <a id="cancel-save" class="submitdelete deletion"><?php _e('Cancel'); ?></a>
    440         <a id="update-menu-item" class="save button-primary" tabindex="5"><?php _e('Save Changes'); ?></a>
    441     </p>
    442     <input type="hidden" id="edit-item-id" name="edit-item-id" value="" />
     316        <a id="update-menu-item" class="save button-primary" tabindex="8"><?php _e('Save Changes'); ?></a>
     317        <a id="cancel-save" class="submitdelete deletion" tabindex="9"><?php _e('Cancel'); ?></a>
     318    </p>
     319    <input type="hidden" id="edit-menu-item-id" name="edit-item-id" value="" />
    443320</div><!-- /#menu-item-settings-->
    444321
Note: See TracChangeset for help on using the changeset viewer.