WordPress.org

Make WordPress Core

Ticket #21871: 21871-guid.3.diff

File 21871-guid.3.diff, 3.4 KB (added by ryan, 6 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.