WordPress.org

Make WordPress Core

Ticket #17516: 17516-3.diff

File 17516-3.diff, 5.3 KB (added by technosailor, 7 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];