Ticket #21871: 21871-guid.3.diff
| File 21871-guid.3.diff, 3.4 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[ $_screen->id ] ) ) { 409 $screen = self::$_registry[ $_screen->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[ $_screen->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 $screen->taxonomy = ''; 437 $screen->post_type = ''; 438 439 switch ( $screen->id ) { 440 case 'edit-tags': 441 $screen->taxonomy = $bits[2]; 442 if ( ! empty( $bits[3] ) ) 443 $screen->post_type = $bits[3]; 444 $screen->id = 'edit-' . $screen->taxonomy; 445 break; 446 case 'edit': 447 $screen->post_type = $bits[2]; 448 $screen->id = 'edit-' . $screen->post_type; 449 break; 450 case 'post': 451 $screen->post_type = $bits[2]; 452 $screen->action = 'add'; 453 break; 454 case 'media': 455 case 'link': 456 case 'user': 457 $screen->action = 'add'; 458 break; 459 } 460 461 return $screen; 462 } 463 464 public static function get_from_hook( $hook_name = '' ) { 394 465 $post_type = $taxonomy = null; 395 466 $in_admin = false; 396 467 $action = ''; … … 437 508 438 509 if ( ! $in_admin ) 439 510 $in_admin = 'site'; 440 } else {511 } elseif ( ! $in_admin ) { 441 512 if ( defined( 'WP_NETWORK_ADMIN' ) && WP_NETWORK_ADMIN ) 442 513 $in_admin = 'network'; 443 514 elseif ( defined( 'WP_USER_ADMIN' ) && WP_USER_ADMIN ) … … 508 579 $base .= '-user'; 509 580 } 510 581 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; 582 // @todo create guid 583 $screen = new stdClass; 584 $screen->guid = $in_admin . ':' . $base; 585 586 switch ( $base ) { 587 case 'edit-tags': 588 $screen->guid .= ':' . $taxonomy; 589 if ( $post_type ) 590 $screen->guid .= ':' . $post_type; 591 break; 592 case 'edit': 593 case 'post': 594 $screen->guid .= ':' . $post_type; 595 break; 518 596 } 519 597 598 $screen->id = $id; 520 599 $screen->base = $base; 521 600 $screen->action = $action; 522 601 $screen->post_type = (string) $post_type; … … 525 604 $screen->is_network = ( 'network' == $in_admin ); 526 605 $screen->in_admin = $in_admin; 527 606 528 self::$_registry[ $id ] = $screen;529 530 607 return $screen; 531 }608 } 532 609 533 610 /** 534 611 * Makes the screen object the current screen.