Ticket #21871: 21871-guid.5.diff
| File 21871-guid.5.diff, 4.7 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 if ( 'site' != $screen->in_admin ) { 462 $screen->base .= '-' . $screen->in_admin; 463 $screen->id .= '-' . $screen->in_admin; 464 } 465 466 return $screen; 467 } 468 469 public static function get_from_hook( $hook_name = '' ) { 394 470 $post_type = $taxonomy = null; 395 471 $in_admin = false; 396 472 $action = ''; … … 408 484 if ( '.php' == substr( $id, -4 ) ) 409 485 $id = substr( $id, 0, -4 ); 410 486 411 if ( 'post-new' == $id || 'link-add' == $id || 'media-new' == $id || 'user-new' == $id ) {487 if ( 'post-new' == $id || 'link-add' == $id || 'media-new' == $id || 'user-new' == $id || 'site-new' == $id ) { 412 488 $id = substr( $id, 0, -4 ); 413 489 $action = 'add'; 414 490 } … … 437 513 438 514 if ( ! $in_admin ) 439 515 $in_admin = 'site'; 440 } else {516 } elseif ( ! $in_admin ) { 441 517 if ( defined( 'WP_NETWORK_ADMIN' ) && WP_NETWORK_ADMIN ) 442 518 $in_admin = 'network'; 443 519 elseif ( defined( 'WP_USER_ADMIN' ) && WP_USER_ADMIN ) … … 508 584 $base .= '-user'; 509 585 } 510 586 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; 587 // @todo create guid 588 $screen = new stdClass; 589 $screen->guid = $in_admin . ':' . $base; 590 591 switch ( $base ) { 592 case 'edit-tags': 593 $screen->guid .= ':' . $taxonomy; 594 if ( $post_type ) 595 $screen->guid .= ':' . $post_type; 596 break; 597 case 'edit': 598 case 'post': 599 $screen->guid .= ':' . $post_type; 600 break; 518 601 } 519 602 603 $screen->id = $id; 520 604 $screen->base = $base; 521 605 $screen->action = $action; 522 606 $screen->post_type = (string) $post_type; … … 525 609 $screen->is_network = ( 'network' == $in_admin ); 526 610 $screen->in_admin = $in_admin; 527 611 528 self::$_registry[ $id ] = $screen;529 530 612 return $screen; 531 }613 } 532 614 533 615 /** 534 616 * Makes the screen object the current screen. -
wp-admin/edit-tags.php
351 351 <h3><?php echo $tax->labels->add_new_item; ?></h3> 352 352 <form id="addtag" method="post" action="edit-tags.php" class="validate"> 353 353 <input type="hidden" name="action" value="add-tag" /> 354 <input type="hidden" name="screen" value="<?php echo esc_attr($current_screen-> id); ?>" />354 <input type="hidden" name="screen" value="<?php echo esc_attr($current_screen->guid); ?>" /> 355 355 <input type="hidden" name="taxonomy" value="<?php echo esc_attr($taxonomy); ?>" /> 356 356 <input type="hidden" name="post_type" value="<?php echo esc_attr($post_type); ?>" /> 357 357 <?php wp_nonce_field('add-tag', '_wpnonce_add-tag'); ?>