Ticket #21871: 21871-guid.2.diff
File 21871-guid.2.diff, 3.1 KB (added by , 8 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 437 switch ( $screen->id ) { 438 case 'edit-tags': 439 $screen->taxonomy = $bits[2]; 440 $screen->post_type = $bits[3]; 441 $screen->id = 'edit-' . $screen->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 case 'media': 452 case 'link': 453 case 'user': 454 $screen->action = 'add'; 455 break; 456 } 457 458 if ( 'link' == $screen->post_type ) 459 $screen->post_type = ''; 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; 518 } 582 // @todo create guid 519 583 584 $screen = new stdClass; 585 $screen->id = $id; 520 586 $screen->base = $base; 521 587 $screen->action = $action; 522 588 $screen->post_type = (string) $post_type; … … 525 591 $screen->is_network = ( 'network' == $in_admin ); 526 592 $screen->in_admin = $in_admin; 527 593 528 self::$_registry[ $id ] = $screen;529 530 594 return $screen; 531 595 } 532 596 533 597 /** 534 598 * Makes the screen object the current screen.