Ticket #21871: 21871-guid.diff
| File 21871-guid.diff, 2.9 KB (added by , 14 years ago) |
|---|
-
wp-admin/includes/screen.php
237 237 /** 238 238 * The unique ID of the screen. 239 239 * 240 * @since 3.5.0 241 * @var string 242 * @access public 243 */ 244 public $guid = ''; 245 246 /** 247 * The somewhat unique ID of the screen. 248 * 240 249 * @since 3.3.0 241 250 * @var string 242 251 * @access public … … 391 400 if ( is_a( $hook_name, 'WP_Screen' ) ) 392 401 return $hook_name; 393 402 403 if ( false !== strpos( $hook_name, ':' ) ) 404 $_screen = WP_Screen::get_from_guid( $hook_name ); 405 else 406 $_screen = WP_Screen::get_from_hook( $hook_name ); 407 408 if ( isset( self::$_registry[ $id ] ) ) { 409 $screen = self::$_registry[ $id ]; 410 if ( $screen === get_current_screen() ) 411 return $screen; 412 unset( $_screen->id ); 413 } else { 414 $screen = new WP_Screen(); 415 } 416 417 foreach ( get_object_vars( $_screen ) as $property => $value ) { 418 $screen->$property = $value; 419 } 420 421 self::$_registry[ $id ] = $screen; 422 423 return $screen; 424 } 425 426 public static function get_from_guid( $guid ) { 427 $screen = new stdClass; 428 429 // admin:page:arg1:arg2:arg3:... 430 $screen->guid = $guid; 431 $bits = explode( ':', $guid ); 432 $screen->in_admin = $bits[0]; 433 $screen->is_user = ( 'user' == $in_admin ); 434 $screen->is_network = ( 'network' == $in_admin ); 435 $screen->base = $screen->id = $bits[1]; 436 437 switch ( $id ) { 438 case 'edit-tags': 439 $screen->taxonomy = $bits[2]; 440 $screen->post_type = $bits[3]; 441 $screen->id = 'edit' . $taxonomy; 442 break; 443 case 'edit': 444 $screen->post_type = $bits[2]; 445 $screen->id = 'edit-' . $screen->post_type; 446 break; 447 case 'post': 448 $screen->post_type = $bits[2]; 449 $screen->action = 'add'; 450 break; 451 } 452 453 return $screen; 454 } 455 456 public static function get_from_hook( $hook_name = '' ) { 394 457 $post_type = $taxonomy = null; 395 458 $in_admin = false; 396 459 $action = ''; … … 437 500 438 501 if ( ! $in_admin ) 439 502 $in_admin = 'site'; 440 } else {503 } elseif ( ! $in_admin ) { 441 504 if ( defined( 'WP_NETWORK_ADMIN' ) && WP_NETWORK_ADMIN ) 442 505 $in_admin = 'network'; 443 506 elseif ( defined( 'WP_USER_ADMIN' ) && WP_USER_ADMIN ) … … 508 571 $base .= '-user'; 509 572 } 510 573 511 if ( isset( self::$_registry[ $id ] ) ) { 512 $screen = self::$_registry[ $id ]; 513 if ( $screen === get_current_screen() ) 514 return $screen; 515 } else { 516 $screen = new WP_Screen(); 517 $screen->id = $id; 518 } 574 // @todo create guid 519 575 576 $screen = new stdClass; 577 $screen->id = $id; 520 578 $screen->base = $base; 521 579 $screen->action = $action; 522 580 $screen->post_type = (string) $post_type; … … 525 583 $screen->is_network = ( 'network' == $in_admin ); 526 584 $screen->in_admin = $in_admin; 527 585 528 self::$_registry[ $id ] = $screen;529 530 586 return $screen; 531 }587 } 532 588 533 589 /** 534 590 * Makes the screen object the current screen.