web/wp-includes/admin-bar.php
changeset 194 32102edaa81b
child 204 09a1c134465b
equal deleted inserted replaced
193:2f6f6f7551ca 194:32102edaa81b
       
     1 <?php
       
     2 /**
       
     3  * Admin Bar
       
     4  *
       
     5  * This code handles the building and rendering of the press bar.
       
     6  */
       
     7 
       
     8 /**
       
     9  * Instantiate the admin bar object and set it up as a global for access elsewhere.
       
    10  *
       
    11  * To hide the admin bar, you're looking in the wrong place. Unhooking this function will not
       
    12  * properly remove the admin bar. For that, use show_admin_bar(false) or the show_admin_bar filter.
       
    13  *
       
    14  * @since 3.1.0
       
    15  * @access private
       
    16  * @return bool Whether the admin bar was successfully initialized.
       
    17  */
       
    18 function _wp_admin_bar_init() {
       
    19 	global $wp_admin_bar;
       
    20 
       
    21 	if ( ! is_admin_bar_showing() )
       
    22 		return false;
       
    23 
       
    24 	/* Load the admin bar class code ready for instantiation */
       
    25 	require( ABSPATH . WPINC . '/class-wp-admin-bar.php' );
       
    26 
       
    27 	/* Instantiate the admin bar */
       
    28 	$admin_bar_class = apply_filters( 'wp_admin_bar_class', 'WP_Admin_Bar' );
       
    29 	if ( class_exists( $admin_bar_class ) )
       
    30 		$wp_admin_bar = new $admin_bar_class;
       
    31 	else
       
    32 		return false;
       
    33 
       
    34 	$wp_admin_bar->initialize();
       
    35 	$wp_admin_bar->add_menus();
       
    36 
       
    37 	return true;
       
    38 }
       
    39 add_action( 'init', '_wp_admin_bar_init' ); // Don't remove. Wrong way to disable.
       
    40 
       
    41 /**
       
    42  * Render the admin bar to the page based on the $wp_admin_bar->menu member var.
       
    43  * This is called very late on the footer actions so that it will render after anything else being
       
    44  * added to the footer.
       
    45  *
       
    46  * It includes the action "admin_bar_menu" which should be used to hook in and
       
    47  * add new menus to the admin bar. That way you can be sure that you are adding at most optimal point,
       
    48  * right before the admin bar is rendered. This also gives you access to the $post global, among others.
       
    49  *
       
    50  * @since 3.1.0
       
    51  */
       
    52 function wp_admin_bar_render() {
       
    53 	global $wp_admin_bar;
       
    54 
       
    55 	if ( ! is_admin_bar_showing() || ! is_object( $wp_admin_bar ) )
       
    56 		return false;
       
    57 
       
    58 	do_action_ref_array( 'admin_bar_menu', array( &$wp_admin_bar ) );
       
    59 
       
    60 	do_action( 'wp_before_admin_bar_render' );
       
    61 
       
    62 	$wp_admin_bar->render();
       
    63 
       
    64 	do_action( 'wp_after_admin_bar_render' );
       
    65 }
       
    66 add_action( 'wp_footer', 'wp_admin_bar_render', 1000 );
       
    67 add_action( 'in_admin_header', 'wp_admin_bar_render', 0 );
       
    68 
       
    69 /**
       
    70  * Add the WordPress logo menu.
       
    71  *
       
    72  * @since 3.3.0
       
    73  */
       
    74 function wp_admin_bar_wp_menu( $wp_admin_bar ) {
       
    75 	$wp_admin_bar->add_menu( array(
       
    76 		'id'    => 'wp-logo',
       
    77 		'title' => '<span class="ab-icon"></span>',
       
    78 		'href'  => self_admin_url( 'about.php' ),
       
    79 		'meta'  => array(
       
    80 			'title' => __('About WordPress'),
       
    81 		),
       
    82 	) );
       
    83 
       
    84 	if ( is_user_logged_in() ) {
       
    85 		// Add "About WordPress" link
       
    86 		$wp_admin_bar->add_menu( array(
       
    87 			'parent' => 'wp-logo',
       
    88 			'id'     => 'about',
       
    89 			'title'  => __('About WordPress'),
       
    90 			'href'  => self_admin_url( 'about.php' ),
       
    91 		) );
       
    92 	}
       
    93 
       
    94 	// Add WordPress.org link
       
    95 	$wp_admin_bar->add_menu( array(
       
    96 		'parent'    => 'wp-logo-external',
       
    97 		'id'        => 'wporg',
       
    98 		'title'     => __('WordPress.org'),
       
    99 		'href'      => __('http://wordpress.org/'),
       
   100 	) );
       
   101 
       
   102 	// Add codex link
       
   103 	$wp_admin_bar->add_menu( array(
       
   104 		'parent'    => 'wp-logo-external',
       
   105 		'id'        => 'documentation',
       
   106 		'title'     => __('Documentation'),
       
   107 		'href'      => __('http://codex.wordpress.org/'),
       
   108 	) );
       
   109 
       
   110 	// Add forums link
       
   111 	$wp_admin_bar->add_menu( array(
       
   112 		'parent'    => 'wp-logo-external',
       
   113 		'id'        => 'support-forums',
       
   114 		'title'     => __('Support Forums'),
       
   115 		'href'      => __('http://wordpress.org/support/'),
       
   116 	) );
       
   117 
       
   118 	// Add feedback link
       
   119 	$wp_admin_bar->add_menu( array(
       
   120 		'parent'    => 'wp-logo-external',
       
   121 		'id'        => 'feedback',
       
   122 		'title'     => __('Feedback'),
       
   123 		'href'      => __('http://wordpress.org/support/forum/requests-and-feedback'),
       
   124 	) );
       
   125 }
       
   126 
       
   127 /**
       
   128  * Add the "My Account" item.
       
   129  *
       
   130  * @since 3.3.0
       
   131  */
       
   132 function wp_admin_bar_my_account_item( $wp_admin_bar ) {
       
   133 	$user_id      = get_current_user_id();
       
   134 	$current_user = wp_get_current_user();
       
   135 	$profile_url  = get_edit_profile_url( $user_id );
       
   136 
       
   137 	if ( ! $user_id )
       
   138 		return;
       
   139 
       
   140 	$avatar = get_avatar( $user_id, 16 );
       
   141 	$howdy  = sprintf( __('Howdy, %1$s'), $current_user->display_name );
       
   142 	$class  = empty( $avatar ) ? '' : 'with-avatar';
       
   143 
       
   144 	$wp_admin_bar->add_menu( array(
       
   145 		'id'        => 'my-account',
       
   146 		'parent'    => 'top-secondary',
       
   147 		'title'     => $howdy . $avatar,
       
   148 		'href'      => $profile_url,
       
   149 		'meta'      => array(
       
   150 			'class'     => $class,
       
   151 			'title'     => __('My Account'),
       
   152 		),
       
   153 	) );
       
   154 }
       
   155 
       
   156 /**
       
   157  * Add the "My Account" submenu items.
       
   158  *
       
   159  * @since 3.1.0
       
   160  */
       
   161 function wp_admin_bar_my_account_menu( $wp_admin_bar ) {
       
   162 	$user_id      = get_current_user_id();
       
   163 	$current_user = wp_get_current_user();
       
   164 	$profile_url  = get_edit_profile_url( $user_id );
       
   165 
       
   166 	if ( ! $user_id )
       
   167 		return;
       
   168 
       
   169 	$wp_admin_bar->add_group( array(
       
   170 		'parent' => 'my-account',
       
   171 		'id'     => 'user-actions',
       
   172 	) );
       
   173 
       
   174 	$user_info  = get_avatar( $user_id, 64 );
       
   175 	$user_info .= "<span class='display-name'>{$current_user->display_name}</span>";
       
   176 
       
   177 	if ( $current_user->display_name !== $current_user->user_nicename )
       
   178 		$user_info .= "<span class='username'>{$current_user->user_nicename}</span>";
       
   179 
       
   180 	$wp_admin_bar->add_menu( array(
       
   181 		'parent' => 'user-actions',
       
   182 		'id'     => 'user-info',
       
   183 		'title'  => $user_info,
       
   184 		'href'   => $profile_url,
       
   185 		'meta'   => array(
       
   186 			'tabindex' => -1,
       
   187 		),
       
   188 	) );
       
   189 	$wp_admin_bar->add_menu( array(
       
   190 		'parent' => 'user-actions',
       
   191 		'id'     => 'edit-profile',
       
   192 		'title'  => __( 'Edit My Profile' ),
       
   193 		'href' => $profile_url,
       
   194 	) );
       
   195 	$wp_admin_bar->add_menu( array(
       
   196 		'parent' => 'user-actions',
       
   197 		'id'     => 'logout',
       
   198 		'title'  => __( 'Log Out' ),
       
   199 		'href'   => wp_logout_url(),
       
   200 	) );
       
   201 }
       
   202 
       
   203 /**
       
   204  * Add the "Site Name" menu.
       
   205  *
       
   206  * @since 3.3.0
       
   207  */
       
   208 function wp_admin_bar_site_menu( $wp_admin_bar ) {
       
   209 	global $current_site;
       
   210 
       
   211 	// Don't show for logged out users.
       
   212 	if ( ! is_user_logged_in() )
       
   213 		return;
       
   214 
       
   215 	// Show only when the user is a member of this site, or they're a super admin.
       
   216 	if ( ! is_user_member_of_blog() && ! is_super_admin() )
       
   217 		return;
       
   218 
       
   219 	$blogname = get_bloginfo('name');
       
   220 
       
   221 	if ( empty( $blogname ) )
       
   222 		$blogname = preg_replace( '#^(https?://)?(www.)?#', '', get_home_url() );
       
   223 
       
   224 	if ( is_network_admin() ) {
       
   225 		$blogname = sprintf( __('Network Admin: %s'), esc_html( $current_site->site_name ) );
       
   226 	} elseif ( is_user_admin() ) {
       
   227 		$blogname = sprintf( __('Global Dashboard: %s'), esc_html( $current_site->site_name ) );
       
   228 	}
       
   229 
       
   230 	$title = wp_html_excerpt( $blogname, 40 );
       
   231 	if ( $title != $blogname )
       
   232 		$title = trim( $title ) . '&hellip;';
       
   233 
       
   234 	$wp_admin_bar->add_menu( array(
       
   235 		'id'    => 'site-name',
       
   236 		'title' => $title,
       
   237 		'href'  => is_admin() ? home_url( '/' ) : admin_url(),
       
   238 	) );
       
   239 
       
   240 	// Create submenu items.
       
   241 
       
   242 	if ( is_admin() ) {
       
   243 		// Add an option to visit the site.
       
   244 		$wp_admin_bar->add_menu( array(
       
   245 			'parent' => 'site-name',
       
   246 			'id'     => 'view-site',
       
   247 			'title'  => __( 'Visit Site' ),
       
   248 			'href'   => home_url( '/' ),
       
   249 		) );
       
   250 
       
   251 		if ( is_blog_admin() && is_multisite() && current_user_can( 'manage_sites' ) ) {
       
   252 			$wp_admin_bar->add_menu( array(
       
   253 				'parent' => 'site-name',
       
   254 				'id'     => 'edit-site',
       
   255 				'title'  => __( 'Edit Site' ),
       
   256 				'href'   => network_admin_url( 'site-info.php?id=' . get_current_blog_id() ),
       
   257 			) );
       
   258 		}
       
   259 
       
   260 	} else {
       
   261 		// We're on the front end, link to the Dashboard.
       
   262 		$wp_admin_bar->add_menu( array(
       
   263 			'parent' => 'site-name',
       
   264 			'id'     => 'dashboard',
       
   265 			'title'  => __( 'Dashboard' ),
       
   266 			'href'   => admin_url(),
       
   267 		) );
       
   268 
       
   269 		// Add the appearance submenu items.
       
   270 		wp_admin_bar_appearance_menu( $wp_admin_bar );
       
   271 	}
       
   272 }
       
   273 
       
   274 /**
       
   275  * Add the "My Sites/[Site Name]" menu and all submenus.
       
   276  *
       
   277  * @since 3.1.0
       
   278  */
       
   279 function wp_admin_bar_my_sites_menu( $wp_admin_bar ) {
       
   280 	global $wpdb;
       
   281 
       
   282 	// Don't show for logged out users or single site mode.
       
   283 	if ( ! is_user_logged_in() || ! is_multisite() )
       
   284 		return;
       
   285 
       
   286 	// Show only when the user has at least one site, or they're a super admin.
       
   287 	if ( count( $wp_admin_bar->user->blogs ) < 1 && ! is_super_admin() )
       
   288 		return;
       
   289 
       
   290 	$wp_admin_bar->add_menu( array(
       
   291 		'id'    => 'my-sites',
       
   292 		'title' => __( 'My Sites' ),
       
   293 		'href'  => admin_url( 'my-sites.php' ),
       
   294 	) );
       
   295 
       
   296 	if ( is_super_admin() ) {
       
   297 		$wp_admin_bar->add_group( array(
       
   298 			'parent' => 'my-sites',
       
   299 			'id'     => 'my-sites-super-admin',
       
   300 		) );
       
   301 
       
   302 		$wp_admin_bar->add_menu( array(
       
   303 			'parent' => 'my-sites-super-admin',
       
   304 			'id'     => 'network-admin',
       
   305 			'title'  => __('Network Admin'),
       
   306 			'href'   => network_admin_url(),
       
   307 		) );
       
   308 
       
   309 		$wp_admin_bar->add_menu( array(
       
   310 			'parent' => 'network-admin',
       
   311 			'id'     => 'network-admin-d',
       
   312 			'title'  => __( 'Dashboard' ),
       
   313 			'href'   => network_admin_url(),
       
   314 		) );
       
   315 		$wp_admin_bar->add_menu( array(
       
   316 			'parent' => 'network-admin',
       
   317 			'id'     => 'network-admin-s',
       
   318 			'title'  => __( 'Sites' ),
       
   319 			'href'   => network_admin_url( 'sites.php' ),
       
   320 		) );
       
   321 		$wp_admin_bar->add_menu( array(
       
   322 			'parent' => 'network-admin',
       
   323 			'id'     => 'network-admin-u',
       
   324 			'title'  => __( 'Users' ),
       
   325 			'href'   => network_admin_url( 'users.php' ),
       
   326 		) );
       
   327 		$wp_admin_bar->add_menu( array(
       
   328 			'parent' => 'network-admin',
       
   329 			'id'     => 'network-admin-v',
       
   330 			'title'  => __( 'Visit Network' ),
       
   331 			'href'   => network_home_url(),
       
   332 		) );
       
   333 	}
       
   334 
       
   335 	// Add site links
       
   336 	$wp_admin_bar->add_group( array(
       
   337 		'parent' => 'my-sites',
       
   338 		'id'     => 'my-sites-list',
       
   339 		'meta'   => array(
       
   340 			'class' => is_super_admin() ? 'ab-sub-secondary' : '',
       
   341 		),
       
   342 	) );
       
   343 
       
   344 	$blue_wp_logo_url = includes_url('images/wpmini-blue.png');
       
   345 
       
   346 	foreach ( (array) $wp_admin_bar->user->blogs as $blog ) {
       
   347 		// @todo Replace with some favicon lookup.
       
   348 		//$blavatar = '<img src="' . esc_url( blavatar_url( blavatar_domain( $blog->siteurl ), 'img', 16, $blue_wp_logo_url ) ) . '" alt="Blavatar" width="16" height="16" />';
       
   349 		$blavatar = '<img src="' . esc_url($blue_wp_logo_url) . '" alt="' . esc_attr__( 'Blavatar' ) . '" width="16" height="16" class="blavatar"/>';
       
   350 
       
   351 		$blogname = empty( $blog->blogname ) ? $blog->domain : $blog->blogname;
       
   352 		$menu_id  = 'blog-' . $blog->userblog_id;
       
   353 
       
   354 		$wp_admin_bar->add_menu( array(
       
   355 			'parent'    => 'my-sites-list',
       
   356 			'id'        => $menu_id,
       
   357 			'title'     => $blavatar . $blogname,
       
   358 			'href'      => get_admin_url( $blog->userblog_id ),
       
   359 		) );
       
   360 
       
   361 		$wp_admin_bar->add_menu( array(
       
   362 			'parent' => $menu_id,
       
   363 			'id'     => $menu_id . '-d',
       
   364 			'title'  => __( 'Dashboard' ),
       
   365 			'href'   => get_admin_url( $blog->userblog_id ),
       
   366 		) );
       
   367 
       
   368 		if ( current_user_can_for_blog( $blog->userblog_id, 'edit_posts' ) ) {
       
   369 			$wp_admin_bar->add_menu( array(
       
   370 				'parent' => $menu_id,
       
   371 				'id'     => $menu_id . '-n',
       
   372 				'title'  => __( 'New Post' ),
       
   373 				'href'   => get_admin_url( $blog->userblog_id, 'post-new.php' ),
       
   374 			) );
       
   375 			$wp_admin_bar->add_menu( array(
       
   376 				'parent' => $menu_id,
       
   377 				'id'     => $menu_id . '-c',
       
   378 				'title'  => __( 'Manage Comments' ),
       
   379 				'href'   => get_admin_url( $blog->userblog_id, 'edit-comments.php' ),
       
   380 			) );
       
   381 		}
       
   382 
       
   383 		$wp_admin_bar->add_menu( array(
       
   384 			'parent' => $menu_id,
       
   385 			'id'     => $menu_id . '-v',
       
   386 			'title'  => __( 'Visit Site' ),
       
   387 			'href'   => get_home_url( $blog->userblog_id, '/' ),
       
   388 		) );
       
   389 	}
       
   390 }
       
   391 
       
   392 /**
       
   393  * Provide a shortlink.
       
   394  *
       
   395  * @since 3.1.0
       
   396  */
       
   397 function wp_admin_bar_shortlink_menu( $wp_admin_bar ) {
       
   398 	$short = wp_get_shortlink( 0, 'query' );
       
   399 	$id = 'get-shortlink';
       
   400 
       
   401 	if ( empty( $short ) )
       
   402 		return;
       
   403 
       
   404 	$html = '<input class="shortlink-input" type="text" readonly="readonly" value="' . esc_attr( $short ) . '" />';
       
   405 
       
   406 	$wp_admin_bar->add_menu( array(
       
   407 		'id' => $id,
       
   408 		'title' => __( 'Shortlink' ),
       
   409 		'href' => $short,
       
   410 		'meta' => array( 'html' => $html ),
       
   411 	) );
       
   412 }
       
   413 
       
   414 /**
       
   415  * Provide an edit link for posts and terms.
       
   416  *
       
   417  * @since 3.1.0
       
   418  */
       
   419 function wp_admin_bar_edit_menu( $wp_admin_bar ) {
       
   420 	global $post, $tag, $wp_the_query;
       
   421 
       
   422 	if ( is_admin() ) {
       
   423 		$current_screen = get_current_screen();
       
   424 
       
   425 		if ( 'post' == $current_screen->base
       
   426 			&& 'add' != $current_screen->action
       
   427 			&& ( $post_type_object = get_post_type_object( $post->post_type ) )
       
   428 			&& current_user_can( $post_type_object->cap->read_post, $post->ID )
       
   429 			&& ( $post_type_object->public ) )
       
   430 		{
       
   431 			$wp_admin_bar->add_menu( array(
       
   432 				'id' => 'view',
       
   433 				'title' => $post_type_object->labels->view_item,
       
   434 				'href' => get_permalink( $post->ID )
       
   435 			) );
       
   436 		} elseif ( 'edit-tags' == $current_screen->base
       
   437 			&& isset( $tag ) && is_object( $tag )
       
   438 			&& ( $tax = get_taxonomy( $tag->taxonomy ) )
       
   439 			&& $tax->public )
       
   440 		{
       
   441 			$wp_admin_bar->add_menu( array(
       
   442 				'id' => 'view',
       
   443 				'title' => $tax->labels->view_item,
       
   444 				'href' => get_term_link( $tag )
       
   445 			) );
       
   446 		}
       
   447 	} else {
       
   448 		$current_object = $wp_the_query->get_queried_object();
       
   449 
       
   450 		if ( empty( $current_object ) )
       
   451 			return;
       
   452 
       
   453 		if ( ! empty( $current_object->post_type )
       
   454 			&& ( $post_type_object = get_post_type_object( $current_object->post_type ) )
       
   455 			&& current_user_can( $post_type_object->cap->edit_post, $current_object->ID )
       
   456 			&& ( $post_type_object->show_ui || 'attachment' == $current_object->post_type ) )
       
   457 		{
       
   458 			$wp_admin_bar->add_menu( array(
       
   459 				'id' => 'edit',
       
   460 				'title' => $post_type_object->labels->edit_item,
       
   461 				'href' => get_edit_post_link( $current_object->ID )
       
   462 			) );
       
   463 		} elseif ( ! empty( $current_object->taxonomy )
       
   464 			&& ( $tax = get_taxonomy( $current_object->taxonomy ) )
       
   465 			&& current_user_can( $tax->cap->edit_terms )
       
   466 			&& $tax->show_ui )
       
   467 		{
       
   468 			$wp_admin_bar->add_menu( array(
       
   469 				'id' => 'edit',
       
   470 				'title' => $tax->labels->edit_item,
       
   471 				'href' => get_edit_term_link( $current_object->term_id, $current_object->taxonomy )
       
   472 			) );
       
   473 		}
       
   474 	}
       
   475 }
       
   476 
       
   477 /**
       
   478  * Add "Add New" menu.
       
   479  *
       
   480  * @since 3.1.0
       
   481  */
       
   482 function wp_admin_bar_new_content_menu( $wp_admin_bar ) {
       
   483 	$actions = array();
       
   484 
       
   485 	$cpts = (array) get_post_types( array( 'show_in_admin_bar' => true ), 'objects' );
       
   486 
       
   487 	if ( isset( $cpts['post'] ) && current_user_can( $cpts['post']->cap->edit_posts ) ) {
       
   488 		$actions[ 'post-new.php' ] = array( $cpts['post']->labels->name_admin_bar, 'new-post' );
       
   489 		unset( $cpts['post'] );
       
   490 	}
       
   491 
       
   492 	if ( current_user_can( 'upload_files' ) )
       
   493 		$actions[ 'media-new.php' ] = array( _x( 'Media', 'add new from admin bar' ), 'new-media' );
       
   494 
       
   495 	if ( current_user_can( 'manage_links' ) )
       
   496 		$actions[ 'link-add.php' ] = array( _x( 'Link', 'add new from admin bar' ), 'new-link' );
       
   497 
       
   498 	if ( isset( $cpts['page'] ) && current_user_can( $cpts['page']->cap->edit_posts ) ) {
       
   499 		$actions[ 'post-new.php?post_type=page' ] = array( $cpts['page']->labels->name_admin_bar, 'new-page' );
       
   500 		unset( $cpts['page'] );
       
   501 	}
       
   502 
       
   503 	// Add any additional custom post types.
       
   504 	foreach ( $cpts as $cpt ) {
       
   505 		if ( ! current_user_can( $cpt->cap->edit_posts ) )
       
   506 			continue;
       
   507 
       
   508 		$key = 'post-new.php?post_type=' . $cpt->name;
       
   509 		$actions[ $key ] = array( $cpt->labels->name_admin_bar, 'new-' . $cpt->name );
       
   510 	}
       
   511 
       
   512 	if ( current_user_can( 'create_users' ) || current_user_can( 'promote_users' ) )
       
   513 		$actions[ 'user-new.php' ] = array( _x( 'User', 'add new from admin bar' ), 'new-user' );
       
   514 
       
   515 	if ( ! $actions )
       
   516 		return;
       
   517 
       
   518 	$title = '<span class="ab-icon"></span><span class="ab-label">' . _x( 'New', 'admin bar menu group label' ) . '</span>';
       
   519 
       
   520 	$wp_admin_bar->add_menu( array(
       
   521 		'id'    => 'new-content',
       
   522 		'title' => $title,
       
   523 		'href'  => admin_url( current( array_keys( $actions ) ) ),
       
   524 		'meta'  => array(
       
   525 			'title' => _x( 'Add New', 'admin bar menu group label' ),
       
   526 		),
       
   527 	) );
       
   528 
       
   529 	foreach ( $actions as $link => $action ) {
       
   530 		list( $title, $id ) = $action;
       
   531 
       
   532 		$wp_admin_bar->add_menu( array(
       
   533 			'parent'    => 'new-content',
       
   534 			'id'        => $id,
       
   535 			'title'     => $title,
       
   536 			'href'      => admin_url( $link )
       
   537 		) );
       
   538 	}
       
   539 }
       
   540 
       
   541 /**
       
   542  * Add edit comments link with awaiting moderation count bubble.
       
   543  *
       
   544  * @since 3.1.0
       
   545  */
       
   546 function wp_admin_bar_comments_menu( $wp_admin_bar ) {
       
   547 	if ( !current_user_can('edit_posts') )
       
   548 		return;
       
   549 
       
   550 	$awaiting_mod = wp_count_comments();
       
   551 	$awaiting_mod = $awaiting_mod->moderated;
       
   552 	$awaiting_title = esc_attr( sprintf( _n( '%s comment awaiting moderation', '%s comments awaiting moderation', $awaiting_mod ), number_format_i18n( $awaiting_mod ) ) );
       
   553 
       
   554 	$icon  = '<span class="ab-icon"></span>';
       
   555 	$title = '<span id="ab-awaiting-mod" class="ab-label awaiting-mod pending-count count-' . $awaiting_mod . '">' . number_format_i18n( $awaiting_mod ) . '</span>';
       
   556 
       
   557 	$wp_admin_bar->add_menu( array(
       
   558 		'id'    => 'comments',
       
   559 		'title' => $icon . $title,
       
   560 		'href'  => admin_url('edit-comments.php'),
       
   561 		'meta'  => array( 'title' => $awaiting_title ),
       
   562 	) );
       
   563 }
       
   564 
       
   565 /**
       
   566  * Add appearance submenu items to the "Site Name" menu.
       
   567  *
       
   568  * @since 3.1.0
       
   569  */
       
   570 function wp_admin_bar_appearance_menu( $wp_admin_bar ) {
       
   571 	$wp_admin_bar->add_group( array( 'parent' => 'site-name', 'id' => 'appearance' ) );
       
   572 
       
   573 	if ( current_user_can( 'switch_themes' ) || current_user_can( 'edit_theme_options' ) )
       
   574 		$wp_admin_bar->add_menu( array( 'parent' => 'appearance', 'id' => 'themes', 'title' => __('Themes'), 'href' => admin_url('themes.php') ) );
       
   575 
       
   576 	if ( ! current_user_can( 'edit_theme_options' ) )
       
   577 		return;
       
   578 
       
   579 	$current_url = ( is_ssl() ? 'https://' : 'http://' ) . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
       
   580 	$wp_admin_bar->add_menu( array(
       
   581 		'parent' => 'appearance',
       
   582 		'id'     => 'customize',
       
   583 		'title'  => __('Customize'),
       
   584 		'href'   => add_query_arg( 'url', urlencode( $current_url ), wp_customize_url() ),
       
   585 		'meta'   => array(
       
   586 			'class' => 'hide-if-no-customize',
       
   587 		),
       
   588 	) );
       
   589 	add_action( 'wp_before_admin_bar_render', 'wp_customize_support_script' );
       
   590 
       
   591 	if ( current_theme_supports( 'widgets' )  )
       
   592 		$wp_admin_bar->add_menu( array( 'parent' => 'appearance', 'id' => 'widgets', 'title' => __('Widgets'), 'href' => admin_url('widgets.php') ) );
       
   593 
       
   594 	 if ( current_theme_supports( 'menus' ) || current_theme_supports( 'widgets' ) )
       
   595 		$wp_admin_bar->add_menu( array( 'parent' => 'appearance', 'id' => 'menus', 'title' => __('Menus'), 'href' => admin_url('nav-menus.php') ) );
       
   596 
       
   597 	if ( current_theme_supports( 'custom-background' ) )
       
   598 		$wp_admin_bar->add_menu( array( 'parent' => 'appearance', 'id' => 'background', 'title' => __('Background'), 'href' => admin_url('themes.php?page=custom-background') ) );
       
   599 
       
   600 	if ( current_theme_supports( 'custom-header' ) )
       
   601 		$wp_admin_bar->add_menu( array( 'parent' => 'appearance', 'id' => 'header', 'title' => __('Header'), 'href' => admin_url('themes.php?page=custom-header') ) );
       
   602 }
       
   603 
       
   604 /**
       
   605  * Provide an update link if theme/plugin/core updates are available.
       
   606  *
       
   607  * @since 3.1.0
       
   608  */
       
   609 function wp_admin_bar_updates_menu( $wp_admin_bar ) {
       
   610 
       
   611 	$update_data = wp_get_update_data();
       
   612 
       
   613 	if ( !$update_data['counts']['total'] )
       
   614 		return;
       
   615 
       
   616 	$title = '<span class="ab-icon"></span><span class="ab-label">' . number_format_i18n( $update_data['counts']['total'] ) . '</span>';
       
   617 
       
   618 	$wp_admin_bar->add_menu( array(
       
   619 		'id'    => 'updates',
       
   620 		'title' => $title,
       
   621 		'href'  => network_admin_url( 'update-core.php' ),
       
   622 		'meta'  => array(
       
   623 			'title' => $update_data['title'],
       
   624 		),
       
   625 	) );
       
   626 }
       
   627 
       
   628 /**
       
   629  * Add search form.
       
   630  *
       
   631  * @since 3.3.0
       
   632  */
       
   633 function wp_admin_bar_search_menu( $wp_admin_bar ) {
       
   634 	if ( is_admin() )
       
   635 		return;
       
   636 
       
   637 	$form  = '<form action="' . esc_url( home_url( '/' ) ) . '" method="get" id="adminbarsearch">';
       
   638 	$form .= '<input class="adminbar-input" name="s" id="adminbar-search" tabindex="10" type="text" value="" maxlength="150" />';
       
   639 	$form .= '<input type="submit" class="adminbar-button" value="' . __('Search') . '"/>';
       
   640 	$form .= '</form>';
       
   641 
       
   642 	$wp_admin_bar->add_menu( array(
       
   643 		'parent' => 'top-secondary',
       
   644 		'id'     => 'search',
       
   645 		'title'  => $form,
       
   646 		'meta'   => array(
       
   647 			'class'    => 'admin-bar-search',
       
   648 			'tabindex' => -1,
       
   649 		)
       
   650 	) );
       
   651 }
       
   652 
       
   653 /**
       
   654  * Add secondary menus.
       
   655  *
       
   656  * @since 3.3.0
       
   657  */
       
   658 function wp_admin_bar_add_secondary_groups( $wp_admin_bar ) {
       
   659 	$wp_admin_bar->add_group( array(
       
   660 		'id'     => 'top-secondary',
       
   661 		'meta'   => array(
       
   662 			'class' => 'ab-top-secondary',
       
   663 		),
       
   664 	) );
       
   665 
       
   666 	$wp_admin_bar->add_group( array(
       
   667 		'parent' => 'wp-logo',
       
   668 		'id'     => 'wp-logo-external',
       
   669 		'meta'   => array(
       
   670 			'class' => 'ab-sub-secondary',
       
   671 		),
       
   672 	) );
       
   673 }
       
   674 
       
   675 /**
       
   676  * Style and scripts for the admin bar.
       
   677  *
       
   678  * @since 3.1.0
       
   679  *
       
   680  */
       
   681 function wp_admin_bar_header() { ?>
       
   682 <style type="text/css" media="print">#wpadminbar { display:none; }</style>
       
   683 <?php
       
   684 }
       
   685 
       
   686 /**
       
   687  * Default admin bar callback.
       
   688  *
       
   689  * @since 3.1.0
       
   690  *
       
   691  */
       
   692 function _admin_bar_bump_cb() { ?>
       
   693 <style type="text/css" media="screen">
       
   694 	html { margin-top: 28px !important; }
       
   695 	* html body { margin-top: 28px !important; }
       
   696 </style>
       
   697 <?php
       
   698 }
       
   699 
       
   700 /**
       
   701  * Set the display status of the admin bar.
       
   702  *
       
   703  * This can be called immediately upon plugin load. It does not need to be called from a function hooked to the init action.
       
   704  *
       
   705  * @since 3.1.0
       
   706  *
       
   707  * @param bool $show Whether to allow the admin bar to show.
       
   708  * @return void
       
   709  */
       
   710 function show_admin_bar( $show ) {
       
   711 	global $show_admin_bar;
       
   712 	$show_admin_bar = (bool) $show;
       
   713 }
       
   714 
       
   715 /**
       
   716  * Determine whether the admin bar should be showing.
       
   717  *
       
   718  * @since 3.1.0
       
   719  *
       
   720  * @return bool Whether the admin bar should be showing.
       
   721  */
       
   722 function is_admin_bar_showing() {
       
   723 	global $show_admin_bar, $pagenow;
       
   724 
       
   725 	// For all these types of requests, we never want an admin bar.
       
   726 	if ( defined('XMLRPC_REQUEST') || defined('APP_REQUEST') || defined('DOING_AJAX') || defined('IFRAME_REQUEST') )
       
   727 		return false;
       
   728 
       
   729 	// Integrated into the admin.
       
   730 	if ( is_admin() )
       
   731 		return true;
       
   732 
       
   733 	if ( ! isset( $show_admin_bar ) ) {
       
   734 		if ( ! is_user_logged_in() || 'wp-login.php' == $pagenow ) {
       
   735 			$show_admin_bar = false;
       
   736 		} else {
       
   737 			$show_admin_bar = _get_admin_bar_pref();
       
   738 		}
       
   739 	}
       
   740 
       
   741 	$show_admin_bar = apply_filters( 'show_admin_bar', $show_admin_bar );
       
   742 
       
   743 	return $show_admin_bar;
       
   744 }
       
   745 
       
   746 /**
       
   747  * Retrieve the admin bar display preference of a user.
       
   748  *
       
   749  * @since 3.1.0
       
   750  * @access private
       
   751  *
       
   752  * @param string $context Context of this preference check. Defaults to 'front'. The 'admin'
       
   753  * 	preference is no longer used.
       
   754  * @param int $user Optional. ID of the user to check, defaults to 0 for current user.
       
   755  * @return bool Whether the admin bar should be showing for this user.
       
   756  */
       
   757 function _get_admin_bar_pref( $context = 'front', $user = 0 ) {
       
   758 	$pref = get_user_option( "show_admin_bar_{$context}", $user );
       
   759 	if ( false === $pref )
       
   760 		return true;
       
   761 
       
   762 	return 'true' === $pref;
       
   763 }