WordPress.org

Make WordPress Core

Ticket #19136: 19136.diff

File 19136.diff, 13.4 KB (added by koopersmith, 7 years ago)
  • wp-includes/admin-bar.php

     
    9191                ) );
    9292        }
    9393
    94         // Add secondary menu.
    95         $wp_admin_bar->add_menu( array(
    96                 'parent' => 'wp-logo',
    97                 'id'     => 'wp-logo-secondary',
    98                 'title'  => ' ',
    99                 'meta'   => array(
    100                         'class' => 'secondary',
    101                 ),
    102         ) );
    103 
    10494        // Add WordPress.org link
    10595        $wp_admin_bar->add_menu( array(
    106                 'parent' => 'wp-logo-secondary',
    107                 'id'     => 'wporg',
    108                 'title'  => __('WordPress.org'),
    109                 'href'   => __('http://wordpress.org'),
     96                'parent'    => 'wp-logo',
     97                'secondary' => true,
     98                'id'        => 'wporg',
     99                'title'     => __('WordPress.org'),
     100                'href'      => __('http://wordpress.org'),
    110101        ) );
    111102
    112103        // Add codex link
    113104        $wp_admin_bar->add_menu( array(
    114                 'parent' => 'wp-logo-secondary',
    115                 'id'     => 'documentation',
    116                 'title'  => __('Documentation'),
    117                 'href'   => __('http://codex.wordpress.org'),
     105                'parent'    => 'wp-logo',
     106                'secondary' => true,
     107                'id'        => 'documentation',
     108                'title'     => __('Documentation'),
     109                'href'      => __('http://codex.wordpress.org'),
    118110        ) );
    119111
    120112        // Add forums link
    121113        $wp_admin_bar->add_menu( array(
    122                 'parent' => 'wp-logo-secondary',
    123                 'id'     => 'support-forums',
    124                 'title'  => __('Support Forums'),
    125                 'href'   => __('http://wordpress.org/support/'),
     114                'parent'    => 'wp-logo',
     115                'secondary' => true,
     116                'id'        => 'support-forums',
     117                'title'     => __('Support Forums'),
     118                'href'      => __('http://wordpress.org/support/'),
    126119        ) );
    127120
    128121        // Add feedback link
    129122        $wp_admin_bar->add_menu( array(
    130                 'parent' => 'wp-logo-secondary',
    131                 'id'     => 'feedback',
    132                 'title'  => __('Feedback'),
    133                 'href'   => __('http://wordpress.org/support/forum/requests-and-feedback'),
     123                'parent'    => 'wp-logo',
     124                'secondary' => true,
     125                'id'        => 'feedback',
     126                'title'     => __('Feedback'),
     127                'href'      => __('http://wordpress.org/support/forum/requests-and-feedback'),
    134128        ) );
    135129}
    136130
     
    150144                /* Add the 'My Account' menu */
    151145                $avatar = get_avatar( $user_id, 28 );
    152146                $howdy  = sprintf( __('Howdy, %1$s'), $user_identity );
    153                 $class  = 'opposite';
     147                $class  = empty( $avatar ) ? '' : 'with-avatar';
    154148
    155                 if ( ! empty( $avatar ) )
    156                         $class .= ' with-avatar';
    157 
    158149                $wp_admin_bar->add_menu( array(
    159                         'id'    => 'my-account',
    160                         'title' => $howdy . $avatar,
    161                         'href'  => $profile_url,
    162                         'meta'  => array(
    163                                 'class' => $class,
     150                        'id'        => 'my-account',
     151                        'secondary' => true,
     152                        'title'     => $howdy . $avatar,
     153                        'href'      => $profile_url,
     154                        'meta'      => array(
     155                                'class'     => $class,
    164156                        ),
    165157                ) );
    166158
     
    322314                ) );
    323315        }
    324316
    325         if ( $wp_admin_bar->user->blogs ) {
    326                 $wp_admin_bar->add_menu( array(
    327                         'parent' => 'my-sites',
    328                         'id'     => 'my-sites-secondary',
    329                         'title'  => ' ',
    330                         'meta'   => array(
    331                                 'class' => 'secondary',
    332                         ),
    333                 ) );
    334         }
    335 
    336317        // Add blog links
    337318        $blue_wp_logo_url = includes_url('images/wpmini-blue.png');
    338319
     
    345326                $menu_id  = 'blog-' . $blog->userblog_id;
    346327
    347328                $wp_admin_bar->add_menu( array(
    348                         'parent' => 'my-sites-secondary',
    349                         'id'     => $menu_id,
    350                         'title'  => $blavatar . $blogname,
    351                         'href'   => get_admin_url( $blog->userblog_id ),
     329                        'parent'    => 'my-sites',
     330                        'secondary' => true,
     331                        'id'        => $menu_id,
     332                        'title'     => $blavatar . $blogname,
     333                        'href'      => get_admin_url( $blog->userblog_id ),
    352334                ) );
    353335
    354336                $wp_admin_bar->add_menu( array(
     
    473455 * @since 3.1.0
    474456 */
    475457function wp_admin_bar_new_content_menu( $wp_admin_bar ) {
    476         $primary = $secondary = array();
     458        $actions = array();
    477459
    478460        $cpts = (array) get_post_types( array( 'show_in_admin_bar' => true ), 'objects' );
    479461
    480462        if ( isset( $cpts['post'] ) && current_user_can( $cpts['post']->cap->edit_posts ) ) {
    481                 $primary[ 'post-new.php' ] = array( $cpts['post']->labels->name_admin_bar, 'new-post' );
     463                $actions[ 'post-new.php' ] = array( $cpts['post']->labels->name_admin_bar, 'new-post' );
    482464                unset( $cpts['post'] );
    483465        }
    484466
    485467        if ( current_user_can( 'upload_files' ) )
    486                 $primary[ 'media-new.php' ] = array( _x( 'Media', 'add new from admin bar' ), 'new-media' );
     468                $actions[ 'media-new.php' ] = array( _x( 'Media', 'add new from admin bar' ), 'new-media' );
    487469
    488470        if ( current_user_can( 'manage_links' ) )
    489                 $primary[ 'link-add.php' ] = array( _x( 'Link', 'add new from admin bar' ), 'new-link' );
     471                $actions[ 'link-add.php' ] = array( _x( 'Link', 'add new from admin bar' ), 'new-link' );
    490472
    491473        if ( isset( $cpts['page'] ) && current_user_can( $cpts['page']->cap->edit_posts ) ) {
    492                 $primary[ 'post-new.php?post_type=page' ] = array( $cpts['page']->labels->name_admin_bar, 'new-page' );
     474                $actions[ 'post-new.php?post_type=page' ] = array( $cpts['page']->labels->name_admin_bar, 'new-page' );
    493475                unset( $cpts['page'] );
    494476        }
    495477
     
    499481                        continue;
    500482
    501483                $key = 'post-new.php?post_type=' . $cpt->name;
    502                 $primary[ $key ] = array( $cpt->labels->name_admin_bar, 'new-' . $cpt->name );
     484                $actions[ $key ] = array( $cpt->labels->name_admin_bar, 'new-' . $cpt->name );
    503485        }
    504486
    505487        if ( current_user_can( 'create_users' ) || current_user_can( 'promote_users' ) )
    506                 $secondary[ 'user-new.php' ] = array( _x( 'User', 'add new from admin bar' ), 'new-user' );
     488                $actions[ 'user-new.php' ] = array( _x( 'User', 'add new from admin bar' ), 'new-user', true );
    507489
    508         if ( ! $primary && ! $secondary )
     490        if ( ! $actions )
    509491                return;
    510492
    511493        $wp_admin_bar->add_menu( array(
    512494                'id'    => 'new-content',
     495                'secondary' => true,
    513496                'title' => _x( 'Add New', 'admin bar menu group label' ),
    514                 'href'  => admin_url( current( array_keys( $primary ) ) ),
     497                'href'  => admin_url( current( array_keys( $actions ) ) ),
    515498        ) );
    516499
    517         $items = array(
    518                 'new-content' => $primary,
    519                 'new-content-secondary' => $secondary,
    520         );
     500        foreach ( $actions as $link => $action ) {
     501                $action = array_pad( $action, 3, false );
     502                list( $title, $id, $secondary ) = $action;
    521503
    522         foreach ( $items as $parent => $actions ) {
    523 
    524                 if ( ! empty( $actions ) && $parent == 'new-content-secondary' ) {
    525                         $wp_admin_bar->add_menu( array(
    526                                 'parent' => 'new-content',
    527                                 'id'     => 'new-content-secondary',
    528                                 'title'  => ' ',
    529                                 'meta'   => array(
    530                                         'class' => 'secondary',
    531                                 ),
    532                         ) );
    533                 }
    534 
    535                 foreach ( $actions as $link => $action ) {
    536                         $wp_admin_bar->add_menu( array(
    537                                 'parent' => $parent,
    538                                 'id'     => $action[1],
    539                                 'title'  => $action[0],
    540                                 'href'   => admin_url( $link )
    541                         ) );
    542                 }
     504                $wp_admin_bar->add_menu( array(
     505                        'parent'    => 'new-content',
     506                        'secondary' => $secondary,
     507                        'id'        => $id,
     508                        'title'     => $title,
     509                        'href'      => admin_url( $link )
     510                ) );
    543511        }
    544512}
    545513
  • wp-includes/css/admin-bar.dev.css

     
    7878        border-right: 1px solid #333;
    7979}
    8080
    81 #wpadminbar .quicklinks > ul > li.opposite {
     81#wpadminbar .quicklinks .top-secondary > li {
    8282        border-left: 1px solid #333;
    8383        border-right: 0;
     84        float: right;
    8485}
    8586
    86 #wpadminbar .quicklinks > ul > li.opposite > a {
     87#wpadminbar .quicklinks .top-secondary > li > a {
    8788        border-left: 1px solid #555;
    8889        border-right: 0;
    8990}
     
    117118        border-color: #dfdfdf;
    118119}
    119120
    120 #wpadminbar .quicklinks .opposite.menupop ul {
     121#wpadminbar .quicklinks .top-secondary .menupop ul {
    121122        right: 0;
    122123        margin: 0 -1px 0 0;
    123124}
     
    166167        border-width: 1px;
    167168}
    168169
    169 #wpadminbar .quicklinks .opposite.menupop li:hover > ul,
    170 #wpadminbar .quicklinks .opposite.menupop li.hover > ul {
     170#wpadminbar .quicklinks .top-secondary .menupop li:hover > ul,
     171#wpadminbar .quicklinks .top-secondary .menupop li.hover > ul {
    171172        margin-left: 0;
    172173        left: inherit;
    173174        right: 100%;
     
    232233        padding: 0 1.5em 0 0;
    233234}
    234235
    235 #wpadminbar .opposite.menupop li a > span {
     236#wpadminbar .top-secondary .menupop li a > span {
    236237        background-position: -28px -31px;
    237238        padding: 0 0 0 1.5em;
    238239}
    239240
    240 #wpadminbar .quicklinks .menupop .secondary {
    241         background: #eee;
    242         margin: 6px 0 -6px;
    243         border-top: 1px solid #dfdfdf;
    244 }
    245 
    246 #wpadminbar .quicklinks .menupop .secondary > a {
    247         display: none;
    248 }
    249 
    250 #wpadminbar .quicklinks .menupop li.secondary > ul,
    251 #wpadminbar .quicklinks .opposite.menupop li.secondary > ul {
     241#wpadminbar .quicklinks .menupop ul.sub-secondary {
    252242        display: block;
    253243        position: relative;
    254244        right: auto;
    255245        margin: 0;
    256246        border: 0;
     247
    257248        background: #eee;
     249        margin: 6px 0 -6px;
     250        border-top: 1px solid #dfdfdf;
     251
    258252        -moz-box-shadow: none;
    259253        -webkit-box-shadow: none;
    260254        box-shadow: none;
    261255}
    262256
    263 #wpadminbar .quicklinks .menupop li.secondary > ul > li:hover,
    264 #wpadminbar .quicklinks .menupop li.secondary > ul > li.hover,
    265 #wpadminbar .quicklinks .menupop li.secondary > ul > li a:focus {
     257#wpadminbar .quicklinks .menupop .sub-secondary > li:hover,
     258#wpadminbar .quicklinks .menupop .sub-secondary > li.hover,
     259#wpadminbar .quicklinks .menupop .sub-secondary > li a:focus {
    266260        background: #dfdfdf;
    267261}
    268262
     
    283277        color: #000;
    284278}
    285279
    286 #wpadminbar li.opposite {
     280#wpadminbar .top-secondary {
    287281        float: right;
    288282}
    289283
  • wp-includes/class-wp-admin-bar.php

     
    1212                        $this->proto = 'https://';
    1313
    1414                $this->user = new stdClass;
     15                $this->root = new stdClass;
     16                $this->root->children  = (object) array(
     17                        'primary'   => array(),
     18                        'secondary' => array(),
     19                );
    1520
    1621                if ( is_user_logged_in() ) {
    1722                        /* Populate settings we need for the menu based on the current user. */
     
    5964         * Add a node to the menu.
    6065         *
    6166         * @param array $args - The arguments for each node.
    62          * - id       - string - The ID of the item.
    63          * - title    - string - The title of the node.
    64          * - parent   - string - The ID of the parent node. Optional.
    65          * - href     - string - The link for the item. Optional.
    66          * - meta     - array  - Meta data including the following keys: html, class, onclick, target, title.
     67         * - id         - string    - The ID of the item.
     68         * - title      - string    - The title of the node.
     69         * - parent     - string    - The ID of the parent node. Optional.
     70         * - href       - string    - The link for the item. Optional.
     71         * - secondary  - boolean   - If the item should be part of a secondary menu. Optional. Default false.
     72         * - meta       - array     - Meta data including the following keys: html, class, onclick, target, title.
    6773         */
    6874        public function add_node( $args ) {
    6975                // Shim for old method signature: add_node( $parent_id, $menu_obj, $args )
     
    8086                }
    8187
    8288                $defaults = array(
    83                         'id'       => false,
    84                         'title'    => false,
    85                         'parent'   => false,
    86                         'href'     => false,
    87                         'meta'     => array(),
     89                        'id'        => false,
     90                        'title'     => false,
     91                        'parent'    => false,
     92                        'href'      => false,
     93                        'secondary' => false,
     94                        'meta'      => array(),
    8895                );
    8996
    9097                // If the node already exists, keep any data that isn't provided.
     
    9299                        $defaults = (array) $this->nodes[ $args['id'] ];
    93100
    94101                $args = wp_parse_args( $args, $defaults );
     102                $args['children'] = (object) array(
     103                        'primary'   => array(),
     104                        'secondary' => array(),
     105                );
    95106
    96107                $this->nodes[ $args['id'] ] = (object) $args;
    97108        }
     
    106117
    107118                        // Handle root menu items
    108119                        if ( empty( $node->parent ) ) {
    109                                 $this->root[] = $node;
    110                                 continue;
    111                         }
     120                                $parent = $this->root;
    112121
    113122                        // If the parent node isn't registered, ignore the node.
    114                         if ( ! isset( $this->nodes[ $node->parent ] ) )
     123                        } elseif ( ! isset( $this->nodes[ $node->parent ] ) ) {
    115124                                continue;
    116125
    117                         $parent = $this->nodes[ $node->parent ];
    118                         if ( ! isset( $parent->children ) )
    119                                 $parent->children = array();
     126                        } else {
     127                                $parent = $this->nodes[ $node->parent ];
     128                        }
    120129
    121                         $parent->children[] = $node;
     130                        if ( $node->secondary )
     131                                $parent->children->secondary[] = $node;
     132                        else
     133                                $parent->children->primary[] = $node;
    122134                }
    123135
    124136                ?>
     
    126138                        <div class="quicklinks">
    127139                                <ul class="ab-top-menu"><?php
    128140
    129                                         foreach ( $this->root as $node ) {
     141                                        foreach ( $this->root->children->primary as $node ) {
    130142                                                $this->recursive_render( $node );
    131143                                        }
    132144
     145                                        if ( ! empty( $this->root->children->secondary ) ):
     146                                                ?><ul class="top-secondary"><?php
     147
     148                                                        foreach ( $this->root->children->secondary as $node ) {
     149                                                                $this->recursive_render( $node );
     150                                                        }
     151
     152                                                ?></ul><?php
     153                                        endif;
    133154                                ?></ul>
    134155                        </div>
    135156                </div>
     
    138159        }
    139160
    140161        function recursive_render( $node ) {
    141                 $is_parent = ! empty( $node->children );
     162                $is_parent = ! empty( $node->children->primary );
    142163
    143164                $menuclass = $is_parent ? 'menupop' : '';
    144165                if ( ! empty( $node->meta['class'] ) )
     
    173194
    174195                        ?></a>
    175196
    176                         <?php if ( $is_parent ) : ?>
    177                                 <ul><?php
    178 
    179                                 // Render children.
    180                                 foreach ( $node->children as $child_node ) {
     197                        <?php
     198                        if ( $is_parent ) :
     199                                ?><ul><?php
     200                                foreach ( $node->children->primary as $child_node ) {
    181201                                        $this->recursive_render( $child_node );
    182202                                }
    183203
    184                                 ?></ul>
    185                         <?php endif;
     204                                if ( ! empty( $node->children->secondary ) ):
     205                                        ?><ul class="sub-secondary"><?php
     206                                        foreach ( $node->children->secondary as $child_node ) {
     207                                                $this->recursive_render( $child_node );
     208                                        }
     209                                        ?></ul><?php
     210                                endif;
     211                                ?></ul><?php
     212                        endif;
    186213
    187214                        if ( ! empty( $node->meta['html'] ) )
    188215                                echo $node->meta['html'];