WordPress.org

Make WordPress Core

Ticket #20052: 20052.diff

File 20052.diff, 6.5 KB (added by kovshenin, 9 years 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}