| | 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 = '' ) { |