Pastebin launched a little side project called VERYVIRAL.com, check it out ;-) Want more features on Pastebin? Sign Up, it's FREE!
Guest

wp admin menu code

By: a guest on Nov 29th, 2011  |  syntax: None  |  size: 12.69 KB  |  views: 25  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. <?php
  2. add_action('admin_print_scripts','enqueue_sdrop');
  3. function enqueue_sdrop() {
  4.         wp_enqueue_script( 'sdrop', get_bloginfo('template_directory') . '/jquery.sdrop.js', array('jquery'), '0.1' );
  5. }
  6. add_action('in_admin_header','printmenu');
  7. function printmenu() {
  8.         global $menu,$submenu,$parent_file,$self,$pagenow,$plugin_page,$typenow,$submenu_file;
  9.        
  10.         // Copy the existing menu data
  11.         $parent_items = $menu;
  12.         $submenu_items = $submenu;
  13.        
  14.         // Now replace them with empty arrays to keep WP happy
  15.         //$menu = $submenu = array();
  16.        
  17.         if( empty( $parent_items ) )
  18.                 return;
  19.        
  20.         // Setup array for menu items
  21.         $wp_menu_items = array();
  22.         // Default mode
  23.         $current_mode = 'config';
  24.        
  25.         // Admin url
  26.         $admin_path = admin_url();
  27.        
  28.         // Test stuff
  29.         $test = array();
  30.          
  31.         // Loop over the menu items
  32.         foreach( $parent_items as $key => $menu_data ) {
  33.                 // Skip seperators (they don't have a key 5)
  34.                 if( isset( $menu_data[5] ) ) {
  35.                         $menu_prefix = substr( $menu_data[5], 0, 10 );
  36.                         switch( $menu_prefix ) {
  37.                                 // Move content types into one section
  38.                                 case 'menu-posts' :
  39.                                 case 'menu-pages' :
  40.                                 case 'menu-media' :
  41.                                         if( isset( $menu_data[2] ) ) {
  42.                                                 if( $menu_data[2] == $parent_file )
  43.                                                         $current_mode = 'content';
  44.                                                 $wp_menu_items['content'][$key] = $menu_data;
  45.                                                 $wp_menu_items['children'][$menu_data[2]] = $submenu_items[$menu_data[2]];
  46.                                         }
  47.                                 break;
  48.                                 // And everything else into another
  49.                                 default:
  50.                                         $wp_menu_items['settings'][$key] = $menu_data;
  51.                                         $wp_menu_items['children'][$menu_data[2]] = ( isset( $submenu_items[$menu_data[2]] ) ) ? $submenu_items[$menu_data[2]] : array();
  52.                                 break;
  53.                         }
  54.                 }
  55.                 continue;
  56.         }
  57.        
  58.         do_adminmenu_js();
  59.         //print_page_info();
  60.        
  61.         // Dealing with active items
  62.         if( !empty( $plugin_page ) ) {
  63.                 $parent_link = $pagenow .'?page='. $plugin_page;
  64.                 $menu_link = $plugin_page;
  65.         }
  66.         elseif( !empty( $submenu_file ) ) {
  67.                 $parent_link = $submenu_file;
  68.                 $menu_link = $submenu_file;
  69.         }
  70.         else {
  71.                 $parent_link = $pagenow;
  72.                 $menu_link = $pagenow;
  73.         }
  74.         print $menu_link; // Seems to be accurate across all pages (so far so good)
  75.         $a = array();
  76.        
  77.         //echo get_admin_page_parent();aaaaa
  78.         ?>
  79.  
  80. <div id="admin-menu-toggle">
  81.         <a id="sdrop-config" class="toggle<?php echo ( 'config' == $current_mode ) ? ' current-mode': ''; ?>" href="#">Settings</a>
  82.         <a id="sdrop-content" class="toggle<?php echo ( 'content' == $current_mode ) ? ' current-mode': ''; ?>" href="#">Content</a>
  83. </div>
  84.        
  85. <div class="clear"></div>
  86.        
  87. <div id="sdrop-adminmenu">
  88.        
  89.         <?php if( 'config' == $current_mode ) : ?>
  90.         <ul>
  91.         <?php else : ?>
  92.         <ul class="hidden">
  93.         <?php endif; ?>
  94.        
  95.         <?php foreach( $wp_menu_items['settings'] as $k => $data ) : ?>
  96.                
  97.                 <?php
  98.                 $current_parent = '';
  99.                 if( $parent_file == $data[2] )
  100.                         $current_parent = $parent_file;
  101.                 elseif( empty( $parent_file ) && $pagenow == $data[2] )
  102.                         $current_parent = $pagenow;    
  103.                 ?>
  104.                
  105.                 <li class="<?php echo $data[4]; if( '' != $current_parent ) echo ' active' ?>">
  106.                         <a href="<?php echo $data[2]; ?>"><?php echo $data[0]; ?></a>
  107.        
  108.                         <?php if( isset( $submenu_items[$data[2]] ) ) : ?>
  109.                        
  110.                         <ul class="hidden submenu">
  111.                
  112.                         <?php foreach( $submenu_items[$data[2]] as $k2 => $data2 ) :  ?>
  113.                                
  114.                                 <?php
  115.                                 $check = $menu_link;
  116.                                 // Damn appending nightmare
  117.                                 $menu_hook = get_plugin_page_hook( $data2[2], $data[2] );
  118.                                 if( 'index.php' != $data2[2] && file_exists(WP_PLUGIN_DIR . "/{$data2[2]}") ) {
  119.                                         $data2[2] = 'admin.php?page='. $data2[2];
  120.                                         $check = $parent_link;
  121.                                 }
  122.                                 elseif( !empty( $menu_hook) ) {
  123.                                         $data2[2] = $data[2] . '?page='. $data2[2];
  124.                                         $check = $parent_link;
  125.                                 }
  126.                                 ?>
  127.                                
  128.                                 <li<?php if( $data2[2] == $check ) echo ' class="active"' ?>><a href="<?php echo $data2[2]; ?>"><?php echo $data2[0]; ?></a></li>
  129.                        
  130.                         <?php endforeach; ?>
  131.                
  132.                         </ul>
  133.                
  134.                         <?php endif; ?>
  135.  
  136.                 </li>
  137.        
  138.         <?php endforeach; ?>
  139.         </ul>
  140.         <?php //print_r( $a ); ?>
  141.         <?php if( 'content' == $current_mode ) : ?>
  142.         <ul>
  143.         <?php else : ?>
  144.         <ul class="hidden">
  145.         <?php endif; ?>
  146.  
  147.         <?php foreach( $wp_menu_items['content'] as $k => $data ) : ?>
  148.        
  149.                 <li class="<?php echo $data[4]; if( $parent_file == $data[2] || ( empty( $parent_file ) && $pagenow == $data[2] ) ) echo ' active' ?>">
  150.                         <a href="<?php echo $data[2]; ?>"><?php echo $data[0]; ?></a>
  151.        
  152.                         <?php if( isset( $submenu_items[$data[2]] ) ) : ?>
  153.                        
  154.                         <ul class="hidden submenu">
  155.                        
  156.                         <?php foreach( $wp_menu_items['children'][$data[2]] as $k2 => $data2 ) : ?>
  157.                                
  158.                                 <?php
  159.                                 $check = $menu_link;
  160.                                 // Damn appending nightmare
  161.                                 $menu_hook = get_plugin_page_hook( $data2[2], $data[2] );
  162.                                 if( !empty( $typenow ) ) {
  163.                                        
  164.                                 }
  165.                                 elseif( 'index.php' != $data2[2] && file_exists(WP_PLUGIN_DIR . "/{$data2[2]}") ) {
  166.                                         $data2[2] = 'admin.php?page='. $data2[2];
  167.                                         $check = $parent_link;
  168.                                 }
  169.                                 elseif( !empty( $menu_hook) ) {
  170.                                         $data2[2] = $data[2] . '?page='. $data2[2];
  171.                                         $check = $parent_link;
  172.                                 }
  173.                                 ?>
  174.                                
  175.                                 <li<?php if( $data2[2] == $check ) echo ' class="active"' ?>><a href="<?php echo $data2[2]; ?>"><?php echo $data2[0]; ?></a></li>
  176.                                
  177.                         <?php endforeach; ?>
  178.                
  179.                         </ul>
  180.                
  181.                         <?php endif; ?>
  182.  
  183.                 </li>
  184.                
  185.         <?php endforeach; ?>
  186.         </ul>
  187.        
  188.         <div class="clear"></div>
  189. </div>
  190.  
  191. <div class="clear"></div>
  192.         <?php
  193. }
  194. add_action('admin_print_styles','adminmenu_css');
  195. function adminmenu_css() {
  196.         global $is_IE;
  197.         ?>
  198.         <style type="text/css">
  199.         /*
  200.         #wpbody { margin-left:0!important; }
  201.         #wpbody-content .wrap { margin-left:15px!important; }
  202.         */
  203.         <?php if( $is_IE ) echo '#wpbody { padding-top:30px; }' ?>
  204.         #admin-menu-toggle { float:right;height:26px;line-height:26px;padding:20px 0 0;margin:0 15px 0 0;vertical-align:middle }
  205.         #admin-menu-toggle a { display:block;padding:0 8px;margin:0 5px 0 0;float:right;-moz-border-radius: 5px 5px 0 0 }
  206.         #admin-menu-toggle a.current-mode { padding:0 6px;margin:1px 5px 1px 0;background:#f1f1f1; }
  207.  
  208.         #screen-options-wrap,#contextual-help-wrap { margin:1px 0 0!important;background-color:white!important; }
  209.         #wphead-info { display:none!important; }
  210.          
  211.         #sdrop-adminmenu { background-color:#f1f1f1;margin:0;padding:0;border:none;border-bottom:1px solid #ccc }
  212.         #sdrop-adminmenu .hidden { visibility:hidden!important;display:none!important }
  213.         #sdrop-adminmenu .count-0 { display:none!important; }
  214.         #sdrop-adminmenu .pending-count { -moz-border-radius:5px;background:#a33;color:#fff;padding:2px 6px;font-size:10px }
  215.        
  216.         #sdrop-adminmenu ul,
  217.         #sdrop-adminmenu li { list-style:none;margin:0; }
  218.        
  219.         #sdrop-adminmenu ul { margin-left:15px; }
  220.         #sdrop-adminmenu ul.submenu { background:#fff;position:absolute;z-index:3000;border:1px solid #dfdfdf;margin-left:-31px }
  221.        
  222.         #sdrop-adminmenu ul li { display:block;float:left;position:relative;z-index:4000; }
  223.         #sdrop-adminmenu ul.submenu li { float:none;border:none }
  224.         #sdrop-adminmenu ul li.menu-top { padding-left:30px; }
  225.        
  226.  
  227.         #sdrop-adminmenu ul li a { background-color:#f1f1f1;display:block;height:20px;line-height:20px;padding:5px 15px 5px 0;color:#888;text-decoration:none; }
  228.         #sdrop-adminmenu ul.submenu li a { margin:0;display:block;width:150px;padding-left:15px;background-color:#fff; }
  229.        
  230.         #sdrop-adminmenu ul li.active,
  231.         #sdrop-adminmenu ul li.active a { background-color:#fff; }
  232.        
  233.         #sdrop-adminmenu ul.submenu li.active,
  234.         #sdrop-adminmenu ul.submenu li.active a { background-color:#f1f1f1; }
  235.        
  236.         #sdrop-adminmenu ul.submenu li a:hover { background-color:#f8f8f8 }
  237.         #sdrop-adminmenu ul.submenu li.active a:hover { background-color:#f8f8f8 }
  238.        
  239.         .menu-top {
  240.                 background-image: url(<?php echo admin_url('images/menu.png'); ?>);background-position: -330px -32px;
  241.         }
  242.         /*
  243.                 Non-active icon positions
  244.         */
  245.         .menu-icon-appearance { background-position: 0 -32px; }
  246.         .menu-icon-comments { background-position: -30px -32px; }
  247.         .menu-icon-dashboard { background-position: -60px -32px; }
  248.         .menu-icon-links { background-position: -90px -32px; }
  249.         .menu-icon-media { background-position: -120px -32px; }
  250.         .menu-icon-page { background-position: -150px -32px; }
  251.         .menu-icon-plugins { background-position: -180px -32px; }
  252.         .menu-icon-tools { background-position: -210px -32px; }
  253.         .menu-icon-settings { background-position: -240px -32px; }
  254.         .menu-icon-post { background-position: -270px -32px; }
  255.         .menu-icon-users { background-position: -300px -32px; }
  256.        
  257.         /*
  258.                 Active icon positions
  259.         */
  260.         .menu-icon-appearance.active { background-position: 0 0; }
  261.         .menu-icon-comments.active { background-position: -30px 0; }
  262.         .menu-icon-dashboard.active { background-position: -60px 0; }
  263.         .menu-icon-links.active { background-position: -90px 0; }
  264.         .menu-icon-media.active { background-position: -120px 0; }
  265.         .menu-icon-page.active { background-position: -150px 0; }
  266.         .menu-icon-plugins.active { background-position: -180px 0; }
  267.         .menu-icon-tools.active { background-position: -210px 0; }
  268.         .menu-icon-settings.active { background-position: -240px 0; }
  269.         .menu-icon-post.active { background-position: -270px 0; }
  270.         .menu-icon-users.active { background-position: -300px 0; }
  271.         </style>
  272.         <?php
  273. }
  274. function do_adminmenu_js() {
  275.         ?>
  276.         <script type="text/javascript">
  277.         jQuery(document).ready(function($){
  278.                 $('#sdrop-adminmenu').sDrop();
  279.                 $('#sdrop-content').click(function(){
  280.                         if( $(this).hasClass('current-mode') ) 
  281.                                 return false;
  282.                         $('#sdrop-adminmenu > ul').toggleClass('hidden');
  283.                         $('#admin-menu-toggle a').toggleClass('current-mode');
  284.                         return false;
  285.                 });
  286.                 $('#sdrop-config').click(function(){
  287.                         if( $(this).hasClass('current-mode') )
  288.                                 return false;
  289.                         $('#sdrop-adminmenu > ul').toggleClass('hidden');
  290.                         $('#admin-menu-toggle a').toggleClass('current-mode');
  291.                         return false;
  292.                 });
  293.                 $('.hidden').each(function(){
  294.                         if( $(this).is(':visible') )
  295.                                 $(this).hide();
  296.                 });
  297.         });
  298.         </script>
  299.         <?php
  300. }
  301. function print_page_info() {
  302.         global $parent_file,$self,$pagenow,$plugin_page,$typenow,$submenu_file;
  303.         $var_to_print = array(
  304.                 'Parent file' => $parent_file,
  305.                 'Pagenow' => $pagenow,
  306.                 'Typenow' => $typenow,
  307.                 'Submenu file' => $submenu_file,
  308.                 'Plugin page' => $plugin_page
  309.         );
  310.         print '<br />';print '<br />';print '<br />';
  311.         $heads = array_keys( $var_to_print );$bodys = array_values( $var_to_print );
  312.        
  313.         print '<table><tr>';
  314.         foreach( $heads as $description ) print '<th style="border-right:1px solid #ccc;border-bottom:1px solid #ccc;padding:0 20px 0 0;text-align:left">'.$description.'</th>';
  315.         print '</tr>';
  316.         print '<tr>';
  317.         foreach( $bodys as $description ) print '<td style="border-right:1px solid #ccc;padding:0 20px 0 0">'.$description.'</td>';
  318.         print '</tr></table>';
  319. }
  320. /**
  321. require_once( ABSPATH . '/wp-admin/includes/theme.php');
  322. print '<pre>';
  323. print_r( get_page_templates() );
  324. print '</pre>';
  325. /**/
  326. /*
  327. --------------------------------------------------------------------------------------------------------------------------------------------------------------------
  328. Request                                                                                                         Parent                                                  Pagenow                         Typenow         Submenu file                                                                                            Plugin page
  329. --------------------------------------------------------------------------------------------------------------------------------------------------------------------
  330. themes.php                                                                                                      themes.php                                              themes.php
  331. widgets.php                                                                                                     themes.php                                              widgets.php
  332. themes.php?page=custom-background                                       themes.php                                              themes.php                                                                                                                                                                      custom-background
  333. index.php?page=translatable_demo                                                index.php                                               index.php                                                                                                                                                                       translatable_demo
  334. admin.php?page=wp-polls/polls-manager.php                       wp-polls/polls-manager.php      admin.php                                                                                                                                               wp-polls/polls-manager.php
  335. admin.php?page=wp-polls/polls-add.php                           wp-polls/polls-manager.php      admin.php                                                                                                                                                        wp-polls/polls-add.php
  336. edit-comments.php                                                                                                                                                               edit-comments.php
  337. edit.php                                                                                                                edit.php                                                        edit.php                                post                    edit.php
  338. post-new.php                                                                                            edit.php                                                        post-new.php            post                    post-new.php
  339. edit-tags.php?taxonomy=post_tag                                         edit.php                                                        edit-tags.php            **                     edit-tags.php?taxonomy=post_tag
  340. edit-tags.php?taxonomy=category                                         edit.php                                                        edit-tags.php            **                     edit-tags.php?taxonomy=category
  341. edit.php?post_type=book                                                                 edit.php?post_type=book         edit.php                                book                    edit.php?post_type=book
  342. post-new.php?post_type=book                                                     edit.php?post_type=book         post-new.php            book                    post-new.php?post_type=book
  343. edit-tags.php?taxonomy=category&post_type=book  edit.php?post_type=book         edit-tags.php           book                    edit-tags.php?taxonomy=category&post_type=book
  344. edit-tags.php?taxonomy=post_tag&post_type=book  edit.php?post_type=book         edit-tags.php           book                    edit-tags.php?taxonomy=post_tag&post_type=book
  345. --------------------------------------------------------------------------------------------------------------------------------------------------------------------
  346. NOTE: ** items under typenow should be set, but are not strangely
  347. */
  348.