WordPress.org

Make WordPress Core

Ticket #21871: 21871-guid.3.diff

File 21871-guid.3.diff, 3.4 KB (added by ryan, 2 years ago)

Now with mess to guid translation

  • 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                $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 = '' ) { 
    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; 
     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; 
    518596                } 
    519597 
     598                $screen->id         = $id; 
    520599                $screen->base       = $base; 
    521600                $screen->action     = $action; 
    522601                $screen->post_type  = (string) $post_type; 
     
    525604                $screen->is_network = ( 'network' == $in_admin ); 
    526605                $screen->in_admin   = $in_admin; 
    527606 
    528                 self::$_registry[ $id ] = $screen; 
    529  
    530607                return $screen; 
    531         } 
     608        } 
    532609 
    533610        /** 
    534611         * Makes the screen object the current screen.