WordPress.org

Make WordPress Core

Ticket #21871: 21871-guid.2.diff

File 21871-guid.2.diff, 3.1 KB (added by ryan, 2 years ago)
  • wp-admin/includes/screen.php

     
    237237        /** 
    238238         * The unique ID of the screen. 
    239239         * 
     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         * 
    240249         * @since 3.3.0 
    241250         * @var string 
    242251         * @access public 
     
    391400                if ( is_a( $hook_name, 'WP_Screen' ) ) 
    392401                        return $hook_name; 
    393402 
     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 = '' ) { 
    394465                $post_type = $taxonomy = null; 
    395466                $in_admin = false; 
    396467                $action = ''; 
     
    437508 
    438509                        if ( ! $in_admin ) 
    439510                                $in_admin = 'site'; 
    440                 } else { 
     511                } elseif ( ! $in_admin ) { 
    441512                        if ( defined( 'WP_NETWORK_ADMIN' ) && WP_NETWORK_ADMIN ) 
    442513                                $in_admin = 'network'; 
    443514                        elseif ( defined( 'WP_USER_ADMIN' ) && WP_USER_ADMIN ) 
     
    508579                        $base .= '-user'; 
    509580                } 
    510581 
    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 
    519583 
     584                $screen = new stdClass; 
     585                $screen->id         = $id; 
    520586                $screen->base       = $base; 
    521587                $screen->action     = $action; 
    522588                $screen->post_type  = (string) $post_type; 
     
    525591                $screen->is_network = ( 'network' == $in_admin ); 
    526592                $screen->in_admin   = $in_admin; 
    527593 
    528                 self::$_registry[ $id ] = $screen; 
    529  
    530594                return $screen; 
    531         } 
     595        } 
    532596 
    533597        /** 
    534598         * Makes the screen object the current screen.