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 ); } ?>
'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' => '