WordPress.org

Make WordPress Core

Ticket #20052: 20052.diff

File 20052.diff, 6.5 KB (added by kovshenin, 21 months ago)

Allows to use an array (or even two) for sprites in menu_icon for register_post_type

  • wp-admin/menu.php

     
    100100                continue; 
    101101        $ptype_menu_position = is_int( $ptype_obj->menu_position ) ? $ptype_obj->menu_position : ++$_wp_last_object_menu; // If we're to use $_wp_last_object_menu, increment it first. 
    102102        $ptype_for_id = sanitize_html_class( $ptype ); 
    103         if ( is_string( $ptype_obj->menu_icon ) ) { 
    104                 $menu_icon   = esc_url( $ptype_obj->menu_icon ); 
     103        if ( $ptype_obj->menu_icon && ! empty( $ptype_obj->menu_icon ) ) { 
     104                $menu_icon   = 'div'; 
     105                $has_menu_icon = is_array( $ptype_obj->menu_icon ) ? ' wp-has-menu-sprite ' : ' wp-has-menu-image '; 
    105106                $ptype_class = $ptype_for_id; 
    106107        } else { 
    107108                $menu_icon   = 'div'; 
     109                $has_menu_icon = ''; 
    108110                $ptype_class = 'post'; 
    109111        } 
    110112 
     
    113115        while ( isset($menu[$ptype_menu_position]) || in_array($ptype_menu_position, $core_menu_positions) ) 
    114116                $ptype_menu_position++; 
    115117 
    116         $menu[$ptype_menu_position] = array( esc_attr( $ptype_obj->labels->menu_name ), $ptype_obj->cap->edit_posts, "edit.php?post_type=$ptype", '', 'menu-top menu-icon-' . $ptype_class, 'menu-posts-' . $ptype_for_id, $menu_icon ); 
     118        $menu[$ptype_menu_position] = array( esc_attr( $ptype_obj->labels->menu_name ), $ptype_obj->cap->edit_posts, "edit.php?post_type=$ptype", '', 'menu-top menu-icon-' . $ptype_class . $has_menu_icon, 'menu-posts-' . $ptype_for_id, $menu_icon ); 
    117119        $submenu["edit.php?post_type=$ptype"][5]  = array( $ptype_obj->labels->all_items, $ptype_obj->cap->edit_posts,  "edit.php?post_type=$ptype"); 
    118120        $submenu["edit.php?post_type=$ptype"][10]  = array( $ptype_obj->labels->add_new, $ptype_obj->cap->edit_posts, "post-new.php?post_type=$ptype" ); 
    119121 
     
    236238        ); 
    237239 
    238240require_once(ABSPATH . 'wp-admin/includes/menu.php'); 
     241 
     242add_action( 'admin_head', '_admin_menu_icons_css' ); 
     243function _admin_menu_icons_css() { 
     244        $css = ''; 
     245 
     246        // Loop through all available post types 
     247        foreach ( (array) get_post_types( array( 'show_ui' => true, '_builtin' => false, 'show_in_menu' => true ) ) as $ptype ) { 
     248                $ptype_obj = get_post_type_object( $ptype ); 
     249 
     250                // Check if it should be a submenu. 
     251                if ( $ptype_obj->show_in_menu !== true ) 
     252                        continue; 
     253 
     254                // If no menu icon is set don't do anything. 
     255                if ( ! $ptype_obj->menu_icon || empty( $ptype_obj->menu_icon ) ) 
     256                        continue; 
     257 
     258                // Will use this as a class name later. 
     259                $ptype_slug = sanitize_html_class( $ptype ); 
     260                $menu_icon = $ptype_obj->menu_icon; 
     261 
     262                // Back-compat, transforms to new-style menu icon. 
     263                if ( ! is_array( $menu_icon ) ) { 
     264                        $menu_icon = array(  
     265                                'image_url' => $menu_icon, 
     266                                'background_size' => '16px 16px', 
     267                                'background_position' => '7px 7px', 
     268                        ); 
     269                } 
     270 
     271                $background_image = ''; 
     272                $background_size = ''; 
     273                $background_position = ''; 
     274                $background_position_hover = ''; 
     275 
     276                if ( ! isset( $menu_icon['regular'] ) ) 
     277                        $menu_icon = array( 'regular' => $menu_icon ); 
     278 
     279                $regular = $menu_icon['regular']; 
     280 
     281                if ( isset( $regular['image_url'] ) ) 
     282                        $background_image = sprintf( "background-image: url('%s');", esc_url( $regular['image_url'] ) ); 
     283 
     284                if ( isset( $regular['background_size'] ) ) { 
     285                        $xy = array_map( 'intval', preg_split( '/[\s,]+/', $regular['background_size'] ) ); 
     286                        if ( count( $xy ) == 2 ) 
     287                                $background_size = sprintf( "background-size: %dpx %dpx;", $xy[0], $xy[1] ); 
     288                } 
     289 
     290                if ( isset( $regular['background_position'] ) ) { 
     291                        $xy = array_map( 'intval', preg_split( '/[\s,]+/', $regular['background_position'] ) ); 
     292                        if ( count( $xy ) == 2 ) 
     293                                $background_position = sprintf( "background-position: %dpx %dpx;", $xy[0], $xy[1] ); 
     294                } 
     295 
     296                if ( isset( $regular['background_position_hover'] ) ) { 
     297                        $xy = array_map( 'intval', preg_split( '/[\s,]+/', $regular['background_position_hover'] ) ); 
     298                        if ( count( $xy ) == 2 ) 
     299                                $background_position_hover = sprintf( "background-position: %dpx %dpx;", $xy[0], $xy[1] ); 
     300                } 
     301 
     302                $css .= " 
     303                #adminmenu li.menu-icon-{$ptype_slug} .wp-menu-image { 
     304                        $background_image 
     305                        $background_size 
     306                        $background_position 
     307                } 
     308                #adminmenu li.menu-icon-{$ptype_slug}:hover .wp-menu-image { 
     309                        $background_position_hover 
     310                }"; 
     311 
     312                // Hidpi 
     313                $hidpi = isset( $menu_icon['2x'] ) ? $menu_icon['2x'] : array(); 
     314 
     315                $hidpi_background_image = ''; 
     316                $hidpi_background_size = ''; 
     317                $hidpi_background_position = ''; 
     318                $hidpi_background_position_hover = ''; 
     319 
     320                if ( isset( $hidpi['image_url'] ) ) 
     321                        $hidpi_background_image = sprintf( "background-image: url('%s');", esc_url( $hidpi['image_url'] ) ); 
     322 
     323                if ( isset( $hidpi['background_size'] ) ) { 
     324                        $xy = array_map( 'intval', preg_split( '/[\s,]+/', $hidpi['background_size'] ) ); 
     325                        if ( count( $xy ) == 2 ) 
     326                                $hidpi_background_size = sprintf( "background-size: %dpx %dpx;", $xy[0], $xy[1] ); 
     327                } 
     328 
     329                if ( isset( $hidpi['background_position'] ) ) { 
     330                        $xy = array_map( 'intval', preg_split( '/[\s,]+/', $hidpi['background_position'] ) ); 
     331                        if ( count( $xy ) == 2 ) 
     332                                $hidpi_background_position = sprintf( "background-position: %dpx %dpx;", $xy[0], $xy[1] ); 
     333                } 
     334 
     335                if ( isset( $hidpi['background_position_hover'] ) ) { 
     336                        $xy = array_map( 'intval', preg_split( '/[\s,]+/', $hidpi['background_position_hover'] ) ); 
     337                        if ( count( $xy ) == 2 ) 
     338                                $hidpi_background_position_hover = sprintf( "background-position: %dpx %dpx;", $xy[0], $xy[1] ); 
     339                } 
     340 
     341                if ( $hidpi ) { 
     342                        $css .= "@media only screen and (-webkit-min-device-pixel-ratio: 1.5) { 
     343                                #adminmenu li.menu-icon-{$ptype_slug} .wp-menu-image { 
     344                                        $hidpi_background_image 
     345                                        $hidpi_background_position 
     346                                        $hidpi_background_size 
     347                                } 
     348                                #adminmenu li.menu-icon-{$ptype_slug}:hover .wp-menu-image { 
     349                                        $hidpi_background_position_hover 
     350                                } 
     351                        }"; 
     352                } 
     353        } // foreach 
     354 
     355        if ( strlen( $css ) > 0 ) 
     356                echo "<style>$css</style>"; 
     357} 
     358 No newline at end of file 
  • wp-admin/css/wp-admin.dev.css

     
    15741574        border-style: solid none; 
    15751575} 
    15761576 
    1577 #adminmenu .wp-menu-image img { 
    1578         float: left; 
    1579         padding: 5px 0 0 2px; 
     1577#adminmenu li.wp-has-menu-image .wp-menu-image { 
    15801578        opacity: 0.6; 
    15811579        filter: alpha(opacity=60); 
    15821580} 
    15831581 
    1584 #adminmenu li.menu-top:hover .wp-menu-image img, 
    1585 #adminmenu li.wp-has-current-submenu .wp-menu-image img { 
     1582#adminmenu li.wp-has-menu-image.menu-top:hover .wp-menu-image, 
     1583#adminmenu li.wp-has-menu-image.wp-has-current-submenu .wp-menu-image { 
    15861584        opacity: 1; 
    15871585        filter: alpha(opacity=100); 
    15881586}