WordPress.org

Make WordPress Core

Ticket #17516: 17516-3.diff

File 17516-3.diff, 5.3 KB (added by technosailor, 4 years ago)

Take 3. Lots of red. Wheeee! New patch allows for a string or an array to be passed. The array can have an optional cap. Unit test included as next attachment.

  • wp-includes/admin-bar.php

     
    303303} 
    304304 
    305305/** 
     306 * Displays a dropdown of filterable "quick actions" 
     307 * 
     308 * @since 3.2.0 
     309 */ 
     310function wp_admin_bar_favorite_actions( $wp_admin_bar ) { 
     311        $actions = favorite_actions( null, true ); 
     312 
     313        if( empty( $actions ) ) 
     314                return false; 
     315                 
     316        $wp_admin_bar->add_menu( array( 'id' => 'favorite_actions', 'title' => 'Quick Actions', 'href' => '#' ) ); 
     317         
     318        foreach( $actions as $slug => $action ) 
     319                $wp_admin_bar->add_menu( array( 'parent' => 'favorite_actions', 'id' => 'favorite_actions-' . $action, 'title' => __( $action ), 'href' => admin_url( $slug ) ) ); 
     320         
     321} 
     322 
     323/** 
    306324 * Style and scripts for the admin bar. 
    307325 * 
    308326 * @since 3.1.0 
  • wp-includes/class-wp-admin-bar.php

     
    184184                add_action( 'admin_bar_menu', 'wp_admin_bar_edit_menu', 30 ); 
    185185                add_action( 'admin_bar_menu', 'wp_admin_bar_shortlink_menu', 80 ); 
    186186                add_action( 'admin_bar_menu', 'wp_admin_bar_updates_menu', 70 ); 
     187                add_action( 'admin_bar_menu', 'wp_admin_bar_favorite_actions', 90 ); 
    187188 
    188189                if ( !is_network_admin() && !is_user_admin() ) { 
    189190                        add_action( 'admin_bar_menu', 'wp_admin_bar_new_content_menu', 40 ); 
  • wp-admin/includes/template.php

     
    13931393 * 
    13941394 * @since 2.7.0 
    13951395 */ 
    1396 function favorite_actions( $screen = null ) { 
     1396function favorite_actions( $screen = null, $return = false ) { 
    13971397        $default_action = false; 
    13981398 
    13991399        if ( is_string($screen) ) 
     
    14021402        if ( $screen->is_user ) 
    14031403                return; 
    14041404 
    1405         if ( isset($screen->post_type) ) { 
    1406                 $post_type_object = get_post_type_object($screen->post_type); 
    1407                 if ( 'add' != $screen->action ) 
    1408                         $default_action = array('post-new.php?post_type=' . $post_type_object->name => array($post_type_object->labels->new_item, $post_type_object->cap->edit_posts)); 
    1409                 else 
    1410                         $default_action = array('edit.php?post_type=' . $post_type_object->name => array($post_type_object->labels->name, $post_type_object->cap->edit_posts)); 
    1411         } 
    1412  
    1413         if ( !$default_action ) { 
    1414                 if ( $screen->is_network ) { 
    1415                         $default_action = array('sites.php' => array( __('Sites'), 'manage_sites')); 
    1416                 } else { 
    1417                         switch ( $screen->id ) { 
    1418                                 case 'upload': 
    1419                                         $default_action = array('media-new.php' => array(__('New Media'), 'upload_files')); 
    1420                                         break; 
    1421                                 case 'media': 
    1422                                         $default_action = array('upload.php' => array(__('Edit Media'), 'upload_files')); 
    1423                                         break; 
    1424                                 case 'link-manager': 
    1425                                 case 'link': 
    1426                                         if ( 'add' != $screen->action ) 
    1427                                                 $default_action = array('link-add.php' => array(__('New Link'), 'manage_links')); 
    1428                                         else 
    1429                                                 $default_action = array('link-manager.php' => array(__('Edit Links'), 'manage_links')); 
    1430                                         break; 
    1431                                 case 'users': 
    1432                                         $default_action = array('user-new.php' => array(__('New User'), 'create_users')); 
    1433                                         break; 
    1434                                 case 'user': 
    1435                                         $default_action = array('users.php' => array(__('Edit Users'), 'edit_users')); 
    1436                                         break; 
    1437                                 case 'plugins': 
    1438                                         $default_action = array('plugin-install.php' => array(__('Install Plugins'), 'install_plugins')); 
    1439                                         break; 
    1440                                 case 'plugin-install': 
    1441                                         $default_action = array('plugins.php' => array(__('Manage Plugins'), 'activate_plugins')); 
    1442                                         break; 
    1443                                 case 'themes': 
    1444                                         $default_action = array('theme-install.php' => array(__('Install Themes'), 'install_themes')); 
    1445                                         break; 
    1446                                 case 'theme-install': 
    1447                                         $default_action = array('themes.php' => array(__('Manage Themes'), 'switch_themes')); 
    1448                                         break; 
    1449                                 default: 
    1450                                         $default_action = array('post-new.php' => array(__('New Post'), 'edit_posts')); 
    1451                                         break; 
    1452                         } 
    1453                 } 
    1454         } 
    1455  
    1456         if ( !$screen->is_network ) { 
    1457                 $actions = array( 
    1458                         'post-new.php' => array(__('New Post'), 'edit_posts'), 
    1459                         'edit.php?post_status=draft' => array(__('Drafts'), 'edit_posts'), 
    1460                         'post-new.php?post_type=page' => array(__('New Page'), 'edit_pages'), 
    1461                         'media-new.php' => array(__('Upload'), 'upload_files'), 
    1462                         'edit-comments.php' => array(__('Comments'), 'moderate_comments') 
    1463                         ); 
    1464         } else { 
    1465                 $actions = array( 
    1466                         'sites.php' => array( __('Sites'), 'manage_sites'), 
    1467                         'users.php' => array( __('Users'), 'manage_network_users') 
    1468                 ); 
    1469         } 
    1470  
    1471         $default_key = array_keys($default_action); 
    1472         $default_key = $default_key[0]; 
    1473         if ( isset($actions[$default_key]) ) 
    1474                 unset($actions[$default_key]); 
    1475         $actions = array_merge($default_action, $actions); 
     1405        $actions = array(); 
    14761406        $actions = apply_filters( 'favorite_actions', $actions, $screen ); 
    1477  
    14781407        $allowed_actions = array(); 
    14791408        foreach ( $actions as $action => $data ) { 
    1480                 if ( current_user_can($data[1]) ) 
     1409                if( is_string( $data ) ) 
     1410                        $data = (array) $data; 
     1411                 
     1412                if( isset( $data[1] ) ) { 
     1413                        if ( current_user_can($data[1]) ) 
     1414                                $allowed_actions[$action] = $data[0]; 
     1415                } 
     1416                else 
    14811417                        $allowed_actions[$action] = $data[0]; 
    14821418        } 
    14831419 
    14841420        if ( empty($allowed_actions) ) 
    14851421                return; 
     1422                 
     1423        if( $return ) 
     1424                return $allowed_actions; 
    14861425 
    14871426        $first = array_keys($allowed_actions); 
    14881427        $first = $first[0];