2010-09-27 22:26:36 +02:00
< ? php
/**
* Admin Bar
*
* This code handles the building and rendering of the press bar .
*/
2010-11-17 19:47:34 +01:00
2010-09-27 22:26:36 +02:00
/**
2010-10-28 10:31:36 +02: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 22:26:36 +02:00
*/
function wp_admin_bar_init () {
2010-10-28 10:31:36 +02:00
global $wp_admin_bar ;
2010-09-27 22:26:36 +02:00
2010-10-28 10:31:36 +02:00
if ( ! is_admin_bar_showing () )
2010-09-27 22:26:36 +02:00
return false ;
/* Load the admin bar class code ready for instantiation */
2010-10-30 08:40:04 +02:00
require ( ABSPATH . WPINC . '/class-wp-admin-bar.php' );
2010-09-27 22:26:36 +02:00
2010-10-28 10:31:36 +02:00
/* Instantiate the admin bar */
$admin_bar_class = apply_filters ( 'wp_admin_bar_class' , 'WP_Admin_Bar' );
2010-11-17 19:47:34 +01:00
if ( class_exists ( $admin_bar_class ) )
2010-10-28 10:31:36 +02:00
$wp_admin_bar = new $admin_bar_class ;
else
return false ;
2010-11-17 19:47:34 +01:00
2010-10-28 10:31:36 +02:00
$wp_admin_bar -> initialize ();
$wp_admin_bar -> add_menus ();
2010-10-20 15:07:54 +02:00
2010-10-28 10:31:36 +02:00
return true ;
2010-09-27 22:26:36 +02: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 22:51:12 +01:00
* It includes the action " admin_bar_menu " which should be used to hook in and
2010-09-27 22:26:36 +02: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 10:31:36 +02:00
*
* @ since 3.1 . 0
2010-09-27 22:26:36 +02:00
*/
function wp_admin_bar_render () {
global $wp_admin_bar ;
2010-10-28 10:31:36 +02:00
if ( ! is_object ( $wp_admin_bar ) )
2010-09-27 22:26:36 +02:00
return false ;
2010-10-23 21:49:25 +02:00
2010-09-27 22:26:36 +02:00
$wp_admin_bar -> load_user_locale_translations ();
2010-12-15 18:33:02 +01:00
do_action_ref_array ( 'admin_bar_menu' , array ( & $wp_admin_bar ) );
2010-11-11 20:11:12 +01:00
2010-09-27 22:26:36 +02:00
do_action ( 'wp_before_admin_bar_render' );
$wp_admin_bar -> render ();
do_action ( 'wp_after_admin_bar_render' );
2010-11-17 19:47:34 +01:00
2010-09-27 22:26:36 +02: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 );
/**
2010-10-28 10:31:36 +02:00
* Add the " My Account " menu and all submenus .
*
* @ since 3.1 . 0
2010-09-27 22:26:36 +02:00
*/
function wp_admin_bar_my_account_menu () {
2010-10-29 17:17:22 +02:00
global $wp_admin_bar , $user_identity ;
2010-09-27 22:26:36 +02:00
2010-10-29 19:48:53 +02:00
$user_id = get_current_user_id ();
2010-11-17 19:47:34 +01:00
2010-11-11 12:49:37 +01:00
if ( 0 != $user_id ) {
/* Add the 'My Account' menu */
2010-12-13 21:35:28 +01:00
$avatar = get_avatar ( get_current_user_id (), 16 );
2010-12-14 14:42:56 +01:00
$id = ( ! empty ( $avatar ) ) ? 'my-account-with-avatar' : 'my-account' ;
$wp_admin_bar -> add_menu ( array ( 'id' => $id , 'title' => $avatar . $user_identity , 'href' => get_edit_profile_url ( $user_id ) ) );
2010-11-17 19:47:34 +01:00
2010-11-11 12:49:37 +01:00
/* Add the "My Account" sub menus */
2010-12-14 14:42:56 +01:00
$wp_admin_bar -> add_menu ( array ( 'parent' => $id , 'title' => __ ( 'Edit My Profile' ), 'href' => get_edit_profile_url ( $user_id ) ) );
2010-11-11 12:49:37 +01:00
if ( is_multisite () )
2010-12-14 14:42:56 +01:00
$wp_admin_bar -> add_menu ( array ( 'parent' => $id , 'title' => __ ( 'Dashboard' ), 'href' => get_dashboard_url ( $user_id ), ) );
2010-11-11 12:49:37 +01:00
else
2010-12-14 14:42:56 +01:00
$wp_admin_bar -> add_menu ( array ( 'parent' => $id , 'title' => __ ( 'Dashboard' ), 'href' => admin_url (), ) );
2010-12-15 09:38:49 +01:00
$wp_admin_bar -> add_menu ( array ( 'parent' => $id , 'title' => __ ( 'Log Out' ), 'href' => wp_logout_url (), ) );
2010-11-11 12:49:37 +01:00
}
2010-09-27 22:26:36 +02:00
}
/**
2010-10-28 10:31:36 +02:00
* Add the " My Sites/[Site Name] " menu and all submenus .
*
* @ since 3.1 . 0
2010-09-27 22:26:36 +02:00
*/
2010-11-11 19:48:38 +01:00
function wp_admin_bar_my_sites_menu () {
2010-09-27 22:26:36 +02:00
global $wpdb , $wp_admin_bar ;
2010-11-11 21:02:52 +01:00
/* Add the 'My Sites' menu if the user has more than one site. */
2010-10-29 17:17:22 +02:00
if ( count ( $wp_admin_bar -> user -> blogs ) <= 1 )
return ;
2010-09-27 22:26:36 +02:00
2010-10-29 17:17:22 +02:00
$wp_admin_bar -> add_menu ( array ( 'id' => 'my-blogs' , 'title' => __ ( 'My Sites' ), 'href' => $wp_admin_bar -> user -> account_domain , ) );
2010-09-27 22:26:36 +02:00
2010-10-29 17:17:22 +02:00
$default = includes_url ( 'images/wpmini-blue.png' );
2010-10-28 10:31:36 +02:00
2010-10-29 17:17:22 +02: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 19:47:21 +01:00
$blavatar = '<img src="' . esc_url ( $default ) . '" alt="' . esc_attr__ ( 'Blavatar' ) . '" width="16" height="16" class="blavatar"/>' ;
2010-10-29 17:17:22 +02:00
2010-12-15 17:48:06 +01:00
$blogname = empty ( $blog -> blogname ) ? $blog -> domain : $blog -> blogname ;
if ( strlen ( $blogname ) > 15 )
$blogname = substr ( $blogname , 0 , 15 ) . '…' ;
2010-10-29 17:17:22 +02:00
2010-12-15 17:48:06 +01: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-11 19:48:38 +01:00
2010-12-15 17:48:06 +01: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-10-29 17:17:22 +02:00
}
2010-12-15 17:48:06 +01: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-09-27 22:26:36 +02:00
}
}
/**
2010-10-29 17:17:22 +02:00
* Provide a shortlink .
2010-11-17 19:47:34 +01:00
*
2010-10-28 10:31:36 +02:00
* @ since 3.1 . 0
2010-09-27 22:26:36 +02:00
*/
2010-10-29 17:17:22 +02:00
function wp_admin_bar_shortlink_menu () {
2010-09-27 22:26:36 +02:00
global $wp_admin_bar ;
2010-10-29 17:17:22 +02:00
2010-10-29 15:58:14 +02:00
$short = wp_get_shortlink ( 0 , 'query' );
2010-10-29 17:17:22 +02:00
2010-10-29 15:58:14 +02:00
if ( ! empty ( $short ) )
2010-11-11 11:24:56 +01:00
$wp_admin_bar -> add_menu ( array ( 'id' => 'get-shortlink' , 'title' => __ ( 'Shortlink' ), 'href' => $short , ) );
2010-09-27 22:26:36 +02:00
}
/**
2010-10-28 10:31:36 +02:00
* Provide an edit link for posts and terms .
2010-11-17 19:47:34 +01:00
*
2010-10-28 10:31:36 +02:00
* @ since 3.1 . 0
2010-09-27 22:26:36 +02:00
*/
2010-10-29 17:17:22 +02:00
function wp_admin_bar_edit_menu () {
2010-10-31 12:02:17 +01:00
global $wp_admin_bar ;
2010-09-27 22:26:36 +02:00
2010-10-31 12:02:17 +01:00
$current_object = get_queried_object ();
2010-09-27 22:26:36 +02:00
2010-10-29 17:17:22 +02:00
if ( empty ( $current_object ) )
return ;
2010-09-27 22:26:36 +02:00
2010-10-28 10:31:36 +02: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 15:58:59 +01: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 10:31:36 +02:00
} elseif ( ! empty ( $current_object -> taxonomy ) && ( $tax = get_taxonomy ( $current_object -> taxonomy ) ) && current_user_can ( $tax -> cap -> edit_terms ) ) {
2010-11-01 15:58:59 +01: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 10:31:36 +02:00
}
2010-09-27 22:26:36 +02:00
}
2010-12-13 21:35:28 +01:00
/**
* Add " Add New " menu .
*
* @ since 3.1 . 0
*/
2010-10-29 17:17:22 +02:00
function wp_admin_bar_new_content_menu () {
global $wp_admin_bar ;
2010-11-01 15:58:59 +01:00
$actions = array ();
2010-11-18 10:01:07 +01: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 15:58:59 +01:00
continue ;
2010-12-13 21:35:28 +01:00
2010-11-18 10:51:50 +01: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 17:17:22 +02:00
}
2010-11-01 15:58:59 +01:00
if ( empty ( $actions ) )
2010-10-29 17:17:22 +02:00
return ;
2010-11-29 17:16:29 +01: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 17:17:22 +02: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 ) ) );
}
}
2010-12-13 21:35:28 +01:00
/**
* Add edit comments link with awaiting moderation count bubble .
*
* @ since 3.1 . 0
*/
2010-10-29 17:17:22 +02:00
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 10:49:56 +01:00
$awaiting_mod = $awaiting_mod ? " <span id='ab-awaiting-mod'><span class='pending-count'> " . number_format_i18n ( $awaiting_mod ) . " </span></span> " : '' ;
2010-12-08 09:50:24 +01:00
$wp_admin_bar -> add_menu ( array ( 'id' => 'comments' , 'title' => sprintf ( __ ( 'Comments %s' ), $awaiting_mod ), 'href' => admin_url ( 'edit-comments.php' ) ) );
2010-10-29 17:17:22 +02:00
}
2010-12-13 21:35:28 +01:00
/**
* Add " Appearance " menu with widget and nav menu submenu .
*
* @ since 3.1 . 0
*/
2010-10-29 17:26:36 +02:00
function wp_admin_bar_appearance_menu () {
global $wp_admin_bar ;
2010-11-11 21:02:52 +01:00
if ( ! current_user_can ( 'switch_themes' ) )
2010-10-29 17:26:36 +02: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-12-13 21:35:28 +01:00
/**
* Provide an update link if theme / plugin / core updates are available .
*
* @ since 3.1 . 0
*/
2010-10-29 17:36:45 +02: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 19:47:34 +01:00
2010-10-29 17:36:45 +02: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 09:50:24 +01: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 17:36:45 +02:00
2010-12-16 10:31:42 +01:00
$wp_admin_bar -> add_menu ( array ( 'id' => 'updates' , 'title' => $update_title , 'href' => network_admin_url ( 'update-core.php' ) ) );
2010-10-29 17:36:45 +02:00
}
2010-09-27 22:26:36 +02:00
/**
2010-10-28 10:31:36 +02:00
* Style and scripts for the admin bar .
*
* @ since 3.1 . 0
*
2010-09-27 22:26:36 +02:00
*/
2010-12-06 05:51:52 +01:00
function wp_admin_bar_header () { ?>
2010-11-30 22:50:57 +01:00
< style type = " text/css " media = " print " > #wpadminbar { display:none; }</style>
2010-12-06 05:51:52 +01:00
< ? php
2010-11-30 22:50:57 +01:00
}
/**
* Default admin bar callback .
*
* @ since 3.1 . 0
*
*/
2010-12-06 05:51:52 +01:00
function _admin_bar_bump_cb () { ?>
2010-11-30 22:50:57 +01:00
< style type = " text/css " > body { padding - top : 28 px ! important ; } </ style >
2010-12-06 05:51:52 +01:00
< ? php
2010-10-28 10:31:36 +02:00
}
2010-09-27 22:26:36 +02:00
2010-12-17 22:48:30 +01:00
/**
* Set the display status of the admin bar
*
* This can be called immediately upon plugin load . It does not need to be called from a function hooked to the init action .
*
* @ since 3.1 . 0
*
* @ param bool $show Whether to allow the admin bar to show .
* @ return void
*/
function show_admin_bar ( $show ) {
global $show_admin_bar ;
$show_admin_bar = ( bool ) $show ;
// Remove the object if we are not going to be showing
// Otherwise you have to call this function prior to the init hook for it to work!
if ( ! $show_admin_bar && isset ( $GLOBALS [ 'wp_admin_bar' ] ) )
$GLOBALS [ 'wp_admin_bar' ] = null ;
}
2010-09-27 22:26:36 +02:00
/**
2010-10-28 10:31:36 +02: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 22:26:36 +02:00
*/
2010-10-28 10:31:36 +02:00
function is_admin_bar_showing () {
global $show_admin_bar ;
2010-11-17 19:47:34 +01:00
2010-11-06 10:41:03 +01: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 19:47:34 +01:00
2010-12-17 09:32:43 +01:00
if ( ! isset ( $show_admin_bar ) ) {
2010-12-17 22:48:30 +01:00
if ( ! is_user_logged_in () ) {
2010-10-28 10:31:36 +02:00
$show_admin_bar = false ;
2010-11-06 10:41:03 +01:00
} else {
2010-12-17 22:48:30 +01:00
$context = is_admin () ? 'admin' : 'front' ;
$show_admin_bar = _get_admin_bar_pref ( $context );
2010-11-06 10:41:03 +01:00
}
2010-10-28 10:31:36 +02:00
}
2010-09-27 22:26:36 +02:00
2010-10-28 10:31:36 +02:00
$show_admin_bar = apply_filters ( 'show_admin_bar' , $show_admin_bar );
return $show_admin_bar ;
}
2010-12-17 22:48:30 +01:00
/**
* Retrieve the admin bar display preference of a user based on context .
*
* @ since 3.1 . 0
* @ access private
*
* @ param string $context Context of this preference check , either 'admin' or 'front'
* @ param int $user Optional . ID of the user to check , defaults to 0 for current user
* @ return bool Whether the admin bar should be showing for this user
*/
function _get_admin_bar_pref ( $context , $user = 0 ) {
$pref = get_user_option ( " show_admin_bar_ { $context } " , $user );
if ( false === $pref )
return 'admin' != $context || is_multisite ();
return 'true' === $pref ;
}
2010-10-28 10:31:36 +02:00
?>