has_cap('manage_menus')) { $role->add_cap('manage_menus'); } function menu_install() { add_option( 'menus', array( array( 'name' => __( 'Default menu', 'menu' ), 'items'=> array( array( 'label' => __( 'Home', 'menu' ), 'title' => __( 'Back to the front page', 'menu' ), 'type' => 'front', 'value' => null ) ) ) )); } add_action( 'activate_' . $menu_plugin, 'menu_install' ); function menu_uninstall() { delete_option( 'menus' ); delete_option( 'widget_menu' ); } add_action( 'deactivate_' . $menu_plugin, 'menu_uninstall' ); wp_enqueue_script('admin-forms'); function menu_manage() { global $menu_self; $menus = get_option( 'menus' ); switch( $_GET['action'] ) { case 'editmenu': if ( current_user_can('manage_menus') ) return menu_form( $_GET['menu_ID'] ); break; case 'addmenuitem': if ( current_user_can('manage_menus') ) return menu_item_form( $_GET['menu_ID'] ); break; case 'editmenuitem': if ( current_user_can('manage_menus') ) return menu_item_form( $_GET['menu_ID'], $_GET['item_ID'] ); break; } if ( isset($_POST['action']) ) { if ( ! current_user_can( 'manage_menus' ) ) wp_die( __( 'Cheatin’ uh?' ) ); switch( $_POST['action'] ) { case 'addmenu': check_admin_referer('add-menu'); $name = $_POST['name'] ? stripslashes( $_POST['name'] ) : __( 'Menu', 'menu' ) . ' ' . (count( $menus ) + 1); $menus[] = array( 'name' => $name ); $message = __( 'Menu Added', 'menu' ); break; case 'editmenu': check_admin_referer( 'edit-menu_' . $_POST['menu_ID'] ); $name = $_POST['name'] ? stripslashes( $_POST['name'] ) : __( 'Menu', 'menu' ) . ' ' . count( $menus ); $menus[$_POST['menu_ID']]['name'] = $name; $message = __( 'Menu Edited', 'menu' ); break; case 'deletemenu': check_admin_referer( 'delete-menu_' . $_POST['menu_ID'] ); unset( $menus[$_POST['menu_ID']] ); $message = __( 'Menu Deleted', 'menu' ); break; case 'addmenuitem': case 'editmenuitem': $value = $_POST[$_POST['type'] . '_value']; if ( $_POST['type'] == 'archive') { if ( $_POST['aa'] && $_POST['mm'] && $_POST['jj']) $value = $_POST['aa'] . $_POST['mm'] . $_POST['jj']; elseif ($_POST['aa'] && $_POST['mm']) $value = $_POST['aa'] . $_POST['mm']; elseif ($_POST['aa']) $value = $_POST['aa']; else $value = gmdate( 'Ymd', time() + (get_option( 'gmt_offset' ) * 3600 ) ); } $type = $_POST['type'] ? $_POST['type'] : 'front'; $label = $_POST['label'] ? stripslashes( $_POST['label'] ) : __( ucfirst( $type ), 'menu' ); $title = $_POST['title'] ? stripslashes( $_POST['title'] ) : $label; if( $_POST['action'] == 'addmenuitem' ) { check_admin_referer( 'add-menu_' . $_POST['menu_ID'] . '-item' ); $menus[$_POST['menu_ID']]['items'][] = array( 'type' => $type, 'value' => $value, 'label' => $label, 'title' => $title ); $message = __( 'Menu Item Added', 'menu' ); } else { check_admin_referer( 'edit-menu_' . $_POST['menu_ID'] . '-item_' . $_POST['item_ID'] ); $menus[$_POST['menu_ID']]['items'][$_POST['item_ID']] = array( 'type' => $type, 'value' => $value, 'label' => $label, 'title' => $title ); $message = __( 'Menu Item Edited', 'menu' ); } break; case 'deletemenuitems': check_admin_referer( 'delete-menu_' . $_POST['menu_ID'] . '-items' ); if ( count( $_POST['delete'] ) ) { foreach ( $_POST['delete'] as $item_ID ) unset( $menus[$_POST['menu_ID']]['items'][$item_ID] ); $message = __( 'Menu Item(s) deleteted', 'menu' ); } break; } update_option( 'menus', $menus ); } ?>

add new)', 'menu' ), '#addmenu' ) ?>


$menu) : ?>



$item) : $class = ' class="alternate"' == $class ? '' : ' class="alternate"'; $link = menu_item_link( $item ); ?> >

'; print_r($select); echo ''; ?>'; print_r($select); echo ''; ?> '; break; } } function menu_item_form( $menu_ID, $item_ID = null ) { global $menu_self; $text = isset( $item_ID ) ? __( 'Edit Menu Item' , 'menu' ) : __( 'Add Menu Item' , 'menu' ) ; $nonce = isset( $item_ID ) ? 'edit-menu_' . $menu_ID . '-item_' . $item_ID : 'add-menu_' . $menu_ID . '-item'; $action = isset( $item_ID ) ? 'editmenuitem' : 'addmenuitem'; if ( isset( $item_ID ) ) { $menus = get_option( 'menus' ); $item = $menus[$menu_ID]['items'][$item_ID]; } $types = array( 'front', 'posts', 'login', 'register', 'page', 'post', 'attachment', 'category', 'tag', 'archive', 'bookmark', 'url' ); ?>

