| [ XREF Home ] [ Index ] |
PHP Cross Reference of WordPress TrunkProvided by Yoast |
[Summary view] [Print] [Text view]
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 $wp_admin_bar->load_user_locale_translations(); 59 60 do_action_ref_array( 'admin_bar_menu', array( &$wp_admin_bar ) ); 61 62 do_action( 'wp_before_admin_bar_render' ); 63 64 $wp_admin_bar->render(); 65 66 do_action( 'wp_after_admin_bar_render' ); 67 68 $wp_admin_bar->unload_user_locale_translations(); 69 } 70 add_action( 'wp_footer', 'wp_admin_bar_render', 1000 ); 71 add_action( 'admin_footer', 'wp_admin_bar_render', 1000 ); 72 73 /** 74 * Add the "My Account" menu and all submenus. 75 * 76 * @since 3.1.0 77 */ 78 function wp_admin_bar_my_account_menu( $wp_admin_bar ) { 79 global $user_identity; 80 81 $user_id = get_current_user_id(); 82 83 if ( 0 != $user_id ) { 84 /* Add the 'My Account' menu */ 85 $avatar = get_avatar( get_current_user_id(), 16 ); 86 $id = ( ! empty( $avatar ) ) ? 'my-account-with-avatar' : 'my-account'; 87 88 $wp_admin_bar->add_menu( array( 'id' => $id, 'title' => $avatar . $user_identity, 'href' => get_edit_profile_url( $user_id ) ) ); 89 90 /* Add the "My Account" sub menus */ 91 $wp_admin_bar->add_menu( array( 'parent' => $id, 'title' => __( 'Edit My Profile' ), 'href' => get_edit_profile_url( $user_id ) ) ); 92 if ( is_multisite() ) 93 $wp_admin_bar->add_menu( array( 'parent' => $id, 'title' => __( 'Dashboard' ), 'href' => get_dashboard_url( $user_id ) ) ); 94 else 95 $wp_admin_bar->add_menu( array( 'parent' => $id, 'title' => __( 'Dashboard' ), 'href' => admin_url() ) ); 96 $wp_admin_bar->add_menu( array( 'parent' => $id, 'title' => __( 'Log Out' ), 'href' => wp_logout_url() ) ); 97 } 98 } 99 100 /** 101 * Add the "My Sites/[Site Name]" menu and all submenus. 102 * 103 * @since 3.1.0 104 */ 105 function wp_admin_bar_my_sites_menu( $wp_admin_bar ) { 106 global $wpdb; 107 108 /* Add the 'My Sites' menu if the user has more than one site. */ 109 if ( count( $wp_admin_bar->user->blogs ) <= 1 ) 110 return; 111 112 $wp_admin_bar->add_menu( array( 'id' => 'my-blogs', 'title' => __( 'My Sites' ), 'href' => admin_url( 'my-sites.php' ) ) ); 113 114 $default = includes_url('images/wpmini-blue.png'); 115 116 foreach ( (array) $wp_admin_bar->user->blogs as $blog ) { 117 // @todo Replace with some favicon lookup. 118 //$blavatar = '<img src="' . esc_url( blavatar_url( blavatar_domain( $blog->siteurl ), 'img', 16, $default ) ) . '" alt="Blavatar" width="16" height="16" />'; 119 $blavatar = '<img src="' . esc_url($default) . '" alt="' . esc_attr__( 'Blavatar' ) . '" width="16" height="16" class="blavatar"/>'; 120 121 $blogname = empty( $blog->blogname ) ? $blog->domain : $blog->blogname; 122 123 $wp_admin_bar->add_menu( array( 'parent' => 'my-blogs', 'id' => 'blog-' . $blog->userblog_id, 'title' => $blavatar . $blogname, 'href' => get_admin_url($blog->userblog_id) ) ); 124 $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) ) ); 125 126 if ( current_user_can_for_blog( $blog->userblog_id, 'edit_posts' ) ) { 127 $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') ) ); 128 $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') ) ); 129 } 130 131 $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) ) ); 132 } 133 } 134 135 /** 136 * Provide a shortlink. 137 * 138 * @since 3.1.0 139 */ 140 function wp_admin_bar_shortlink_menu( $wp_admin_bar ) { 141 $short = wp_get_shortlink( 0, 'query' ); 142 $id = 'get-shortlink'; 143 144 if ( empty( $short ) ) 145 return; 146 147 $html = '<input class="shortlink-input" type="text" readonly="readonly" value="' . esc_attr( $short ) . '" />'; 148 149 $wp_admin_bar->add_menu( array( 150 'id' => $id, 151 'title' => __( 'Shortlink' ), 152 'href' => $short, 153 'meta' => array( 'html' => $html ), 154 ) ); 155 } 156 157 /** 158 * Provide an edit link for posts and terms. 159 * 160 * @since 3.1.0 161 */ 162 function wp_admin_bar_edit_menu( $wp_admin_bar ) { 163 $current_object = get_queried_object(); 164 165 if ( empty($current_object) ) 166 return; 167 168 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 ) && ( $post_type_object->show_ui || 'attachment' == $current_object->post_type ) ) { 169 $wp_admin_bar->add_menu( array( 'id' => 'edit', 'title' => $post_type_object->labels->edit_item, 'href' => get_edit_post_link( $current_object->ID ) ) ); 170 } elseif ( ! empty( $current_object->taxonomy ) && ( $tax = get_taxonomy( $current_object->taxonomy ) ) && current_user_can( $tax->cap->edit_terms ) && $tax->show_ui ) { 171 $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 ) ) ); 172 } 173 } 174 175 /** 176 * Add "Add New" menu. 177 * 178 * @since 3.1.0 179 */ 180 function wp_admin_bar_new_content_menu( $wp_admin_bar ) { 181 $actions = array(); 182 foreach ( (array) get_post_types( array( 'show_ui' => true ), 'objects' ) as $ptype_obj ) { 183 if ( true !== $ptype_obj->show_in_menu || ! current_user_can( $ptype_obj->cap->edit_posts ) ) 184 continue; 185 186 $actions[ 'post-new.php?post_type=' . $ptype_obj->name ] = array( $ptype_obj->labels->singular_name, $ptype_obj->cap->edit_posts, 'new-' . $ptype_obj->name ); 187 } 188 189 if ( current_user_can( 'upload_files' ) ) 190 $actions[ 'upload.php' ] = array( __( 'Media' ), 'upload_files', 'new-media' ); 191 192 if ( current_user_can( 'manage_links' ) ) 193 $actions[ 'link-add.php' ] = array( __( 'Link' ), 'manage_links', 'new-link' ); 194 195 if ( current_user_can( 'create_users' ) || current_user_can( 'promote_users' ) ) 196 $actions[ 'user-new.php' ] = array( __( 'User' ), 'create_users', 'new-user' ); 197 198 if ( ! is_multisite() && current_user_can( 'install_themes' ) ) 199 $actions[ 'theme-install.php' ] = array( __( 'Theme' ), 'install_themes', 'new-theme' ); 200 201 if ( ! is_multisite() && current_user_can( 'install_plugins' ) ) 202 $actions[ 'plugin-install.php' ] = array( __( 'Plugin' ), 'install_plugins', 'new-plugin' ); 203 204 if ( empty( $actions ) ) 205 return; 206 207 $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 ) ) ) ) ); 208 209 foreach ( $actions as $link => $action ) { 210 $wp_admin_bar->add_menu( array( 'parent' => 'new-content', 'id' => $action[2], 'title' => $action[0], 'href' => admin_url($link) ) ); 211 } 212 } 213 214 /** 215 * Add edit comments link with awaiting moderation count bubble. 216 * 217 * @since 3.1.0 218 */ 219 function wp_admin_bar_comments_menu( $wp_admin_bar ) { 220 if ( !current_user_can('edit_posts') ) 221 return; 222 223 $awaiting_mod = wp_count_comments(); 224 $awaiting_mod = $awaiting_mod->moderated; 225 226 $awaiting_mod = $awaiting_mod ? "<span id='ab-awaiting-mod' class='pending-count'>" . number_format_i18n( $awaiting_mod ) . "</span>" : ''; 227 $wp_admin_bar->add_menu( array( 'id' => 'comments', 'title' => sprintf( __('Comments %s'), $awaiting_mod ), 'href' => admin_url('edit-comments.php') ) ); 228 } 229 230 /** 231 * Add "Appearance" menu with widget and nav menu submenu. 232 * 233 * @since 3.1.0 234 */ 235 function wp_admin_bar_appearance_menu( $wp_admin_bar ) { 236 // You can have edit_theme_options but not switch_themes. 237 if ( ! current_user_can('switch_themes') && ! current_user_can( 'edit_theme_options' ) ) 238 return; 239 240 $wp_admin_bar->add_menu( array( 'id' => 'appearance', 'title' => __('Appearance'), 'href' => admin_url('themes.php') ) ); 241 242 if ( ! current_user_can( 'edit_theme_options' ) ) 243 return; 244 245 if ( current_user_can( 'switch_themes' ) ) 246 $wp_admin_bar->add_menu( array( 'parent' => 'appearance', 'id' => 'themes', 'title' => __('Themes'), 'href' => admin_url('themes.php') ) ); 247 248 if ( current_theme_supports( 'widgets' ) ) 249 $wp_admin_bar->add_menu( array( 'parent' => 'appearance', 'id' => 'widgets', 'title' => __('Widgets'), 'href' => admin_url('widgets.php') ) ); 250 251 if ( current_theme_supports( 'menus' ) || current_theme_supports( 'widgets' ) ) 252 $wp_admin_bar->add_menu( array( 'parent' => 'appearance', 'id' => 'menus', 'title' => __('Menus'), 'href' => admin_url('nav-menus.php') ) ); 253 254 if ( current_theme_supports( 'custom-background' ) ) 255 $wp_admin_bar->add_menu( array( 'parent' => 'appearance', 'id' => 'background', 'title' => __('Background'), 'href' => admin_url('themes.php?page=custom-background') ) ); 256 257 if ( current_theme_supports( 'custom-header' ) ) 258 $wp_admin_bar->add_menu( array( 'parent' => 'appearance', 'id' => 'header', 'title' => __('Header'), 'href' => admin_url('themes.php?page=custom-header') ) ); 259 } 260 261 /** 262 * Provide an update link if theme/plugin/core updates are available. 263 * 264 * @since 3.1.0 265 */ 266 function wp_admin_bar_updates_menu( $wp_admin_bar ) { 267 if ( !current_user_can('install_plugins') ) 268 return; 269 270 $plugin_update_count = $theme_update_count = $wordpress_update_count = 0; 271 $update_plugins = get_site_transient( 'update_plugins' ); 272 if ( !empty($update_plugins->response) ) 273 $plugin_update_count = count( $update_plugins->response ); 274 $update_themes = get_site_transient( 'update_themes' ); 275 if ( !empty($update_themes->response) ) 276 $theme_update_count = count( $update_themes->response ); 277 /* @todo get_core_updates() is only available on admin page loads 278 $update_wordpress = get_core_updates( array('dismissed' => false) ); 279 if ( !empty($update_wordpress) && !in_array( $update_wordpress[0]->response, array('development', 'latest') ) ) 280 $wordpress_update_count = 1; 281 */ 282 283 $update_count = $plugin_update_count + $theme_update_count + $wordpress_update_count; 284 285 if ( !$update_count ) 286 return; 287 288 $update_title = array(); 289 if ( $wordpress_update_count ) 290 $update_title[] = sprintf(__('%d WordPress Update'), $wordpress_update_count); 291 if ( $plugin_update_count ) 292 $update_title[] = sprintf(_n('%d Plugin Update', '%d Plugin Updates', $plugin_update_count), $plugin_update_count); 293 if ( $theme_update_count ) 294 $update_title[] = sprintf(_n('%d Theme Update', '%d Themes Updates', $theme_update_count), $theme_update_count); 295 296 $update_title = !empty($update_title) ? esc_attr(implode(', ', $update_title)) : ''; 297 298 $update_title = "<span title='$update_title'>"; 299 $update_title .= sprintf( __('Updates %s'), "<span id='ab-updates' class='update-count'>" . number_format_i18n($update_count) . '</span>' ); 300 $update_title .= '</span>'; 301 302 $wp_admin_bar->add_menu( array( 'id' => 'updates', 'title' => $update_title, 'href' => network_admin_url( 'update-core.php' ) ) ); 303 } 304 305 /** 306 * Style and scripts for the admin bar. 307 * 308 * @since 3.1.0 309 * 310 */ 311 function wp_admin_bar_header() { ?> 312 <style type="text/css" media="print">#wpadminbar { display:none; }</style> 313 <?php 314 } 315 316 /** 317 * Default admin bar callback. 318 * 319 * @since 3.1.0 320 * 321 */ 322 function _admin_bar_bump_cb() { ?> 323 <style type="text/css"> 324 html { margin-top: 28px !important; } 325 * html body { margin-top: 28px !important; } 326 </style> 327 <?php 328 } 329 330 /** 331 * Set the display status of the admin bar 332 * 333 * This can be called immediately upon plugin load. It does not need to be called from a function hooked to the init action. 334 * 335 * @since 3.1.0 336 * 337 * @param bool $show Whether to allow the admin bar to show. 338 * @return void 339 */ 340 function show_admin_bar( $show ) { 341 global $show_admin_bar; 342 $show_admin_bar = (bool) $show; 343 } 344 345 /** 346 * Determine whether the admin bar should be showing. 347 * 348 * @since 3.1.0 349 * 350 * @return bool Whether the admin bar should be showing. 351 */ 352 function is_admin_bar_showing() { 353 global $show_admin_bar, $pagenow; 354 355 /* For all these types of request we never want an admin bar period */ 356 if ( defined('XMLRPC_REQUEST') || defined('APP_REQUEST') || defined('DOING_AJAX') || defined('IFRAME_REQUEST') ) 357 return false; 358 359 if ( ! isset( $show_admin_bar ) ) { 360 if ( ! is_user_logged_in() || 'wp-login.php' == $pagenow ) { 361 $show_admin_bar = false; 362 } else { 363 $context = is_admin() ? 'admin' : 'front'; 364 $show_admin_bar = _get_admin_bar_pref( $context ); 365 } 366 } 367 368 $show_admin_bar = apply_filters( 'show_admin_bar', $show_admin_bar ); 369 370 return $show_admin_bar; 371 } 372 373 /** 374 * Retrieve the admin bar display preference of a user based on context. 375 * 376 * @since 3.1.0 377 * @access private 378 * 379 * @param string $context Context of this preference check, either 'admin' or 'front' 380 * @param int $user Optional. ID of the user to check, defaults to 0 for current user 381 * @return bool Whether the admin bar should be showing for this user 382 */ 383 function _get_admin_bar_pref( $context, $user = 0 ) { 384 $pref = get_user_option( "show_admin_bar_{$context}", $user ); 385 if ( false === $pref ) 386 return 'admin' != $context || is_multisite(); 387 388 return 'true' === $pref; 389 } 390 391 ?>
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
| Generated: Wed Jun 1 08:30:02 2011 |
Cross-referenced by PHPXref 0.7 Provided by Yoast and awesome WordPress Hosting |