Make WordPress Core

Ticket #29213: 29213.3.diff

File 29213.3.diff, 6.3 KB (added by westonruter, 7 years ago)

Change: https://github.com/xwp/wordpress-develop/commit/54c9cb865d0e9c66ed3589f4f2fc1fde975dd122

  • src/wp-admin/includes/menu.php

    diff --git src/wp-admin/includes/menu.php src/wp-admin/includes/menu.php
    index 873f737..e0ddc81 100644
    unset($sub, $parent); 
    9393foreach ( $menu as $id => $data ) {
    9494        if ( empty($submenu[$data[2]]) )
    9595                continue;
    96         $subs = $submenu[$data[2]];
    97         $first_sub = array_shift($subs);
     96        $subs = $submenu[ $data[2] ];
     97        $first_sub = array_shift( $subs );
    9898        $old_parent = $data[2];
    9999        $new_parent = $first_sub[2];
    100100        /*
    foreach ( $menu as $id => $data ) { 
    102102         * make the first submenu the new parent.
    103103         */
    104104        if ( $new_parent != $old_parent ) {
    105                 $_wp_real_parent_file[$old_parent] = $new_parent;
    106                 $menu[$id][2] = $new_parent;
     105                $_wp_real_parent_file[ $old_parent ] = $new_parent;
     106                $menu[ $id ][1] = $first_sub[1]; // capability
     107                $menu[ $id ][2] = $first_sub[2]; // location
     108                if ( empty( $subs ) ) {
     109                        $menu[ $id ][0] = $first_sub[0]; // label
     110                }
    107111
    108112                foreach ($submenu[$old_parent] as $index => $data) {
    109113                        $submenu[$new_parent][$index] = $submenu[$old_parent][$index];
  • src/wp-admin/menu.php

    diff --git src/wp-admin/menu.php src/wp-admin/menu.php
    index 89c13d9..43517e9 100644
    $menu[60] = array( __('Appearance'), $appearance_cap, 'themes.php', '', 'menu-to 
    154154        $submenu['themes.php'][6] = array( __( 'Customize' ), 'customize', $customize_url, '', 'hide-if-no-customize' );
    155155
    156156        if ( current_theme_supports( 'menus' ) || current_theme_supports( 'widgets' ) ) {
    157                 $submenu['themes.php'][10] = array(__( 'Menus' ), 'edit_theme_options', 'nav-menus.php');
     157                $submenu['themes.php'][10] = array(__( 'Menus' ), 'manage_menus', 'nav-menus.php');
    158158        }
    159159
    160160        if ( current_theme_supports( 'custom-header' ) && current_user_can( 'customize') ) {
  • src/wp-admin/nav-menus.php

    diff --git src/wp-admin/nav-menus.php src/wp-admin/nav-menus.php
    index 5f99e72..77686be 100644
    if ( ! current_theme_supports( 'menus' ) && ! current_theme_supports( 'widgets' 
    1919        wp_die( __( 'Your theme does not support navigation menus or widgets.' ) );
    2020
    2121// Permissions Check
    22 if ( ! current_user_can('edit_theme_options') )
     22if ( ! current_user_can( 'manage_menus' ) ) {
    2323        wp_die( __( 'Cheatin’ uh?' ), 403 );
     24}
    2425
    2526wp_enqueue_script( 'nav-menu' );
    2627
  • src/wp-includes/admin-bar.php

    diff --git src/wp-includes/admin-bar.php src/wp-includes/admin-bar.php
    index 49279a9..5d3e145 100644
    function wp_admin_bar_comments_menu( $wp_admin_bar ) { 
    657657function wp_admin_bar_appearance_menu( $wp_admin_bar ) {
    658658        $wp_admin_bar->add_group( array( 'parent' => 'site-name', 'id' => 'appearance' ) );
    659659
    660         if ( current_user_can( 'switch_themes' ) || current_user_can( 'edit_theme_options' ) )
    661                 $wp_admin_bar->add_menu( array( 'parent' => 'appearance', 'id' => 'themes', 'title' => __('Themes'), 'href' => admin_url('themes.php') ) );
    662 
    663         if ( ! current_user_can( 'edit_theme_options' ) )
    664                 return;
     660        if ( current_user_can( 'switch_themes' ) || current_user_can( 'edit_theme_options' ) ) {
     661                $wp_admin_bar->add_menu( array( 'parent' => 'appearance', 'id' => 'themes', 'title' => __( 'Themes' ), 'href' => admin_url( 'themes.php' ) ) );
     662        }
    665663
    666664        $current_url = ( is_ssl() ? 'https://' : 'http://' ) . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
    667665        $customize_url = add_query_arg( 'url', urlencode( $current_url ), wp_customize_url() );
    function wp_admin_bar_appearance_menu( $wp_admin_bar ) { 
    678676                add_action( 'wp_before_admin_bar_render', 'wp_customize_support_script' );
    679677        }
    680678
    681         if ( current_theme_supports( 'widgets' ) ) {
     679        if ( current_user_can( 'edit_theme_options' ) && current_theme_supports( 'widgets' ) ) {
    682680                $wp_admin_bar->add_menu( array(
    683681                        'parent' => 'appearance',
    684682                        'id'     => 'widgets',
    function wp_admin_bar_appearance_menu( $wp_admin_bar ) { 
    702700                }
    703701        }
    704702
    705         if ( current_theme_supports( 'menus' ) || current_theme_supports( 'widgets' ) )
    706                 $wp_admin_bar->add_menu( array( 'parent' => 'appearance', 'id' => 'menus', 'title' => __('Menus'), 'href' => admin_url('nav-menus.php') ) );
     703        if ( current_user_can( 'manage_menus' ) && ( current_theme_supports( 'menus' ) || current_theme_supports( 'widgets' ) ) ) {
     704                $wp_admin_bar->add_menu( array( 'parent' => 'appearance', 'id' => 'menus', 'title' => __( 'Menus' ), 'href' => admin_url( 'nav-menus.php' ) ) );
     705        }
    707706
    708         if ( current_theme_supports( 'custom-background' ) ) {
     707        if ( current_user_can( 'edit_theme_options' ) && current_theme_supports( 'custom-background' ) ) {
    709708                $wp_admin_bar->add_menu( array(
    710709                        'parent' => 'appearance',
    711710                        'id'     => 'background',
    function wp_admin_bar_appearance_menu( $wp_admin_bar ) { 
    729728                }
    730729        }
    731730
    732         if ( current_theme_supports( 'custom-header' ) ) {
     731        if ( current_user_can( 'edit_theme_options' ) && current_theme_supports( 'custom-header' ) ) {
    733732                $wp_admin_bar->add_menu( array(
    734733                        'parent' => 'appearance',
    735734                        'id'     => 'header',
  • src/wp-includes/capabilities.php

    diff --git src/wp-includes/capabilities.php src/wp-includes/capabilities.php
    index 160c20e..47afa28 100644
    function map_meta_cap( $cap, $user_id ) { 
    13351335        case 'customize' :
    13361336                $caps[] = 'edit_theme_options';
    13371337                break;
     1338        case 'manage_menus' :
     1339                $caps[] = 'edit_theme_options';
     1340                break;
    13381341        default:
    13391342                // Handle meta capabilities for custom post types.
    13401343                $post_type_meta_caps = _post_type_meta_capabilities();
  • src/wp-includes/default-widgets.php

    diff --git src/wp-includes/default-widgets.php src/wp-includes/default-widgets.php
    index 180e074..e48ea0a 100644
    class WP_Widget_Tag_Cloud extends WP_Widget { 
    13481348                $menus = wp_get_nav_menus();
    13491349
    13501350                // If no menus exists, direct the user to go and create some.
    1351                 if ( !$menus ) {
    1352                         echo '<p>'. sprintf( __('No menus have been created yet. <a href="%s">Create some</a>.'), admin_url('nav-menus.php') ) .'</p>';
     1351                if ( ! $menus ) {
     1352                        if ( current_user_can( 'manage_menus' ) ) {
     1353                                echo '<p>'. sprintf( __( 'No menus have been created yet. <a href="%s">Create some</a>.' ), admin_url( 'nav-menus.php' ) ) . '</p>';
     1354                        } else {
     1355                                echo '<p>' . __( 'No menus have been created yet, and you do not have permission to create them.' ) . '</p>';
     1356                        }
    13531357                        return;
    13541358                }
    13551359                ?>