$widget_args ); $widget_args = wp_parse_args( $widget_args, array( 'number' => -1 ) ); extract( $widget_args, EXTR_SKIP ); $options = get_option('widget_menu'); if ( !isset($options[$number]) ) return; $menus = (array) get_option( 'menus' ); $menu = $menus[$options[$number]['menu']]; echo $before_widget; if ( ! $options['heading'] ) echo ''; echo menu_list( $menu['items'] ); echo $after_widget; } function widget_menu_control( $widget_args = array() ) { global $wp_registered_widgets; static $updated = false; if ( is_numeric( $widget_args ) ) $widget_args = array( 'number' => $widget_args ); $widget_args = wp_parse_args( $widget_args, array( 'number' => -1 ) ); extract( $widget_args, EXTR_SKIP ); $options = get_option( 'widget_menu' ); $menus = get_option( 'menus' ); // Save data if ( !$updated && !empty($_POST['sidebar']) ) { // Get sidebar $sidebar = (string) $_POST['sidebar']; $sidebars_widgets = wp_get_sidebars_widgets(); if ( isset($sidebars_widgets[$sidebar]) ) $this_sidebar =& $sidebars_widgets[$sidebar]; else $this_sidebar = array(); // Clean options foreach ( $this_sidebar as $_widget_id ) { if ( 'widget_menu' == $wp_registered_widgets[$_widget_id]['callback'] && isset($wp_registered_widgets[$_widget_id]['params'][0]['number']) ) { $widget_number = $wp_registered_widgets[$_widget_id]['params'][0]['number']; if ( !in_array( "menu-$widget_number", $_POST['widget-id'] ) ) unset($options[$widget_number]); } } // Build options foreach ( (array) $_POST['widget-menu'] as $widget_number => $widget ) { if ( !isset($widget['menu']) && isset($options[$widget_number]) ) continue; $options[$widget_number] = array( 'menu' => (int) $widget['menu'], 'heading' => (bool) $widget['heading'] ); } // Update options update_option('widget_menu', $options); $updated = true; } // Print form if ( -1 == $number ) { $number = '%i%'; } ?>

'menu', 'description' => __( 'Add a menu', 'menu' ) ); $control = array( 'id_base' => 'menu' ); foreach ( array_keys ( $widget_menu ) as $number ) { if ( !isset($widget_menu[$number]['menu']) ) continue; $registered = true; $id = "menu-$number"; wp_register_sidebar_widget( $id, $name, 'widget_menu', $widget, array( 'number' => $number ) ); wp_register_widget_control( $id, $name, 'widget_menu_control', $control, array( 'number' => $number ) ); } if ( !$registered ) { wp_register_sidebar_widget( 'menu-1', $name, 'widget_menu', $widget, array( 'number' => -1 ) ); wp_register_widget_control( 'menu-1', $name, 'widget_menu_control', $control, array( 'number' => -1 ) ); } } add_action( 'widgets_init', 'menu_widget_init' ); function menu_item_link( $item ) { switch( $item['type'] ) { case 'front': return get_bloginfo( 'url' ); case 'posts': return get_option( 'show_on_front' ) == 'posts' ? get_bloginfo( 'url' ) : get_permalink( get_option('page_for_posts') ); case 'login': return get_option('siteurl') . '/wp-login.php'; case 'register': return get_option('siteurl') . '/wp-register.php'; case 'page': return get_page_link( $item['value'] ); case 'post': return get_permalink( $item['value'] ); case 'attachment': return get_attachment_link( $item['value'] ); case 'category': return get_category_link( $item['value'] ); case 'tag': return get_tag_link( $item['value'] ); case 'archive': preg_match( '/(\d{4})(\d{2})?(\d{2})?/' , $item['value'], $date ); if ( isset( $date[3] ) ) return get_day_link( $date[1], $date[2], $date[3] ); if ( isset( $date[2] ) ) return get_month_link( $date[1], $date[2] ); return get_year_link( $date[1] ); case 'bookmark': return get_bookmark_field( 'link_url', $item['value'] ); default: return $item['value']; } } function menu_list( $items, $args = '' ) { $default = array( 'before' => '', ); extract(wp_parse_args( $args, $default )); $list = ''; $last = count( $items ) -1 ; foreach( $items as $i => $item ) { $url = menu_item_link( $item ); $current = preg_match( '/' . preg_quote( trim( $_SERVER['REQUEST_URI'], '/' ), '/' ) . '$/i' , trim( $url, '/' ) ); $num = $i == 0 ? ' first' : ( $i == $last ? ' last' : ' item' . ( $i + 1 ) ); $class = $item['type'] . $num . ( $current ? ' current' : '' ); $title = wp_specialchars( $item['title '], 'double' ); $label = wp_specialchars( $item['label'] ); $list .= '
  • ' . $label . '
  • '; } return $before . $list . $after; } // Use this in templates function menu_print( $id = 0, $args = '' ) { $menus = (array) get_option( 'menus' ); $menu = $menus[$id]; echo menu_list( $menu['items'], $args ); } ?>