WordPress 4.5
[autoinstalls/wordpress.git] / wp-admin / includes / screen.php
1 <?php
2 /**
3  * WordPress Administration Screen API.
4  *
5  * @package WordPress
6  * @subpackage Administration
7  */
8
9 /**
10  * Get the column headers for a screen
11  *
12  * @since 2.7.0
13  *
14  * @staticvar array $column_headers
15  *
16  * @param string|WP_Screen $screen The screen you want the headers for
17  * @return array Containing the headers in the format id => UI String
18  */
19 function get_column_headers( $screen ) {
20         if ( is_string( $screen ) )
21                 $screen = convert_to_screen( $screen );
22
23         static $column_headers = array();
24
25         if ( ! isset( $column_headers[ $screen->id ] ) ) {
26
27                 /**
28                  * Filter the column headers for a list table on a specific screen.
29                  *
30                  * The dynamic portion of the hook name, `$screen->id`, refers to the
31                  * ID of a specific screen. For example, the screen ID for the Posts
32                  * list table is edit-post, so the filter for that screen would be
33                  * manage_edit-post_columns.
34                  *
35                  * @since 3.0.0
36                  *
37                  * @param array $columns An array of column headers. Default empty.
38                  */
39                 $column_headers[ $screen->id ] = apply_filters( "manage_{$screen->id}_columns", array() );
40         }
41
42         return $column_headers[ $screen->id ];
43 }
44
45 /**
46  * Get a list of hidden columns.
47  *
48  * @since 2.7.0
49  *
50  * @param string|WP_Screen $screen The screen you want the hidden columns for
51  * @return array
52  */
53 function get_hidden_columns( $screen ) {
54         if ( is_string( $screen ) ) {
55                 $screen = convert_to_screen( $screen );
56         }
57
58         $hidden = get_user_option( 'manage' . $screen->id . 'columnshidden' );
59
60         $use_defaults = ! is_array( $hidden );
61
62         if ( $use_defaults ) {
63                 $hidden = array();
64
65                 /**
66                  * Filter the default list of hidden columns.
67                  *
68                  * @since 4.4.0
69                  *
70                  * @param array     $hidden An array of columns hidden by default.
71                  * @param WP_Screen $screen WP_Screen object of the current screen.
72                  */
73                 $hidden = apply_filters( 'default_hidden_columns', $hidden, $screen );
74         }
75
76         /**
77          * Filter the list of hidden columns.
78          *
79          * @since 4.4.0
80          * @since 4.4.1 Added the `use_defaults` parameter.
81          *
82          * @param array     $hidden An array of hidden columns.
83          * @param WP_Screen $screen WP_Screen object of the current screen.
84          * @param bool      $use_defaults Whether to show the default columns.
85          */
86         return apply_filters( 'hidden_columns', $hidden, $screen, $use_defaults );
87 }
88
89 /**
90  * Prints the meta box preferences for screen meta.
91  *
92  * @since 2.7.0
93  *
94  * @global array $wp_meta_boxes
95  *
96  * @param WP_Screen $screen
97  */
98 function meta_box_prefs( $screen ) {
99         global $wp_meta_boxes;
100
101         if ( is_string( $screen ) )
102                 $screen = convert_to_screen( $screen );
103
104         if ( empty($wp_meta_boxes[$screen->id]) )
105                 return;
106
107         $hidden = get_hidden_meta_boxes($screen);
108
109         foreach ( array_keys( $wp_meta_boxes[ $screen->id ] ) as $context ) {
110                 foreach ( array( 'high', 'core', 'default', 'low' ) as $priority ) {
111                         if ( ! isset( $wp_meta_boxes[ $screen->id ][ $context ][ $priority ] ) ) {
112                                 continue;
113                         }
114                         foreach ( $wp_meta_boxes[ $screen->id ][ $context ][ $priority ] as $box ) {
115                                 if ( false == $box || ! $box['title'] )
116                                         continue;
117                                 // Submit box cannot be hidden
118                                 if ( 'submitdiv' == $box['id'] || 'linksubmitdiv' == $box['id'] )
119                                         continue;
120                                 $box_id = $box['id'];
121                                 echo '<label for="' . $box_id . '-hide">';
122                                 echo '<input class="hide-postbox-tog" name="' . $box_id . '-hide" type="checkbox" id="' . $box_id . '-hide" value="' . $box_id . '"' . (! in_array($box_id, $hidden) ? ' checked="checked"' : '') . ' />';
123                                 echo "{$box['title']}</label>\n";
124                         }
125                 }
126         }
127 }
128
129 /**
130  * Get Hidden Meta Boxes
131  *
132  * @since 2.7.0
133  *
134  * @param string|WP_Screen $screen Screen identifier
135  * @return array Hidden Meta Boxes
136  */
137 function get_hidden_meta_boxes( $screen ) {
138         if ( is_string( $screen ) )
139                 $screen = convert_to_screen( $screen );
140
141         $hidden = get_user_option( "metaboxhidden_{$screen->id}" );
142
143         $use_defaults = ! is_array( $hidden );
144
145         // Hide slug boxes by default
146         if ( $use_defaults ) {
147                 $hidden = array();
148                 if ( 'post' == $screen->base ) {
149                         if ( 'post' == $screen->post_type || 'page' == $screen->post_type || 'attachment' == $screen->post_type )
150                                 $hidden = array('slugdiv', 'trackbacksdiv', 'postcustom', 'postexcerpt', 'commentstatusdiv', 'commentsdiv', 'authordiv', 'revisionsdiv');
151                         else
152                                 $hidden = array( 'slugdiv' );
153                 }
154
155                 /**
156                  * Filter the default list of hidden meta boxes.
157                  *
158                  * @since 3.1.0
159                  *
160                  * @param array     $hidden An array of meta boxes hidden by default.
161                  * @param WP_Screen $screen WP_Screen object of the current screen.
162                  */
163                 $hidden = apply_filters( 'default_hidden_meta_boxes', $hidden, $screen );
164         }
165
166         /**
167          * Filter the list of hidden meta boxes.
168          *
169          * @since 3.3.0
170          *
171          * @param array     $hidden       An array of hidden meta boxes.
172          * @param WP_Screen $screen       WP_Screen object of the current screen.
173          * @param bool      $use_defaults Whether to show the default meta boxes.
174          *                                Default true.
175          */
176         return apply_filters( 'hidden_meta_boxes', $hidden, $screen, $use_defaults );
177 }
178
179 /**
180  * Register and configure an admin screen option
181  *
182  * @since 3.1.0
183  *
184  * @param string $option An option name.
185  * @param mixed $args Option-dependent arguments.
186  */
187 function add_screen_option( $option, $args = array() ) {
188         $current_screen = get_current_screen();
189
190         if ( ! $current_screen )
191                 return;
192
193         $current_screen->add_option( $option, $args );
194 }
195
196 /**
197  * Get the current screen object
198  *
199  * @since 3.1.0
200  *
201  * @global WP_Screen $current_screen
202  *
203  * @return WP_Screen Current screen object
204  */
205 function get_current_screen() {
206         global $current_screen;
207
208         if ( ! isset( $current_screen ) )
209                 return null;
210
211         return $current_screen;
212 }
213
214 /**
215  * Set the current screen object
216  *
217  * @since 3.0.0
218  *
219  * @param mixed $hook_name Optional. The hook name (also known as the hook suffix) used to determine the screen,
220  *                             or an existing screen object.
221  */
222 function set_current_screen( $hook_name = '' ) {
223         WP_Screen::get( $hook_name )->set_current_screen();
224 }