2010-09-27 20:26:36 +00:00
< ? php
/**
* Admin Bar
*
* This code handles the building and rendering of the press bar .
*/
2010-11-17 18:47:34 +00:00
2010-09-27 20:26:36 +00:00
/**
2010-10-28 08:31:36 +00:00
* Instantiate the admin bar object and set it up as a global for access elsewhere .
*
* @ since 3.1 . 0
* @ return bool Whether the admin bar was successfully initialized .
2010-09-27 20:26:36 +00:00
*/
function wp_admin_bar_init () {
2010-10-28 08:31:36 +00:00
global $wp_admin_bar ;
2010-09-27 20:26:36 +00:00
2010-10-28 08:31:36 +00:00
if ( ! is_admin_bar_showing () )
2010-09-27 20:26:36 +00:00
return false ;
/* Load the admin bar class code ready for instantiation */
2010-10-30 06:40:04 +00:00
require ( ABSPATH . WPINC . '/class-wp-admin-bar.php' );
2010-09-27 20:26:36 +00:00
2010-10-28 08:31:36 +00:00
/* Instantiate the admin bar */
$admin_bar_class = apply_filters ( 'wp_admin_bar_class' , 'WP_Admin_Bar' );
2010-11-17 18:47:34 +00:00
if ( class_exists ( $admin_bar_class ) )
2010-10-28 08:31:36 +00:00
$wp_admin_bar = new $admin_bar_class ;
else
return false ;
2010-11-17 18:47:34 +00:00
2010-10-28 08:31:36 +00:00
$wp_admin_bar -> initialize ();
$wp_admin_bar -> add_menus ();
2010-10-20 13:07:54 +00:00
2010-10-28 08:31:36 +00:00
return true ;
2010-09-27 20:26:36 +00:00
}
add_action ( 'init' , 'wp_admin_bar_init' );
/**
* Render the admin bar to the page based on the $wp_admin_bar -> menu member var .
* This is called very late on the footer actions so that it will render after anything else being
* added to the footer .
*
2010-11-26 21:51:12 +00:00
* It includes the action " admin_bar_menu " which should be used to hook in and
2010-09-27 20:26:36 +00:00
* add new menus to the admin bar . That way you can be sure that you are adding at most optimal point ,
* right before the admin bar is rendered . This also gives you access to the $post global , among others .
2010-10-28 08:31:36 +00:00
*
* @ since 3.1 . 0
2010-09-27 20:26:36 +00:00
*/
function wp_admin_bar_render () {
global $wp_admin_bar ;
2010-10-28 08:31:36 +00:00
if ( ! is_object ( $wp_admin_bar ) )
2010-09-27 20:26:36 +00:00
return false ;
2010-10-23 19:49:25 +00:00
2010-09-27 20:26:36 +00:00
$wp_admin_bar -> load_user_locale_translations ();
2010-11-11 19:11:12 +00:00
do_action ( 'admin_bar_menu' );
2010-09-27 20:26:36 +00:00
do_action ( 'wp_before_admin_bar_render' );
$wp_admin_bar -> render ();
do_action ( 'wp_after_admin_bar_render' );
2010-11-17 18:47:34 +00:00
2010-09-27 20:26:36 +00:00
$wp_admin_bar -> unload_user_locale_translations ();
}
add_action ( 'wp_footer' , 'wp_admin_bar_render' , 1000 );
add_action ( 'admin_footer' , 'wp_admin_bar_render' , 1000 );
/**
* Show the logged in user ' s gravatar as a separator .
2010-10-28 08:31:36 +00:00
*
* @ since 3.1 . 0
2010-09-27 20:26:36 +00:00
*/
function wp_admin_bar_me_separator () {
2010-10-28 08:31:36 +00:00
global $wp_admin_bar ;
2010-11-11 11:49:37 +00:00
$user_id = get_current_user_id ();
if ( 0 != $user_id )
$wp_admin_bar -> add_menu ( array ( 'id' => 'me' , 'title' => get_avatar ( get_current_user_id (), 16 ), 'href' => get_edit_profile_url ( $user_id ), ) );
2010-09-27 20:26:36 +00:00
}
/**
2010-10-28 08:31:36 +00:00
* Add the " My Account " menu and all submenus .
*
* @ since 3.1 . 0
2010-09-27 20:26:36 +00:00
*/
function wp_admin_bar_my_account_menu () {
2010-10-29 15:17:22 +00:00
global $wp_admin_bar , $user_identity ;
2010-09-27 20:26:36 +00:00
2010-10-29 17:48:53 +00:00
$user_id = get_current_user_id ();
2010-11-17 18:47:34 +00:00
2010-11-11 11:49:37 +00:00
if ( 0 != $user_id ) {
/* Add the 'My Account' menu */
$wp_admin_bar -> add_menu ( array ( 'id' => 'my-account' , 'title' => $user_identity , 'href' => get_edit_profile_url ( $user_id ) ) );
2010-11-17 18:47:34 +00:00
2010-11-11 11:49:37 +00:00
/* Add the "My Account" sub menus */
$wp_admin_bar -> add_menu ( array ( 'parent' => 'my-account' , 'title' => __ ( 'Edit My Profile' ), 'href' => get_edit_profile_url ( $user_id ) ) );
if ( is_multisite () )
$wp_admin_bar -> add_menu ( array ( 'parent' => 'my-account' , 'title' => __ ( 'Dashboard' ), 'href' => get_dashboard_url ( $user_id ), ) );
else
$wp_admin_bar -> add_menu ( array ( 'parent' => 'my-account' , 'title' => __ ( 'Dashboard' ), 'href' => admin_url (), ) );
$wp_admin_bar -> add_menu ( array ( 'parent' => 'my-account' , 'title' => __ ( 'Log Out' ), 'href' => wp_logout_url (), ) );
}
2010-09-27 20:26:36 +00:00
}
/**
2010-10-28 08:31:36 +00:00
* Add the " My Sites/[Site Name] " menu and all submenus .
*
* @ since 3.1 . 0
2010-09-27 20:26:36 +00:00
*/
2010-11-11 18:48:38 +00:00
function wp_admin_bar_my_sites_menu () {
2010-09-27 20:26:36 +00:00
global $wpdb , $wp_admin_bar ;
2010-11-11 20:02:52 +00:00
/* Add the 'My Sites' menu if the user has more than one site. */
2010-10-29 15:17:22 +00:00
if ( count ( $wp_admin_bar -> user -> blogs ) <= 1 )
return ;
2010-09-27 20:26:36 +00:00
2010-10-29 15:17:22 +00:00
$wp_admin_bar -> add_menu ( array ( 'id' => 'my-blogs' , 'title' => __ ( 'My Sites' ), 'href' => $wp_admin_bar -> user -> account_domain , ) );
2010-09-27 20:26:36 +00:00
2010-10-29 15:17:22 +00:00
$default = includes_url ( 'images/wpmini-blue.png' );
2010-10-28 08:31:36 +00:00
2010-10-29 15:17:22 +00:00
foreach ( ( array ) $wp_admin_bar -> user -> blogs as $blog ) {
// @todo Replace with some favicon lookup.
//$blavatar = '<img src="' . esc_url( blavatar_url( blavatar_domain( $blog->siteurl ), 'img', 16, $default ) ) . '" alt="Blavatar" width="16" height="16" />';
2010-12-10 18:47:21 +00:00
$blavatar = '<img src="' . esc_url ( $default ) . '" alt="' . esc_attr__ ( 'Blavatar' ) . '" width="16" height="16" class="blavatar"/>' ;
2010-10-29 15:17:22 +00:00
$marker = '' ;
2010-12-10 18:47:21 +00:00
if ( strlen ( $blog -> blogname ) > 18 )
2010-10-29 15:17:22 +00:00
$marker = '...' ;
if ( empty ( $blog -> blogname ) )
$blogname = $blog -> domain ;
else
2010-12-10 18:47:21 +00:00
$blogname = substr ( $blog -> blogname , 0 , 18 ) . $marker ;
2010-10-29 15:17:22 +00:00
if ( ! isset ( $blog -> visible ) || $blog -> visible === true ) {
2010-11-11 18:48:38 +00:00
$wp_admin_bar -> add_menu ( array ( 'parent' => 'my-blogs' , 'id' => 'blog-' . $blog -> userblog_id , 'title' => $blavatar . $blogname , 'href' => get_admin_url ( $blog -> userblog_id ), ) );
$wp_admin_bar -> add_menu ( array ( 'parent' => 'blog-' . $blog -> userblog_id , 'id' => 'blog-' . $blog -> userblog_id . '-d' , 'title' => __ ( 'Dashboard' ), 'href' => get_admin_url ( $blog -> userblog_id ), ) );
2010-11-29 16:07:32 +00:00
if ( current_user_can_for_blog ( $blog -> userblog_id , 'edit_posts' ) ) {
$wp_admin_bar -> add_menu ( array ( 'parent' => 'blog-' . $blog -> userblog_id , 'id' => 'blog-' . $blog -> userblog_id . '-n' , 'title' => __ ( 'New Post' ), 'href' => get_admin_url ( $blog -> userblog_id , 'post-new.php' ), ) );
$wp_admin_bar -> add_menu ( array ( 'parent' => 'blog-' . $blog -> userblog_id , 'id' => 'blog-' . $blog -> userblog_id . '-c' , 'title' => __ ( 'Manage Comments' ), 'href' => get_admin_url ( $blog -> userblog_id , 'edit-comments.php' ), ) );
}
2010-11-11 18:48:38 +00:00
$wp_admin_bar -> add_menu ( array ( 'parent' => 'blog-' . $blog -> userblog_id , 'id' => 'blog-' . $blog -> userblog_id . '-v' , 'title' => __ ( 'Visit Site' ), 'href' => get_home_url ( $blog -> userblog_id ), ) );
2010-10-29 15:17:22 +00:00
}
2010-09-27 20:26:36 +00:00
}
}
/**
2010-10-09 12:22:00 +00:00
* Show the blavatar of the current site as a separator .
2010-10-28 08:31:36 +00:00
*
* @ since 3.1 . 0
2010-09-27 20:26:36 +00:00
*/
function wp_admin_bar_blog_separator () {
2010-10-28 08:31:36 +00:00
global $wp_admin_bar , $current_blog ;
2010-09-27 20:26:36 +00:00
$default = includes_url ( 'images/wpmini-blue.png' );
2010-10-28 08:31:36 +00:00
$wp_admin_bar -> add_menu ( array ( 'id' => 'blog' , 'title' => '<img class="avatar" src="' . $default . '" alt="' . esc_attr__ ( 'Current site avatar' ) . '" width="16" height="16" />' , 'href' => home_url (), ) );
2010-09-27 20:26:36 +00:00
}
2010-10-29 15:17:22 +00:00
2010-09-27 20:26:36 +00:00
/**
2010-10-29 15:17:22 +00:00
* Provide a shortlink .
2010-11-17 18:47:34 +00:00
*
2010-10-28 08:31:36 +00:00
* @ since 3.1 . 0
2010-09-27 20:26:36 +00:00
*/
2010-10-29 15:17:22 +00:00
function wp_admin_bar_shortlink_menu () {
2010-09-27 20:26:36 +00:00
global $wp_admin_bar ;
2010-10-29 15:17:22 +00:00
2010-10-29 13:58:14 +00:00
$short = wp_get_shortlink ( 0 , 'query' );
2010-10-29 15:17:22 +00:00
2010-10-29 13:58:14 +00:00
if ( ! empty ( $short ) )
2010-11-11 10:24:56 +00:00
$wp_admin_bar -> add_menu ( array ( 'id' => 'get-shortlink' , 'title' => __ ( 'Shortlink' ), 'href' => $short , ) );
2010-09-27 20:26:36 +00:00
}
/**
2010-10-28 08:31:36 +00:00
* Provide an edit link for posts and terms .
2010-11-17 18:47:34 +00:00
*
2010-10-28 08:31:36 +00:00
* @ since 3.1 . 0
2010-09-27 20:26:36 +00:00
*/
2010-10-29 15:17:22 +00:00
function wp_admin_bar_edit_menu () {
2010-10-31 11:02:17 +00:00
global $wp_admin_bar ;
2010-09-27 20:26:36 +00:00
2010-10-31 11:02:17 +00:00
$current_object = get_queried_object ();
2010-09-27 20:26:36 +00:00
2010-10-29 15:17:22 +00:00
if ( empty ( $current_object ) )
return ;
2010-09-27 20:26:36 +00:00
2010-10-28 08:31:36 +00:00
if ( ! empty ( $current_object -> post_type ) && ( $post_type_object = get_post_type_object ( $current_object -> post_type ) ) && current_user_can ( $post_type_object -> cap -> edit_post , $current_object -> ID ) ) {
2010-11-01 14:58:59 +00:00
$wp_admin_bar -> add_menu ( array ( 'id' => 'edit' , 'title' => $post_type_object -> labels -> edit_item , 'href' => get_edit_post_link ( $current_object -> ID ), ) );
2010-10-28 08:31:36 +00:00
} elseif ( ! empty ( $current_object -> taxonomy ) && ( $tax = get_taxonomy ( $current_object -> taxonomy ) ) && current_user_can ( $tax -> cap -> edit_terms ) ) {
2010-11-01 14:58:59 +00:00
$wp_admin_bar -> add_menu ( array ( 'id' => 'edit' , 'title' => $tax -> labels -> edit_item , 'href' => get_edit_term_link ( $current_object -> term_id , $current_object -> taxonomy ), ) );
2010-10-28 08:31:36 +00:00
}
2010-09-27 20:26:36 +00:00
}
2010-10-29 15:17:22 +00:00
function wp_admin_bar_new_content_menu () {
global $wp_admin_bar ;
2010-11-01 14:58:59 +00:00
$actions = array ();
2010-11-18 09:01:07 +00:00
foreach ( ( array ) get_post_types ( array ( 'show_ui' => true ), 'objects' ) as $ptype_obj ) {
if ( true !== $ptype_obj -> show_in_menu || ! current_user_can ( $ptype_obj -> cap -> edit_posts ) )
2010-11-01 14:58:59 +00:00
continue ;
2010-11-18 09:51:50 +00:00
$actions [ 'post-new.php?post_type=' . $ptype_obj -> name ] = array ( $ptype_obj -> labels -> singular_name , $ptype_obj -> cap -> edit_posts , 'new-' . $ptype_obj -> name );
2010-10-29 15:17:22 +00:00
}
2010-11-01 14:58:59 +00:00
if ( empty ( $actions ) )
2010-10-29 15:17:22 +00:00
return ;
2010-11-29 16:16:29 +00:00
$wp_admin_bar -> add_menu ( array ( 'id' => 'new-content' , 'title' => _x ( 'Add New' , 'admin bar menu group label' ), 'href' => admin_url ( array_shift ( array_keys ( $actions ) ) ), ) );
2010-10-29 15:17:22 +00:00
foreach ( $actions as $link => $action ) {
$wp_admin_bar -> add_menu ( array ( 'parent' => 'new-content' , 'id' => $action [ 2 ], 'title' => $action [ 0 ], 'href' => admin_url ( $link ) ) );
}
}
function wp_admin_bar_comments_menu () {
global $wp_admin_bar ;
if ( ! current_user_can ( 'edit_posts' ) )
return ;
$awaiting_mod = wp_count_comments ();
$awaiting_mod = $awaiting_mod -> moderated ;
2010-12-08 09:49:56 +00:00
$awaiting_mod = $awaiting_mod ? " <span id='ab-awaiting-mod'><span class='pending-count'> " . number_format_i18n ( $awaiting_mod ) . " </span></span> " : '' ;
2010-12-08 08:50:24 +00:00
$wp_admin_bar -> add_menu ( array ( 'id' => 'comments' , 'title' => sprintf ( __ ( 'Comments %s' ), $awaiting_mod ), 'href' => admin_url ( 'edit-comments.php' ) ) );
2010-10-29 15:17:22 +00:00
}
2010-10-29 15:26:36 +00:00
function wp_admin_bar_appearance_menu () {
global $wp_admin_bar ;
2010-11-11 20:02:52 +00:00
if ( ! current_user_can ( 'switch_themes' ) )
2010-10-29 15:26:36 +00:00
return ;
$wp_admin_bar -> add_menu ( array ( 'id' => 'appearance' , 'title' => __ ( 'Appearance' ), 'href' => admin_url ( 'themes.php' ) ) );
if ( ! current_user_can ( 'edit_theme_options' ) )
return ;
if ( current_theme_supports ( 'widgets' ) )
$wp_admin_bar -> add_menu ( array ( 'parent' => 'appearance' , 'id' => 'widgets' , 'title' => __ ( 'Widgets' ), 'href' => admin_url ( 'widgets.php' ) ) );
if ( current_theme_supports ( 'menus' ) || current_theme_supports ( 'widgets' ) )
$wp_admin_bar -> add_menu ( array ( 'parent' => 'appearance' , 'id' => 'menus' , 'title' => __ ( 'Menus' ), 'href' => admin_url ( 'nav-menus.php' ) ) );
}
2010-10-29 15:36:45 +00:00
function wp_admin_bar_updates_menu () {
global $wp_admin_bar ;
if ( ! current_user_can ( 'install_plugins' ) )
return ;
$plugin_update_count = $theme_update_count = $wordpress_update_count = 0 ;
$update_plugins = get_site_transient ( 'update_plugins' );
if ( ! empty ( $update_plugins -> response ) )
$plugin_update_count = count ( $update_plugins -> response );
$update_themes = get_site_transient ( 'update_themes' );
if ( ! empty ( $update_themes -> response ) )
$theme_update_count = count ( $update_themes -> response );
/* @ todo get_core_updates () is only available on admin page loads
$update_wordpress = get_core_updates ( array ( 'dismissed' => false ) );
if ( ! empty ( $update_wordpress ) && ! in_array ( $update_wordpress [ 0 ] -> response , array ( 'development' , 'latest' ) ) )
$wordpress_update_count = 1 ;
*/
2010-11-17 18:47:34 +00:00
2010-10-29 15:36:45 +00:00
$update_count = $plugin_update_count + $theme_update_count + $wordpress_update_count ;
if ( ! $update_count )
return ;
$update_title = array ();
if ( $wordpress_update_count )
$update_title [] = sprintf ( __ ( '%d WordPress Update' ), $wordpress_update_count );
if ( $plugin_update_count )
$update_title [] = sprintf ( _n ( '%d Plugin Update' , '%d Plugin Updates' , $plugin_update_count ), $plugin_update_count );
if ( $theme_update_count )
$update_title [] = sprintf ( _n ( '%d Theme Update' , '%d Themes Updates' , $theme_update_count ), $theme_update_count );
$update_title = ! empty ( $update_title ) ? esc_attr ( implode ( ', ' , $update_title )) : '' ;
2010-12-08 08:50:24 +00:00
$update_title = " <span title=' $update_title '> " ;
$update_title .= sprintf ( __ ( 'Updates %s' ), " <span id='ab-updates' class='update-count'> " . number_format_i18n ( $update_count ) . '</span>' );
$update_title .= '</span>' ;
2010-10-29 15:36:45 +00:00
2010-12-06 15:41:19 +00:00
$href = is_multisite () ? network_admin_url ( 'update-core.php' ) : admin_url ( 'update-core.php' );
$wp_admin_bar -> add_menu ( array ( 'id' => 'updates' , 'title' => $update_title , 'href' => $href ) );
2010-10-29 15:36:45 +00:00
}
2010-09-27 20:26:36 +00:00
/**
2010-10-28 08:31:36 +00:00
* Style and scripts for the admin bar .
*
* @ since 3.1 . 0
*
2010-09-27 20:26:36 +00:00
*/
2010-12-06 04:51:52 +00:00
function wp_admin_bar_header () { ?>
2010-11-30 21:50:57 +00:00
< style type = " text/css " media = " print " > #wpadminbar { display:none; }</style>
2010-12-06 04:51:52 +00:00
< ? php
2010-11-30 21:50:57 +00:00
}
/**
* Default admin bar callback .
*
* @ since 3.1 . 0
*
*/
2010-12-06 04:51:52 +00:00
function _admin_bar_bump_cb () { ?>
2010-11-30 21:50:57 +00:00
< style type = " text/css " > body { padding - top : 28 px ! important ; } </ style >
2010-12-06 04:51:52 +00:00
< ? php
2010-10-28 08:31:36 +00:00
}
2010-09-27 20:26:36 +00:00
/**
2010-10-28 08:31:36 +00:00
* Determine whether the admin bar should be showing .
*
* @ since 3.1 . 0
*
* @ return bool Whether the admin bar should be showing .
2010-09-27 20:26:36 +00:00
*/
2010-10-28 08:31:36 +00:00
function is_admin_bar_showing () {
global $show_admin_bar ;
2010-11-17 18:47:34 +00:00
2010-11-06 09:41:03 +00:00
/* For all these types of request we never want an admin bar period */
if ( defined ( 'XMLRPC_REQUEST' ) || defined ( 'APP_REQUEST' ) || defined ( 'DOING_AJAX' ) || defined ( 'IFRAME_REQUEST' ) )
return false ;
2010-11-17 18:47:34 +00:00
2010-10-28 08:31:36 +00:00
if ( ! isset ( $show_admin_bar ) || null === $show_admin_bar ) {
2010-11-06 09:41:03 +00:00
if ( ! is_user_logged_in () || ( is_admin () && ! is_multisite () ) ) {
2010-10-28 08:31:36 +00:00
$show_admin_bar = false ;
2010-11-06 09:41:03 +00:00
} else {
$show_admin_bar = true ;
}
2010-10-28 08:31:36 +00:00
}
2010-09-27 20:26:36 +00:00
2010-10-28 08:31:36 +00:00
$show_admin_bar = apply_filters ( 'show_admin_bar' , $show_admin_bar );
return $show_admin_bar ;
}
?>