WordPress.org

Make WordPress Core

Ticket #18785: 18785.6.diff

File 18785.6.diff, 14.4 KB (added by nacin, 3 years ago)

Refresh after [19050], [19051].

  • wp-admin/includes/screen.php

     
    113113 * @since 3.0.0 
    114114 * 
    115115 * @param string $hook_name The hook name (also known as the hook suffix) used to determine the screen. 
    116  * @return object An object containing the safe screen name and id 
     116 * @return WP_Screen Screen object. 
    117117 */ 
    118 function convert_to_screen( $hook_suffix ) { 
    119         $screen = str_replace( array('.php', '-new', '-add', '-network', '-user' ), '', $hook_suffix); 
    120  
    121         if ( is_network_admin() ) 
    122                 $screen .= '-network'; 
    123         elseif ( is_user_admin() ) 
    124                 $screen .= '-user'; 
    125  
    126         $screen = (string) apply_filters( 'screen_meta_screen', $screen ); 
    127         $screen = (object) array( 'id' => $screen, 'base' => $screen ); 
    128         return $screen; 
     118function convert_to_screen( $hook_name ) { 
     119        return WP_Screen::get( $hook_name ); 
    129120} 
    130121 
    131122/** 
     
    201192                else 
    202193                        $icon_id = $screen->base; 
    203194 
    204                 if ( ! empty( $screen->post_type ) && 'page' == $screen->post_type ) 
     195                if ( 'page' == $screen->post_type ) 
    205196                        $icon_id = 'edit-pages'; 
    206197 
    207                 if ( ! empty( $screen->post_type ) ) 
     198                if ( $screen->post_type ) 
    208199                        $class .= ' ' . sanitize_html_class( 'icon32-posts-' . $screen->post_type ); 
    209200        } 
    210201 
     
    233224 * @since 3.0.0 
    234225 * @uses $current_screen 
    235226 * 
    236  * @param string $hook_name Optional. The hook name (also known as the hook suffix) used to determine the screen. 
     227 * @param mixed $hook_name Optional. The hook name (also known as the hook suffix) used to determine the screen, 
     228 *      or an existing screen object. 
    237229 */ 
    238230function set_current_screen( $hook_name =  '' ) { 
    239         global $current_screen; 
    240  
    241         $current_screen = new WP_Screen( $hook_name ); 
    242  
    243         $current_screen = apply_filters('current_screen', $current_screen); 
     231        WP_Screen::get( $hook_name )->set_current_screen(); 
    244232} 
    245233 
    246234/** 
     
    320308        /** 
    321309         * The post type associated with the screen, if any. 
    322310         * The 'edit.php?post_type=page' screen has a post type of 'page'. 
     311         * The 'edit-tags.php?taxonomy=$taxonomy&post_type=page' screen has a post type of 'page'. 
    323312         * 
    324313         * @since 3.3.0 
    325314         * @var string 
     
    343332         * @var array 
    344333         * @access private 
    345334         */ 
    346         private static $_help_tabs = array(); 
     335        private $_help_tabs = array(); 
    347336  
    348337        /** 
    349          * The help sidebar data associated with screens, if any. 
     338         * The help sidebar data associated with screen, if any. 
    350339         * 
    351340         * @since 3.3.0 
    352341         * @var string 
    353342         * @access private 
    354343         */ 
    355         private static $_help_sidebar = array(); 
     344        private $_help_sidebar = ''; 
    356345 
    357346        /** 
    358347         * Stores old string-based help. 
     
    360349        private static $_old_compat_help = array(); 
    361350 
    362351        /** 
    363          * The screen options associated with screens, if any. 
     352         * The screen options associated with screen, if any. 
    364353         * 
    365354         * @since 3.3.0 
    366355         * @var array 
    367356         * @access private 
    368357         */ 
    369         private static $_options = array(); 
     358        private $_options = array(); 
    370359 
    371360        /** 
     361         * The screen object registry. 
     362         * 
     363         * @since 3.3.0 
     364         * @var array 
     365         * @access private 
     366         */ 
     367        private static $_registry = array(); 
     368 
     369        /** 
    372370         * Stores the result of the public show_screen_options function. 
    373371         * 
    374372         * @since 3.3.0 
     
    386384         */ 
    387385        private $_screen_settings; 
    388386 
    389         /** 
    390          * Constructor 
    391          * 
    392          * @since 3.3.0 
    393          * 
    394          * @param string $id A screen id.  If empty, the $hook_suffix global is used to derive the ID. 
    395          */ 
    396         public function __construct( $id = '' ) { 
    397                 global $hook_suffix, $typenow, $taxnow; 
     387        /** 
     388         * Fetches a screen object. 
     389         * 
     390         * @since 3.3.0 
     391         * @access public 
     392         * 
     393         * @param string $hook_name Optional. The hook name (also known as the hook suffix) used to determine the screen. 
     394         *      Defaults to the current $hook_suffix global. 
     395         * @return WP_Screen Screen object. 
     396         */ 
     397        public function get( $hook_name = '' ) { 
     398  
     399                if ( is_a( $hook_name, 'WP_Screen' ) ) 
     400                        return $hook_name; 
     401  
     402                $action = $post_type = $taxonomy = ''; 
    398403 
    399                 $action = ''; 
     404                if ( $hook_name ) { 
     405                        if ( '-network' == substr( $hook_name, -8 ) ) 
     406                                $hook_name = str_replace( '-network', '', $hook_name ); 
     407                        elseif ( '-user' == substr( $hook_name, -5 ) ) 
     408                                $hook_name = str_replace( '-user', '', $hook_name ); 
     409                        $id = sanitize_key( $hook_name ); 
     410                        if ( false !== strpos( $id, '-' ) ) { 
     411                                list( $id, $second ) = explode( '-', $id, 2 ); 
     412                                if ( taxonomy_exists( $second ) ) { 
     413                                        $id = 'edit-tags'; 
     414                                        $taxonomy = $second; 
     415                                } elseif ( post_type_exists( $second ) ) { 
     416                                        $post_type = $second; 
     417                                } else { 
     418                                        $id .= '-' . $second; 
     419                                } 
     420                        } 
     421                } else { 
     422                        $id = $GLOBALS['hook_suffix']; 
     423                        $id = str_replace( '.php', '', $id ); 
     424                        if ( in_array( substr( $id, -4 ), array( '-add', '-new' ) ) ) 
     425                                $action = 'add'; 
     426                        $id = str_replace( array( '-new', '-add' ), '', $id ); 
     427                } 
     428  
     429                if ( 'index' == $id ) 
     430                        $id = 'dashboard'; 
     431  
     432                $base = $id; 
     433  
     434                // If this is the current screen, see if we can be more accurate for post types and taxonomies. 
     435                if ( ! $hook_name ) { 
     436                        switch ( $base ) { 
     437                                case 'post' : 
     438                                        if ( isset( $_GET['post'] ) ) 
     439                                                $post_id = (int) $_GET['post']; 
     440                                        elseif ( isset( $_POST['post_ID'] ) ) 
     441                                                $post_id = (int) $_POST['post_ID']; 
     442                                        else 
     443                                                $post_id = 0; 
    400444 
    401                 if ( empty( $id ) ) { 
    402                         $screen = $hook_suffix; 
    403                         $screen = str_replace('.php', '', $screen); 
    404                         if ( preg_match('/-add|-new$/', $screen) ) 
    405                                 $action = 'add'; 
    406                         $screen = str_replace('-new', '', $screen); 
    407                         $screen = str_replace('-add', '', $screen); 
    408                         $this->id = $this->base = $screen; 
    409                 } else { 
    410                         $id = sanitize_key( $id ); 
    411                         if ( false !== strpos($id, '-') ) { 
    412                                 list( $id, $typenow ) = explode('-', $id, 2); 
    413                                 if ( taxonomy_exists( $typenow ) ) { 
    414                                         $id = 'edit-tags'; 
    415                                         $taxnow = $typenow; 
    416                                         $typenow = ''; 
    417                                 } 
     445                                        if ( $post_id ) { 
     446                                                $post = get_post( $post_id ); 
     447                                                if ( $post ) 
     448                                                        $post_type = $post->post_type; 
     449                                        } elseif ( isset( $_POST['post_type'] ) && post_type_exists( $_POST['post_type'] ) ) { 
     450                                                $post_type = $_GET['post_type']; 
     451                                        } elseif ( $action == 'add' && isset( $_GET['post_type'] ) && post_type_exists( $_GET['post_type'] ) ) { 
     452                                                $post_type = $_GET['post_type']; 
     453                                        } 
     454                                        break; 
     455                                case 'edit' : 
     456                                        if ( isset( $_GET['post_type'] ) && post_type_exists( $_GET['post_type'] ) ) 
     457                                                $post_type = $_GET['post_type']; 
     458                                        break; 
     459                                case 'edit-tags' : 
     460                                        if ( isset( $_REQUEST['taxonomy'] ) && taxonomy_exists( $_REQUEST['taxonomy'] ) ) 
     461                                                $taxonomy = $_REQUEST['taxonomy']; 
     462                                        if ( isset( $_REQUEST['post_type'] ) && post_type_exists( $_REQUEST['post_type'] ) ) 
     463                                                $post_type = $_REQUEST['post_type']; 
     464                                        else 
     465                                                $post_type = 'post'; 
     466                                        break; 
    418467                        } 
    419                         $this->id = $this->base = $id; 
     468                } 
     469  
     470                switch ( $base ) { 
     471                        case 'post' : 
     472                                if ( ! $post_type ) 
     473                                        $post_type = 'post'; 
     474                                $id = $post_type; 
     475                                break; 
     476                        case 'edit' : 
     477                                if ( ! $post_type ) 
     478                                        $post_type = 'post'; 
     479                                $id .= '-' . $post_type; 
     480                                break; 
     481                        case 'edit-tags' : 
     482                                if ( ! $taxonomy ) 
     483                                        $taxonomy = 'post_tag'; 
     484                                $id = 'edit-' . $taxonomy; 
     485                                break; 
    420486                } 
     487  
     488                if ( is_network_admin() ) { 
     489                        $id   .= '-network'; 
     490                        $base .= '-network'; 
     491                } elseif ( is_user_admin() ) { 
     492                        $id   .= '-user'; 
     493                        $base .= '-user'; 
     494                } 
     495  
     496                if ( isset( self::$_registry[ $id ] ) ) 
     497                        return self::$_registry[ $id ]; 
    421498 
    422                 $this->action = $action; 
     499                $screen = new WP_Screen(); 
     500                $screen->id         = $id; 
     501                $screen->base       = $base; 
     502                $screen->action     = $action; 
     503                $screen->post_type  = $post_type; 
     504                $screen->taxonomy   = $taxonomy; 
     505                $screen->is_user    = is_user_admin(); 
     506                $screen->is_network = is_network_admin(); 
    423507 
    424                 // Map index to dashboard 
    425                 if ( 'index' == $this->base ) 
    426                         $this->base = 'dashboard'; 
    427                 if ( 'index' == $this->id ) 
    428                         $this->id = 'dashboard'; 
     508                self::$_registry[ $id ] = $screen; 
    429509 
    430                 if ( 'edit' == $this->id ) { 
    431                         if ( empty($typenow) ) 
    432                                 $typenow = 'post'; 
    433                         $this->id .= '-' . $typenow; 
    434                         $this->post_type = $typenow; 
    435                 } elseif ( 'post' == $this->id ) { 
    436                         if ( empty($typenow) ) 
    437                                 $typenow = 'post'; 
    438                         $this->id = $typenow; 
    439                         $this->post_type = $typenow; 
    440                 } elseif ( 'edit-tags' == $this->id ) { 
    441                         if ( empty($taxnow) ) 
    442                                 $taxnow = 'post_tag'; 
    443                         $this->id = 'edit-' . $taxnow; 
    444                         $this->taxonomy = $taxnow; 
    445                 } 
    446  
    447                 $this->is_network = is_network_admin(); 
    448                 $this->is_user = is_user_admin(); 
    449  
    450                 if ( $this->is_network ) { 
    451                         $this->base .= '-network'; 
    452                         $this->id .= '-network'; 
    453                 } elseif ( $this->is_user ) { 
    454                         $this->base .= '-user'; 
    455                         $this->id .= '-user'; 
    456                 } 
    457  
    458                 if ( ! isset( self::$_help_tabs[ $this->id ] ) ) 
    459                         self::$_help_tabs[ $this->id ] = array(); 
    460                 if ( ! isset( self::$_help_sidebar[ $this->id ] ) ) 
    461                         self::$_help_sidebar[ $this->id ] = ''; 
    462                 if ( ! isset( self::$_options[ $this->id ] ) ) 
    463                         self::$_options[ $this->id ] = array(); 
     510                return $screen; 
     511        } 
     512  
     513        /** 
     514         * Makes the screen object the current screen. 
     515         * 
     516         * @see set_current_screen() 
     517         * @since 3.3.0 
     518         */ 
     519        function set_current_screen() { 
     520                global $current_screen, $taxnow, $typenow; 
     521                $current_screen = $this; 
     522                $taxnow = $this->taxonomy; 
     523                $typenow = $this->post_type; 
     524                $current_screen = apply_filters( 'current_screen', $current_screen ); 
    464525        } 
    465526 
    466527        /** 
     528         * Constructor 
     529         * 
     530         * @since 3.3.0 
     531         * @access private 
     532         */ 
     533        private function __construct() {} 
     534 
     535        /** 
    467536         * Sets the old string-based contextual help for the screen. 
    468537         * 
    469538         * For backwards compatibility. 
     
    501570         * @param mixed $args Option-dependent arguments. 
    502571         */ 
    503572        public function add_option( $option, $args = array() ) { 
    504                 self::$_options[ $this->id ][ $option ] = $args; 
     573                $this->_options[ $option ] = $args; 
    505574        } 
    506575 
    507576        /** 
     
    512581         * @param string 
    513582         */ 
    514583        public function get_option( $option, $key = false ) { 
    515                 if ( ! isset( self::$_options[ $this->id ][ $option ] ) ) 
     584                if ( ! isset( $this->_options[ $option ] ) ) 
    516585                        return null; 
    517586                if ( $key ) { 
    518                         if ( isset( self::$_options[ $this->id ][ $option ][ $key ] ) ) 
    519                                 return self::$_options[ $this->id ][ $option ][ $key ]; 
     587                        if ( isset( $this->_options[ $option ][ $key ] ) ) 
     588                                return $this->_options[ $option ][ $key ]; 
    520589                        return null; 
    521590                } 
    522                 return self::$_options[ $this->id ][ $option ]; 
     591                return $this->_options[ $option ]; 
    523592        } 
    524593 
    525594        /** 
     
    550619                if ( ! $args['id'] || ! $args['title'] ) 
    551620                        return; 
    552621 
    553                 self::$_help_tabs[ $this->id ][] = $args; 
     622                $this->_help_tabs[] = $args; 
    554623        } 
    555624 
    556625        /** 
     
    562631         * @param string $content Sidebar content in plain text or HTML. 
    563632         */ 
    564633        public function add_help_sidebar( $content ) { 
    565                 self::$_help_sidebar[ $this->id ] = $content; 
     634                $this->_help_sidebar = $content; 
    566635        } 
    567636 
    568637        /** 
     
    577646                // Call old contextual_help_list filter. 
    578647                self::$_old_compat_help = apply_filters( 'contextual_help_list', self::$_old_compat_help, $this ); 
    579648 
    580                 if ( isset( self::$_old_compat_help[ $this->id ] ) || empty(self::$_help_tabs[ $this->id ] ) ) { 
     649                if ( isset( self::$_old_compat_help[ $this->id ] ) || empty($this->_help_tabs ) ) { 
    581650                        // Call old contextual_help filter. 
    582651                        if ( isset( self::$_old_compat_help[ $this->id ] ) ) 
    583652                                $contextual_help = apply_filters( 'contextual_help', self::$_old_compat_help[ $this->id ], $this->id, $this ); 
     
    603672                                'title'    => __('Screen Options'), 
    604673                                'callback' => array( $this, 'render_screen_options' ), 
    605674                        ) ); 
    606                         $_options_tab = array_pop( self::$_help_tabs[ $this->id ] ); 
    607                         array_unshift( self::$_help_tabs[ $this->id ], $_options_tab ); 
     675                        $_options_tab = array_pop( $this->_help_tabs ); 
     676                        array_unshift( $this->_help_tabs, $_options_tab ); 
    608677                } 
    609678 
    610679                // Time to render! 
     
    614683                        <div id="contextual-help-wrap" class="hidden"> 
    615684                                <div class="contextual-help-tabs"> 
    616685                                        <ul> 
    617                                         <?php foreach ( self::$_help_tabs[ $this->id ] as $i => $tab ): 
     686                                        <?php foreach ( $this->_help_tabs as $i => $tab ): 
    618687                                                $link_id  = "tab-link-{$tab['id']}"; 
    619688                                                $panel_id = "tab-panel-{$tab['id']}"; 
    620689                                                $classes  = ( $i == 0 ) ? 'active' : ''; 
     
    629698                                        </ul> 
    630699                                </div> 
    631700 
    632                                 <?php if ( ! empty( self::$_help_sidebar[ $this->id ] ) ) : ?> 
     701                                <?php if ( ! empty( $this->_help_sidebar ) ) : ?> 
    633702                                <div class="contextual-help-sidebar"> 
    634                                         <?php echo self::$_help_sidebar[ $this->id ]; ?> 
     703                                        <?php echo self::$this->_help_sidebar; ?> 
    635704                                </div> 
    636705                                <?php endif; ?> 
    637706 
    638707                                <div class="contextual-help-tabs-wrap"> 
    639                                         <?php foreach ( self::$_help_tabs[ $this->id ] as $i => $tab ): 
     708                                        <?php foreach ( $this->_help_tabs as $i => $tab ): 
    640709                                                $panel_id = "tab-panel-{$tab['id']}"; 
    641710                                                $classes  = ( $i == 0 ) ? 'active' : ''; 
    642711                                                $classes .= ' help-tab-content'; 
     
    677746                                break; 
    678747                } 
    679748 
    680                 if ( $this->_screen_settings || self::$_options[ $this->id ] ) 
     749                if ( $this->_screen_settings || $this->_options ) 
    681750                        $show_screen = true; 
    682751 
    683752                $this->_show_screen_options = apply_filters( 'screen_options_show_screen', $show_screen, $this ); 
  • wp-admin/post.php

     
    1616 
    1717wp_reset_vars(array('action', 'safe_mode', 'withcomments', 'posts', 'content', 'edited_post_title', 'comment_error', 'profile', 'trackback_url', 'excerpt', 'showcomments', 'commentstart', 'commentend', 'commentorder')); 
    1818 
    19 if ( isset($_GET['post']) ) 
    20         $post_id = (int) $_GET['post']; 
    21 elseif ( isset($_POST['post_ID']) ) 
    22         $post_id = (int) $_POST['post_ID']; 
    23 else 
    24         $post_id = 0; 
    25 $post_ID = $post_id; 
    26 $post = null; 
    27 $post_type_object = null; 
    28 $post_type = null; 
    29 if ( $post_id ) { 
    30         $post = get_post($post_id); 
    31         if ( $post ) { 
    32                 $post_type_object = get_post_type_object($post->post_type); 
    33                 if ( $post_type_object ) { 
    34                         $post_type = $post->post_type; 
    35                         $current_screen->post_type = $post->post_type; 
    36                         $current_screen->id = $current_screen->post_type; 
    37                 } 
    38         } 
    39 } elseif ( isset($_POST['post_type']) ) { 
    40         $post_type_object = get_post_type_object($_POST['post_type']); 
    41         if ( $post_type_object ) { 
    42                 $post_type = $post_type_object->name; 
    43                 $current_screen->post_type = $post_type; 
    44                 $current_screen->id = $current_screen->post_type; 
    45         } 
     19if ( isset( $_GET['post'] ) ) 
     20        $post_id = $post_ID = (int) $_GET['post']; 
     21elseif ( isset( $_POST['post_ID'] ) ) 
     22        $post_id = $post_ID = (int) $_POST['post_ID']; 
     23 else 
     24        $post_id = $post_ID = 0; 
     25 
     26$post = $post_type = $post_type_object = null; 
     27 
     28if ( $post_id ) 
     29        $post = get_post( $post_id ); 
     30 
     31if ( $post ) { 
     32        $post_type = $post->post_type; 
     33        $post_type_object = get_post_type_object( $post_type ); 
    4634} 
    4735 
    4836/**